概要
「同じIDが何行もあるけど、“最後に出てくる行”だけを拾いたい」
「商品コードごとに、いちばん下の行だけを集計対象にしたい」
「ステータスの履歴のうち、“最終レコード”だけフラグを立てたい」
こういう 「最終出現(最後に出てきた行)」を判定するときに使えるのが、
COUNTIF を“後ろ向きの範囲”で使うテクニックです。
「初回出現」はCOUNTIF($A$2:A2, A2)=1(先頭から自分の行まで)でしたが、
「最終出現」はその逆で、
自分の行から最後の行までの範囲で数えて、
それが 1 なら「ここが最後の出現行」
と考えます。
COUNTIF(後方) の基本アイデア
「ここから下で何回出てくるか」を数える
COUNTIF の基本形はこうです。
=COUNTIF(範囲, 条件)
ここで「範囲」を「自分の行から最終行まで」にすると、
- A2 のとき → COUNTIF(A2:$A$100, A2)
- A3 のとき → COUNTIF(A3:$A$100, A3)
- A10 のとき → COUNTIF(A10:$A$100, A10)
というように、「下方向」に伸びる形になります。
ある値について考えると、
- 最後の行(最終出現行)では、その行から下に同じ値はもうないので → COUNTIF の結果は 1
- それより上の行では、その行より下にも同じ値があるので → COUNTIF の結果は 2 以上
となります。
だから、
=COUNTIF(自分の行から下端まで, 自分のセル)=1
と書けば、「自分は“最終出現行”か?」を TRUE/FALSE で判定できます。
最終出現判定の基本形(TRUE / FALSE)
A列の中で「A2 の値が最終出現行か?」を判定する
前提:
A2:A100 に顧客IDが入っているとします。
A2 に「自分のIDが、この一覧の中で最後に出てくる行か?」を判定する式を書きます。
=COUNTIF(A2:$A$100, A2)=1
これを A2 から A100 までコピーすると次のように働きます。
- あるIDについて、「一番下の行」→ その行から下に同じIDはない → COUNTIF=1 → TRUE
- それより上の行 → 下にも同じIDがある → COUNTIF>=2 → FALSE
つまり、その値の「最終出現行」だけ TRUE になります。
「先頭から自分まで」なら初回出現、
「自分から最後まで」なら最終出現、
と覚えるとすっきりします。
IF と組み合わせて「最終行だけフラグ」を付ける
最終出現行だけ「★」を付ける
TRUE / FALSE のままでは見づらいので、IF でマークを付ける形にします。
A2:A100 に商品コードが入っているとして、
商品の最終出現行だけ「★」と表示したい場合、B2 に次の式を書きます。
=IF(COUNTIF(A2:$A$100, A2)=1, "★", "")
この式を B2 から最終行までコピーすると、
- その商品コードが一番最後に出てくる行 → 「★」
- それより上の同じ商品コードの行 → 空白
となり、「コードごとに一番下の行だけマーク」が付きます。
最終出現行だけを「集計対象」にする
例えば、
A列:商品コード
B列:売上
とします。
「商品コードごとに、いちばん最後の売上だけを集計したい」
(例:最新データだけを集計)
という場合、C列に次のような式を書くことができます。
=IF(COUNTIF(A2:$A$100, A2)=1, B2, 0)
- 最終出現行 → B2(売上)を返す
- それより上の同じコードの行 → 0 を返す
全体の C 列を SUM すれば、「各商品コードの最終行だけ」を合計した形になります。
最終出現判定の応用パターン
ステータス履歴から「最新ステータス行」にだけフラグを付ける
A列:顧客ID
B列:更新日
C列:ステータス
1 顧客につき複数行あり、下に行くほど新しい履歴が追加されている、というよくある表を想定します。
「顧客IDごとに、一番下の行(最新ステータス)にだけ『最新』フラグを付けたい」
というとき、D2 に次のように書けます。
=IF(COUNTIF(A2:$A$100, A2)=1, "最新", "")
これを下までコピーすると、
- その顧客IDが最後に出てくる行 → 「最新」
- それ以外 → 空白
となります。
あとは「最新」だけフィルターすれば、顧客IDごとの“最終ステータス一覧”が作れます。
最終出現行だけ残して一覧化したいとき
「同じIDが何行もあるけれど、“最後の行だけ”を代表として扱いたい」
というときは、
- 隣の列に
=IF(COUNTIF(A2:$A$100, A2)=1, "最終", "")を入れる - 「最終」にフィルターをかける
- 見えている行だけをコピーして、新しいシートに貼り付け
という手順で、“IDごとの最終レコード一覧”を作成できます。
最終出現判定の注意点
絶対参照「$」の付け方がポイント
範囲部分を
A2:$A$100
と書いているのが重要です。
- 上限($A$100)は固定
- 下側(A2)は、コピーすると A3、A4…と変わっていく
もし $ を間違えて $A$2:$A$100 と書くと、
常に「全体の中で何件あるか」を数えるだけになり、
「自分より下も含めて何件あるか」という判定になりません。
最終出現判定では、必ず「自分から下端まで」の形にするのがポイントです。
例題
問題1
A2:A100 に顧客IDが入っています。
A2 の顧客IDについて、「A2 から A100 までの中で、自分のIDが 1 回だけ出現していれば TRUE、それ以外は FALSE」を返す式を書いてください。
=COUNTIF(A2:$A$100, A2)=1
問題2
問題1と同じ前提で、
「最終出現行なら『最終』、それ以外の行は空白」を表示する式を B2 に書いてください。
=IF(COUNTIF(A2:$A$100, A2)=1, "最終", "")
問題3
A2:A100 に商品コード、B2:B100 に売上が入っています。
「商品コードごとに、最後の行の売上だけを C 列に残し、それ以外は 0 にする」式を C2 に書いてください。
=IF(COUNTIF(A2:$A$100, A2)=1, B2, 0)
問題4
A2:A100 にメールアドレス一覧があります。
各行について、「そのメールアドレスが一覧の中で最後に出てきた行であれば TRUE、それ以外は FALSE」と判定する式を A2 に書いてください。
=COUNTIF(A2:$A$100, A2)=1
問題5
A2:A100 に会員ID一覧があります。
条件付き書式で、「最終出現行のセルだけ色を付けたい」とき、
条件として使う数式を書いてください(範囲選択は A2:A100 とします)。
=COUNTIF(A2:$A$100, A2)=1
まとめ
「最終出現判定 → COUNTIF(後方)」の本質は、
- COUNTIF の範囲を「自分の行から下端まで」にする
- その範囲内で自分と同じ値が 1 回だけなら、そこが“最後の出現行”
というシンプルな考え方です。
型としては、ほぼこの1行を覚えれば足ります。
=COUNTIF(A2:$A$100, A2)=1
これを IF と組み合わせれば、
=IF(COUNTIF(A2::$A$100, A2)=1, "最終", "")
のように、
「最終行だけフラグ」「最終行だけ集計」「最終行だけ抽出」といった処理を自在に作れます。
初回出現(先頭側 COUNTIF)とセットで覚えると、
“最初の行”と“最後の行”を使い分けながら、
履歴データや重複データをきれいに扱えるようになります。
