データ分析

Google Sheets COUNTIF ARRAYFORMULAで月範囲を集計する方法

ModelMonkey2026年9月2日読了約 1 分

たとえば、Assumptions!$B$3に2026/9/1が入力されている場合、年間売上4,200万円の計画モデルで、9月のClosed Won受注件数を数える式は次のとおりです。

=COUNTIFS(
  'Bookings'!$B$2:$B, ">=" & Assumptions!$B$3,
  'Bookings'!$B$2:$B, "<" & EDATE(Assumptions!$B$3, 1),
  'Bookings'!$F$2:$F, "Closed Won"
)

上限を「翌月月初より前」とすることが重要です。これにより、2026/9/30 23:59:59のようなタイムスタンプ付きのデータも漏れなく含められます。CRMやERPから取り込んだ深夜近くのレコードについて、終日の時刻を手作業で指定する必要もありません。

Googleは、COUNTIFを単一条件で件数を数える関数、COUNTIFSを複数条件に対応する関数として説明しています。また、ARRAYFORMULAは結果を複数のセルに展開するための機能であり、すべての集計関数を月ごとの計算に変えるものではありません。詳しくは、GoogleのCOUNTIFドキュメント、COUNTIFSドキュメントをご覧ください。

Google Sheets COUNTIF ARRAYFORMULAで月範囲を集計できない理由

次のような式を試したくなるかもしれません。

=ARRAYFORMULA(COUNTIF('Bookings'!$B$2:$B, ">=" & B$4))

この式は数値を返しますが、月末の条件を指定していません。さらに、ARRAYFORMULAで囲んでも、B4:M4に並んだ12か月について、COUNTIFが月ごとに別の結果を計算するわけではありません。1つの集計関数に、複数の集計結果を自動展開させようとしているためです。

月は単一の条件ではなく、期間として扱います。必ず下限と上限の両方を指定してください。

">=" & month_start
"<" & EDATE(month_start, 1)

EOMONTH(month_start, 0)は、元データの列に時刻が含まれていないと確信できる場合に限って使います。HubSpot、Stripe、給与システム、ERPから出力した実績データにはタイムスタンプが含まれることが多いため、翌月月初を上限にする方法のほうが安全です。

Google Sheets COUNTIF ARRAYFORMULAが機能するケース

COUNTIFとARRAYFORMULAの組み合わせが有効なのは、月別の集計値を直接作る場合ではなく、行単位のフラグを作る場合です。元データのタブに月の該当フラグを追加し、別の場所で合計します。

Bookings!B:Bに受注日、Assumptions!$B$3に月初、Bookings!F:Fに受注ステータスが入力されているとします。次の式は、9月のClosed Wonに該当する受注に1、それ以外に0を返します。

=ARRAYFORMULA(
  IF(
    B2:B="",
    ,
    --(
      (B2:B>=Assumptions!$B$3) *
      (B2:B<EDATE(Assumptions!$B$3,1)) *
      (F2:F="Closed Won")
    )
  )
)

この方法は、SKU別の限界利益ブリッジ、サプライチェーン分析、投資家向けプレゼンテーション用のデータ抽出など、どの行が対象になったか確認したい場合に便利です。一方、レポートに12か月分の集計値を並べる方法としては、必ずしも最もシンプルではありません。

GoogleのARRAYFORMULAドキュメントでも、複数の行や列に値を表示する機能として説明されています。ヘルパー列を作る用途に適した機能です。

FP&Aモデルで使える安定した月次集計式

Returns Analysis!C$4:N$4にカレンダー月のヘッダーが並んでいる場合、C18に次の式を入力して右方向にコピーします。

=COUNTIFS(
  'P&L Detail'!$C$2:$C, ">=" & C$4,
  'P&L Detail'!$C$2:$C, "<" & EDATE(C$4, 1),
  'P&L Detail'!$G$2:$G, $B18
)

B18にEnterpriseと入力されていれば、そのセグメントの月次件数が返ります。同じ月範囲の考え方で、売上のロールフォワードも作成できます。

=SUMIFS(
  'P&L'!C:C,
  'P&L'!B:B, ">=" & Assumptions!$B$3,
  'P&L'!B:B, "<" & EDATE(Assumptions!$B$3,1)
)

9月の決算確認では、286件のClosed Won受注と、粗利益率38.5%で計上された売上3,500万円を突き合わせられます。件数と売上は別の計算ですが、日付フィルターの変更によってEBITDA倍率14.2倍のエグジットケースが動いたとき、原因を確認する有効なチェック項目です。

COUNTIFS、ヘルパー列、QUERYの使い分け

方法適した用途弱点実務上のルール
日付範囲付きのCOUNTIFS月次レポート、KPIダッシュボード、経営会議資料各セルで条件を繰り返す必要がある12〜60か月のモデルでは基本の方法
ARRAYFORMULAによるヘルパーフラグ監査用の履歴、行単位の分類、後続のSUMIFS元データのタブに列が増える対象行を確認したい場合に使用
月別にグループ化するQUERY臨時の取引集計、新しい月次テーブル日付形式や出力レイアウトが崩れやすい分析用に使い、リンク済み財務諸表の基盤にはしない
ARRAYFORMULA付きのCOUNTIFスピル範囲に対する単一条件の集計月範囲を単独では正確に表現できない月次レポートでは避ける

QUERYを使えば整った月次テーブルを作れますが、モデル期間のヘッダーに連動したCOUNTIFSは、予測年度の追加、シナリオのコピー、会計カレンダーの変更にも対応しやすい傾向があります。1万行の実績データを扱うタブでは、式を1つ減らすことよりも、後から検証・修正しやすい構造にすることが重要です。

Googleのファイルサイズ制限によると、Google Sheetsでは最大1,000万セルまで扱えます。ただし、列全体を参照するとパフォーマンスの問題が見えにくくなることがあります。負荷の高いモデルでは、$B$2:$B$50000のように想定データ量に合わせて範囲を制限すると、前提条件を変更するたびに100万行を再計算する事態を防げます。

集計結果を変えてしまうカレンダー上の落とし穴

C$4にSep-26と表示されていても、実際には日付ではなくテキストの場合があります。その場合、明らかなエラーが出ないまま、式が0を返すことがあります。次の式で確認してください。

=ISNUMBER(C$4)

結果はTRUEでなければなりません。より確実にするなら、次のような式で月次ヘッダーを作成します。

=EDATE(Assumptions!$B$3, COLUMN()-COLUMN($C$4))

そのうえで、行全体の表示形式をmmm-yyに設定します。日付を装ったラベルではなく、実際の日付を使って月範囲を動かせる構成になります。

COUNTIFとARRAYFORMULAの月範囲に関するFAQ

月範囲の集計にはCOUNTIFとCOUNTIFSのどちらを使いますか?

開始日と終了日、ステータスなど複数の条件を指定する場合はCOUNTIFSを使います。月初以上、翌月月初未満という2つの条件が必要になるため、月次集計ではCOUNTIFよりCOUNTIFSが適しています。

ARRAYFORMULAでCOUNTIFを12か月分に展開できますか?

ARRAYFORMULAで囲むだけでは、COUNTIFが12か月分の異なる月範囲を自動計算するわけではありません。月別の集計値を作る場合は、各月のヘッダーを参照するCOUNTIFSをコピーする方法が安定します。

ARRAYFORMULAはいつ使うべきですか?

各行が特定の月に該当するかを1や0で示すヘルパー列を作るときに使います。その列をSUMIFSなどで集計すれば、監査やデータ確認がしやすくなります。

月末を上限にする方法では問題がありますか?

元データに時刻が含まれる場合、月末の日付を上限にすると、その日の午後や夜のデータが漏れる可能性があります。< EDATE(month_start, 1)を使い、翌月月初を含めない条件にするのが安全です。

2026年9月時点でも、Google Sheetsで月別の期間集計を行う最も扱いやすいパターンは、実際の月初日、開始条件の>=、終了条件の< EDATE(month_start,1)を組み合わせる方法です。四半期の経営会議資料から、採用ペースを変えたランウェイ感応度分析まで応用できます。

P&L、キャッシュフロー、CRMの生データに日付ロジックが分散したモデルを引き継いだ場合は、ModelMonkeyでリンク範囲を確認し、月の下限と上限が統一されていないフィルターを見つけられます。ModelMonkeyを14日間無料で試す - Google SheetsとExcelの両方で利用できます。