【VBAリファレンス】エクセル入門FREQUENCY関数(値の頻度を縦方向の配列で返す)

スポンサーリンク

FREQUENCY関数:データ分析の精度を劇的に向上させる配列数式の真髄

Excelを用いたデータ分析の現場において、特定の範囲内に数値がいくつ含まれているかをカウントする作業は避けて通れません。例えば、売上データを1万円単位で区切って分布を可視化したい、あるいはテストの点数を10点刻みで集計し、どの階級に生徒が集中しているかを把握したいといったケースです。

このような「度数分布表」を作成する際、最も強力かつ効率的な武器となるのがFREQUENCY関数です。本稿では、FREQUENCY関数の基本的な仕組みから、配列数式としての特性、そして実務で遭遇するトラブルを回避するための高度なテクニックまでを網羅的に解説します。

FREQUENCY関数の基本構造とデータ処理の仕組み

FREQUENCY関数は、その名の通りデータの「頻度(Frequency)」を計算するための関数です。一般的なCOUNTIF関数やCOUNTIFS関数が「条件に一致する個数」を個別に数えるのに対し、FREQUENCY関数は「複数の区間(ビン)」を一括で評価し、その結果を「縦方向の配列」として返却します。

関数の構文は以下の通りです。

FREQUENCY(データ配列, 区間配列)

データ配列には、集計対象となる数値が格納されたセル範囲を指定します。一方、区間配列には、データを区切るための閾値(境界値)を指定します。この関数の最大の特徴は、計算結果が単一のセルに収まるのではなく、指定した区間配列の要素数よりも1つ多いセル範囲に展開される「スピル」機能を持っている点にあります。

例えば、区間配列に3つの閾値を設定した場合、FREQUENCY関数は合計4つの値を返します。これは、「最小値から第1閾値まで」「第1閾値から第2閾値まで」「第2閾値から第3閾値まで」「第3閾値を超える値」という4つのグループに自動的に分類されるためです。

配列数式としての挙動とスピル機能の理解

かつてのExcel(Office 2019以前)では、FREQUENCY関数を入力する際に、あらかじめ出力先のセル範囲を選択し、Ctrl + Shift + Enterキーを押下して「配列数式」として確定させる必要がありました。しかし、Microsoft 365やExcel 2021以降では、このプロセスは劇的に簡素化されています。

現在では、計算結果を表示したい左上のセルに数式を入力するだけで、結果が自動的に下のセルへと溢れ出す「スピル(Spill)」機能が作動します。もし出力先のセルにデータが存在する場合、Excelは「#SPILL!」エラーを返します。これは、関数が結果を出力するための領域を確保できていないことを示す警告です。

実務においては、この配列の特性を正しく理解しておくことが重要です。FREQUENCY関数は、単に数値をカウントするだけでなく、データがどのような分布を描いているのかという「形」を可視化するための基礎データを提供しているのです。

サンプルコード:売上分布表を作成する実装例

以下の例では、A2:A21にある売上データに対し、E2:E4に設定した区間(10000, 20000, 30000)を用いて、各階級の頻度を算出するケースを想定します。


' VBAでFREQUENCY関数をワークシートに書き込む際のイメージ
Sub CreateFrequencyDistribution()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    ' データ範囲: A2:A21
    ' 区間範囲: E2:E4
    ' 結果出力先: F2:F5
    
    ' Excelのスピル機能を利用して数式をセット
    ws.Range("F2").Formula2 = "=FREQUENCY(A2:A21, E2:E4)"
    
    ' 結果の確認とフォーマット
    With ws.Range("F2:F5")
        .HorizontalAlignment = xlCenter
        .Font.Bold = True
    End With
End Sub

上記のコードでは、Formula2プロパティを使用しています。これはスピルを伴う配列数式をVBAから入力する際に推奨される手法です。このコードを実行すると、F2からF5のセルにそれぞれの階級に該当する件数が自動的に格納されます。

実務アドバイス:FREQUENCY関数の運用における注意点

FREQUENCY関数を実務で活用する際、エンジニアが必ず押さえておくべきポイントが3つあります。

第一に、「空白セルの扱い」です。FREQUENCY関数は、データ配列内の空白セルを「0」として扱います。もし集計対象に空白が含まれる可能性がある場合、意図せず「0以下の階級」としてカウントされてしまうリスクがあります。これを避けるには、FILTER関数と組み合わせ、数値のみを抽出した配列を第一引数に渡すのが定石です。

第二に、「区間配列の昇順ルール」です。FREQUENCY関数は区間配列が昇順に並んでいることを前提としています。もし順序が乱れていると、計算結果が正しく算出されません。データ分析の前工程として、SORT関数を使用して区間配列を確実に昇順へ整列させてからFREQUENCY関数に渡す設計が、堅牢なシステム構築には不可欠です。

第三に、「動的範囲への対応」です。データの行数が日々増減するような現場では、OFFSET関数やINDEX関数を用いた動的な範囲指定を行うよりも、Excelの「テーブル機能」を活用することを強く推奨します。テーブル名を参照することで、データが追加されても自動的に範囲が拡張され、数式の修正コストをゼロに抑えることが可能です。

FREQUENCY関数を活用した高度なデータ分析の展望

FREQUENCY関数は単体でも強力ですが、他の関数と組み合わせることでその真価は倍増します。例えば、TEXTJOIN関数やREPT関数と組み合わせることで、セル内に簡易的なヒストグラムをバーチャートとして描画することも可能です。

また、VBAを用いて頻度データを取得し、それを配列としてメモリ上で加工してからグラフオブジェクトを生成する手法は、大規模なダッシュボード作成における常套手段です。ループ処理で一つずつCOUNTIFを回すような非効率なコードは、FREQUENCY関数の配列処理に置き換えることで、処理速度を劇的に向上させることができます。

プロフェッショナルなExcelエンジニアは、単に「関数を知っている」だけでなく、「どの関数が計算資源を節約し、かつメンテナンス性の高い結果を生むか」という視点を持っています。FREQUENCY関数は、その意味で最もコストパフォーマンスに優れたツールの一つと言えるでしょう。

まとめ

FREQUENCY関数は、Excelにおけるデータ集計の基本でありながら、奥深い可能性を秘めた関数です。その「配列を返す」という特性を理解し、スピル機能や他の動的関数と組み合わせることで、複雑な分布分析も極めてシンプルに実装することが可能となります。

今回解説した基本構造、配列処理の仕組み、そして実務上の注意点をマスターすれば、あなたのExcelスキルは一段上のレベルへ到達するはずです。まずは手元の売上データやアンケート結果を使い、FREQUENCY関数による度数分布表の作成を実践してみてください。データの背後にある「分布の形」が見えたとき、Excelによるデータ分析の本当の面白さが理解できるはずです。

複雑な集計に時間を費やす時代は終わりました。FREQUENCY関数を使いこなし、より生産的で本質的なデータ分析業務へとシフトしていきましょう。

タイトルとURLをコピーしました