概要
「毎月のデータは何件もあるけど、“その月で一番新しいものだけ”見たい」
「月次レポート用に、月ごとの最新在庫・最新単価だけを抜き出したい」
こういうときに役立つのが、
日付で絞り込み → その中の最新日付を取り出す → その行だけ 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か月分の最新データ」を取るやり方が分かりました。
これを「全部の月についてやる」と、
「月別最新データ一覧」が作れます。
考え方の流れは次のようになります。
- D列の年月から UNIQUE で「年月一覧」を作る
- その年月ごとに、さきほどの「月別最新行の式」を使う
イメージだけ書いておくと、例えば
- 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件”」を自動で取り出すシートを、自在に組めるようになります。
