Excel関数 逆引き集 | 月別最新データ取得 → FILTER

Excel VBA Excel
スポンサーリンク

概要

「毎月のデータは何件もあるけど、“その月で一番新しいものだけ”見たい」
「月次レポート用に、月ごとの最新在庫・最新単価だけを抜き出したい」

こういうときに役立つのが、
日付で絞り込み → その中の最新日付を取り出す → その行だけ FILTER で抜く
という流れです。

ここでは、初心者でも真似しやすいように

  • 月の指定をセルから行うパターン
  • 月ごとの最新行を FILTER で取るテンプレート

を中心に、丁寧に解説します。


基本の考え方(月別最新データの取り方)

「月別の最新データ」は、視点を分解すると次の二段階です。

1つの月について考えるときは、
「① その月の行だけに絞り込み」→「② その中で最新日付を見つける」→「③ その日付の行だけ抜き出す」
という流れになります。

FILTER が担うのは主に「① その月の行だけに絞り込み」と「③ その日付の行だけ抜き出す」です。
「② その中で最新日付を見つける」は MAX を使います。


準備:日付から「年月」を取り出す補助列を作る

年月列を作る

まずは「同じ月かどうか」を判定しやすくするために、日付から「年月」を取り出す補助列を作ります。

前提の表:

A列:日付
B列:商品名
C列:数量

A2:A100 に日付が入っているとします。

D列に「年月」だけを文字列として取り出します。
D2 に次の式を書いて、下にコピーしてください。

=TEXT(A2, "yyyy-mm")

これで、2025/04/05 → 2025-04
2025/04/20 → 2025-04
2025/05/01 → 2025-05
というように、「同じ月なら同じ文字列」になります。


1か月分の最新データを FILTER で取得する

月をセルで指定して、最新行だけ取る

「指定した月の中で一番新しい日付の行だけほしい」という、
一番よくあるパターンからいきます。

前提(さきほどの続き):

A列:日付
B列:商品名
C列:数量
D列:年月(=TEXT(A2,”yyyy-mm”) で作成済み)

F2 に「対象となる年月」を入力します。
例:2025-04

まず、その月の中でいちばん新しい日付を求めます。

G2 に次の式を書きます。

=MAX(FILTER(A2:A100, D2:D100=F2))

意味はこうです。

  • FILTER(A2:A100, D2:D100=F2) で、「D列の年月が F2 の行だけ」の日付を取り出す
  • その中で MAX を取ることで、「その月の中で最新の日付」を求める

次に、その「最新日付と同じ行」だけを FILTER で抽出します。
H2 に次の式を書きます。

=FILTER(A2:C100, A2:A100=G2)

ここまでの流れをまとめると、

  • G2:その月の最新日付
  • H2:その最新日付の行(A~C列)を全部抽出

となります。

もし「最新日付に複数行ある」(同じ日に複数データがある)場合も、
FILTER は「その日付の行すべて」を返してくれるので安心です。


1式にまとめたテンプレート(1か月分の最新行)

中級向け:最新日付の計算を式の中に埋め込む

さきほどの

  • G2 で「最新日付」
  • H2 で「その日付の行だけ FILTER」

という2ステップを、1つの式にまとめることもできます。

H2 に次のように書くイメージです。

=FILTER(
    A2:C100,
    A2:A100 = MAX(FILTER(A2:A100, D2:D100=F2))
)

説明すると、

  • 内側の FILTER(A2:A100, D2:D100=F2) で「その月の全日付」
  • その MAX(…) で「その月の最新日付」
  • 外側の FILTER( A2:C100, A2:A100 = その最新日付 ) で「最新日付の行だけ」

という二重構造になっています。

シンプルに言いかえると、
「月で絞ったあと、その中の最大日付でさらに絞る」
という処理を一発でやっている式です。


月別最新データを「月ごとに一覧」にする考え方

ここまでで「1か月分の最新データ」を取るやり方が分かりました。

これを「全部の月についてやる」と、
「月別最新データ一覧」が作れます。

考え方の流れは次のようになります。

  1. D列の年月から UNIQUE で「年月一覧」を作る
  2. その年月ごとに、さきほどの「月別最新行の式」を使う

イメージだけ書いておくと、例えば

  • G列に =UNIQUE(D2:D100) で年月一覧
  • G2 の年月を F2 と同じ役割として、行ごとに最新日付を求める

といった感じです。

ただし、ここから先は「月数ぶんの行に、それぞれ FILTER を書く」必要があるため、
まずは
「1か月分をきれいに取れる」
ことをしっかり身につけるのをおすすめします。


よくあるつまずきと注意点

日付が「文字列」扱いだと MAX が正しく動かない

見た目は日付でも、実際には「文字列」として入力されていると、
MAX で古い/新しいの判定がうまくいきません。

セルの表示形式を「日付」に揃えるか、
テキストから日付に変換してから使うようにしてください。

TEXT で作る「年月」はあくまで文字列

D列の TEXT(A2, "yyyy-mm") は文字列です。
比較(=、<>)には使えますが、
「日付の大小比較」には TEXT 化した値を使わないことがポイントです。
大小比較(MAX / MIN)は必ず“元の純粋な日付列”に対して行います。

該当データがない月を指定するとエラーになる

例えば F2 に「2025-09」と入力しても、
D列に 2025-09 が1つもなければ

MAX(FILTER(A2:A100, D2:D100=F2))

の FILTER 部分が空になり、エラーになります。

その場合は、IFERROR でくるむなどのエラー処理も検討してください。


例題

問題1

A2:A100 に日付、B2:B100 に商品名、C2:C100 に数量が入っています。
D2 に =TEXT(A2,"yyyy-mm") を入れて下までコピーし、「年月」列を作ってください。
2025年4月の最新データだけを取りたいとき、F2 に「2025-04」と入力した上で、
G2 にその月の最新日付を求める式を書いてください。

=MAX(FILTER(A2:A100, D2:D100=F2))

問題2

問題1の続きで、G2 に「2025-04 の最新日付」が入っているとします。
この最新日付の行(A~C列)だけを H2 から表示する FILTER の式を書いてください。

=FILTER(A2:C100, A2:A100=G2)

問題3

問題1と同じ前提で、
F2 に対象年月(例:2025-04)が入っているときに、
G2 に1つの式だけを書いて「F2 の月における最新日付の行(A~C列)」を表示する式を書いてください
(MAX と FILTER をネストしてください)。

=FILTER(
    A2:C100,
    A2:A100 = MAX(FILTER(A2:A100, D2:D100=F2))
)

問題4

A2:A100 に日付、B2:B100 に顧客名、C2:C100 に金額が入っています。
D2 に =TEXT(A2,"yyyy-mm") を作成済みとします。
F2 に「2025-05」と入力したとき、
その月の最新日付の「金額」だけを G2 に表示する式を書いてください
(まず最新日付を求め、それに一致する行の金額を XLOOKUP で取ってください)。

=XLOOKUP(
    MAX(FILTER(A2:A100, D2:D100=F2)),
    A2:A100,
    C2:C100
)

問題5

A2:A100 に日付、B2:B100 に商品名、C2:C100 に数量があります。
D2 に =TEXT(A2,"yyyy-mm") を作成済みとします。
F2 に「2025-06」と入力したとき、
2025年6月の「最新日付の行(A~C列)」を G2 から表示する FILTER の式を、
1つだけで書いてください。

=FILTER(
    A2:C100,
    A2:A100 = MAX(FILTER(A2:A100, D2:D100=F2))
)

まとめ

「月別最新データ取得 → FILTER」の基本パターンは、次の形に整理できます。

1か月分だけ最新行を取りたいときの定番テンプレートはこれです。

=FILTER(
    データ範囲,                        /* 例:A2:C100 */
    日付列 = MAX(FILTER(日付列, 年月列=指定年月セル))
)

具体例にすると:

=FILTER(
    A2:C100,
    A2:A100 = MAX(FILTER(A2:A100, D2:D100=F2))
)
  • 年月列(D列)は TEXT(日付,"yyyy-mm") で作る
  • 指定年月セル(F2)に “yyyy-mm” 形式で入力する
  • 月で絞った日付だけに MAX をかけ、その日付と等しい行だけ FILTER する

この流れが体で覚えられれば、
月次レポート、月別最新単価、月別最新在庫など、
「月ごとの“最新1件”」を自動で取り出すシートを、自在に組めるようになります。

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