複数一致するデータから、最古データを抽出|FILTER+MINIFS -DL有-

今回は、複数一致するデータの中から最も古いデータを抽出する方法を紹介します。
いくつか方法はあります。

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

こちらのMAXIFS関数による最大値抽出を、
MINIFS関数による最小抽出にしているだけです。

シナリオ

A社の受注履歴が記録されたデータから、
最も古い受注番号を効率的に抽出する方法をステップバイステップで紹介します。

A社の受注履歴が記録されたデータから、最も古い受注番号を効率的に抽出する方法の図解

解答

関数式

A社の受注履歴が記録されたデータから、最も古い受注番号を効率的に抽出する方法の関数式

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


上記関数により、A社の最小日付の受注番号の1001が抽出されます。

関数の説明

FILTER関数1とMINIFS関数2で、条件に応じたデータを抽出します。

大きな流れは以下です。


FILTER関数の第1引数: データ範囲の指定

A社の受注履歴が記録されたデータから、最も古い受注番号を効率的に抽出する方法

まずは、FILTER関数で抽出したいデータの範囲を指定します。
この例では、B2:B6が受注番号が格納されている範囲です。この範囲から最終的にデータが抽出されます。

FILTER関数の第2引数 条件の設定

A社の受注履歴が記録されたデータから、最も古い受注番号を効率的に抽出する方法

FILTER関数の第2引数: 論理積の理解

(A2:A6="A社")(C2:C6 = MINIFS(C2:C6, A2:A6, "A社"))を、*演算子を使用してこれらを結合します。

この論理積により、両方の条件を満たす行のみがFILTER関数によって抽出されます。

この乗算により、両方の条件が

  • 両条件がTRUE ⇒ TRUE(または数値で1)
  • それ以外 ⇒ FALSE(または数値で0) を返す論理AND演算と同じです。

論理積の条件1: A列が「A社」であることの確認

A社の受注履歴が記録されたデータから、最も古い受注番号を効率的に抽出する方法

A2:A6="A社"を用いて、”A社”と一致するA列の行を識別します。
この式は、範囲内の各セルが「A社」に一致するかどうかを評価し、結果として真偽値の配列を返します。

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

論理積の条件2: A列が「A社」であることの確認

A社の受注履歴が記録されたデータから、最も古い受注番号を効率的に抽出する方法

MINIFS(C2:C6, A2:A6, "A社")は、A列が「A社」である行に限定して、
C列の最小値(最も古い日付)を見つけ出します。


これらのステップを踏まえ、以下の関数式が完成します。

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

この式により、A列が「A社」であり、かつC列の日付が最小である行のB列、
すなわち受注番号が抽出されます。

最後に

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

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

解答付きサンプルデータ

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

  1. 【FILTER関数】条件に合わせてデータを抽出する方法 DL可 ↩︎
  2. MINIFS関数の構文解説 – 複雑条件の最小値 – DL有 – ↩︎