【複数一致するデータからの抽出】最新データを抽出する方法2 -DL有-

【複数一致するデータからの抽出】最新データを抽出する方法2, ダウンロード,アイキャッチ画像,FILTER,MAX

今回は、複数一致するデータの中から最新の情報を抽出する方法2を紹介します。

方法1は、『【複数一致するデータからの抽出】最新データを抽出する方法1 -DL有-』で紹介しています。

本記事はFILTER関数を軸とした方法です。

他の方法に興味がある方は以下を見てみてください。


シナリオ

A社の受注履歴が記録されたデータを想定します。

複数の受注データの中から、最新の受注番号を取得しようと思います。

この状況をどう解決するか、ステップバイステップで見ていきましょう。

複数一致するデータからの抽出:最新データを抽出する方法1 -DL有-,INDEX,match,max,if


目標は、この表から最新のA社の受注番号(この例では1004)を抽出することです。

解答

関数式

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max

=FILTER(B2:B6, (A2:A6=”A社”) * (C2:C6=MAX(FILTER(C2:C6, A2:A6=”A社”))))

解答付きサンプルデータ

解答付きサンプルデータが欲しい方は、下記からダウンロードしてください。

関数式の説明


下図は関数式の構造図です。
構造図に沿って、説明します。

関数式は引数に分けて考えるとわかりやすく、関数は引数によって成り立っています。

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max,構造図

ステップ1: A2:A6=”A社”の詳細な説明

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max,構造図

A2からA6までの各セルに含まれる値が「A社」と等しいかどうかを評価します。

これは、「=」演算子を用いて配列内の各値を特定の値(ここでは「A社」)と比較し、
結果を論理値(TRUEまたはFALSE)の配列として返します。

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max

「=」演算子による配列と値の比較の解説

「=」演算子は個別のセルだけの機能でありません。
セル範囲(配列)全体に対する一括比較が可能です。

この場合、A2:A6="A社"という式では、
A2:A6がセル範囲を表し、
この範囲内の各セルが「A社」という文字列と等しいかどうかが一括で評価されます。
各セルごとにTRUEまたはFALSEの値が生成されます。

ステップ2:FILTER(C2:C6,A2:A6=”A社”)

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max,構造図

ステップ1で設定した第2引数(A2:A6="A社")の条件に一致するデータを、
第1引数の範囲(C2:C6)から抽出します。

A2:A6で”A社”に一致する行のC列(日付)のデータを抽出します。

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max

FILTER関数の構文は、
【FILTER関数】条件に合わせてデータを抽出する方法 DL可 で詳しく説明しています。

ステップ3:MAX(FILTER(C2:C6, A2:A6=”A社”))

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max,構造図

MAX関数は、与えられた数値の中から最大値を返す関数です。

ステップ2でフィルタリングされた日付、つまり FILTER(C2:C6, A2:A6=“A社”) の中から、
最大値(最新の日付)を見つけています。
この場合、最大値は「2023/03/01」です。

MAX関数の構文は、MAX関数の構文 – 最大値 – DL有で詳しく説明しています。

ステップ4:(C2:C6=MAX(FILTER(C2:C6, A2:A6=”A社”)))

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max,構造図

 C2:C6の範囲内で、ステップ3で求めた最大値(最新の日付)と一致するデータを抽出します。
つまり、”A社”の最新の日付に一致するデータをC2:C6の範囲から抽出します。

この結果は以下のようになります:

  • データが最新の日付と一致 ⇒ TRUE(1)
  • データが最新の日付と一致しない ⇒ FALSE(0)

これらの値が返されます。

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max

ステップ5:(A2:A6=”A社”) * (C2:C6=MAX(FILTER(C2:C6, A2:A6=”A社”)))

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max,構造図

ステップ1で設定した第1引数(A2:A6=“A社”)
と、
ステップ4で求めた第2引数(C2:C6=MAX(FILTER(C2:C6, A2:A6=“A社”)))

の結果を要素ごとに乗算します。

この乗算は、両方の条件が

  • 両条件がTRUE ⇒ TRUE(または数値で1)
  • それ以外 ⇒ FALSE(または数値で0)

    を返す論理AND演算と同じです。

つまり、A列が”A社”かつC列が最新日付ならTRUE、それ以外はFALSEです。

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max

乗算とAND演算子は同じ動きすると覚えておいてください。

簡単に言うと・・・

0×1=0、1×1=1
 ※0=FALSE,1=TRUE

という考え方です。

ステップ6:FILTER(B2:B6, (A2:A6=”A社”) * (C2:C6=MAX(FILTER(C2:C6, A2:A6=”A社”))))

複数一致するデータからの抽出:最新データを抽出する方法,ダウンロード,,FILTER,If,max,構造図

ステップ5で得た結果((A2:A6="A社") * (C2:C6=MAX(FILTER(C2:C6, A2:A6="A社"))))をフィルタ条件として使用します。
具体的には、B2:B6(受注番号)からステップ5の結果が1(TRUE)である行のみを抽出します。
ここでは、ステップ5でTRUEと評価されたのは4行目のみでした。

結果として、「1004」という受注番号を返します。
これはA社で最新の日付に関連する受注番号です

最後に

特定の条件にマッチする最新のデータを抽出する方法を紹介しました。

MAX関数をMIN関数にすれば、最も古い日付のデータを取得できます。

様々な条件で、データ抽出できるため、是非応用してみてください。