【複数一致するデータからの抽出】最新データを抽出する方法2 -DL有-
今回は、複数一致するデータの中から最新の情報を抽出する方法2を紹介します。
方法1は、『【複数一致するデータからの抽出】最新データを抽出する方法1 -DL有-』で紹介しています。
本記事はFILTER関数を軸とした方法です。
他の方法に興味がある方は以下を見てみてください。
- 【複数一致するデータからの抽出】最新データを抽出する方法1 -DL有-
- 【複数一致するデータからの抽出】最新データを抽出する方法2 -DL有-
- 【複数一致するデータからの抽出】最新データを抽出する方法3 -DL有-
- 【複数一致するデータからの抽出】最新データを抽出する方法4 -DL有-
目次
シナリオ
A社の受注履歴が記録されたデータを想定します。
複数の受注データの中から、最新の受注番号を取得しようと思います。
この状況をどう解決するか、ステップバイステップで見ていきましょう。
目標は、この表から最新のA社の受注番号(この例では1004)を抽出することです。
解答
関数式
=FILTER(B2:B6, (A2:A6=”A社”) * (C2:C6=MAX(FILTER(C2:C6, A2:A6=”A社”))))
解答付きサンプルデータ
解答付きサンプルデータが欲しい方は、下記からダウンロードしてください。
関数式の説明
下図は関数式の構造図です。
構造図に沿って、説明します。
関数式は引数に分けて考えるとわかりやすく、関数は引数によって成り立っています。
ステップ1: A2:A6=”A社”の詳細な説明
A2からA6までの各セルに含まれる値が「A社」と等しいかどうかを評価します。
これは、「=」演算子を用いて配列内の各値を特定の値(ここでは「A社」)と比較し、
結果を論理値(TRUEまたはFALSE)の配列として返します。
「=」演算子による配列と値の比較の解説
「=」演算子は個別のセルだけの機能でありません。
セル範囲(配列)全体に対する一括比較が可能です。
この場合、A2:A6="A社"
という式では、A2:A6
がセル範囲を表し、
この範囲内の各セルが「A社」という文字列と等しいかどうかが一括で評価されます。
各セルごとにTRUEまたはFALSEの値が生成されます。
ステップ2:FILTER(C2:C6,A2:A6=”A社”)
ステップ1で設定した第2引数(
)の条件に一致するデータを、A2:A6="A社"
第1引数の範囲(C2:C6
)から抽出します。
A2:A6で”A社”に一致する行のC列(日付)のデータを抽出します。
FILTER関数の構文は、
【FILTER関数】条件に合わせてデータを抽出する方法 DL可 で詳しく説明しています。
ステップ3:MAX(FILTER(C2:C6, A2:A6=”A社”))
MAX関数は、与えられた数値の中から最大値を返す関数です。
ステップ2でフィルタリングされた日付、つまり FILTER(C2:C6, A2:A6=“A社”) の中から、
最大値(最新の日付)を見つけています。
この場合、最大値は「2023/03/01」です。
MAX関数の構文は、MAX関数の構文 – 最大値 – DL有で詳しく説明しています。
ステップ4:(C2:C6=MAX(FILTER(C2:C6, A2:A6=”A社”)))
C2:C6の範囲内で、ステップ3で求めた最大値(最新の日付)と一致するデータを抽出します。
つまり、”A社”の最新の日付に一致するデータをC2:C6の範囲から抽出します。
この結果は以下のようになります:
- データが最新の日付と一致 ⇒ TRUE(1)
- データが最新の日付と一致しない ⇒ FALSE(0)
これらの値が返されます。
ステップ5:(A2:A6=”A社”) * (C2:C6=MAX(FILTER(C2:C6, A2:A6=”A社”)))
ステップ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です。
乗算と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社”))))
ステップ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関数にすれば、最も古い日付のデータを取得できます。
様々な条件で、データ抽出できるため、是非応用してみてください。