Excel関数 逆引き集 | 初回出現判定 → COUNTIF=1

Excel VBA Excel
スポンサーリンク

概要

「同じIDが何行もあるけど、“最初に出てきた行”だけにフラグを立てたい」
「商品コードごとに、最初の行だけ集計対象にしたい」
「重複はあるけれど、代表行を 1 行だけ残したい」

こういうときに便利なのが COUNTIF = 1 を使った“初回出現判定” です。

考え方はとてもシンプルで、

  • 上から順に見ていったとき
  • 「自分より上+自分」の範囲の中で
  • 同じ値が 1 回だけ出ている行 = その値の“初回出現行”

というロジックです。
これを COUNTIF で書いてしまいます。


COUNTIF で「ここまでに何回出てきたか」を数える

基本の考え方

COUNTIF の基本形はこうでした。

=COUNTIF(範囲, 条件)

ここで「範囲」を「先頭行から自分の行まで」にすると、

  • A2 のとき → COUNTIF($A$2:A2, A2)
  • A3 のとき → COUNTIF($A$2:A3, A3)
  • A10 のとき → COUNTIF($A$2:A10, A10)

というように、行が下に行くほど「見ている範囲」が伸びていきます。

その結果、

  • その値が最初に出てきた行では → 1 回目なので結果は 1
  • 2 回目以降の行では → すでに上に同じ値があるので結果は 2 以上

となります。

ここで「=1 かどうか」を見れば、
「その値が初めて出てきた行かどうか」を判定できます。


初回出現判定の基本形(TRUE/FALSE)

A列の中で「A2 の値が初めて出た行かどうか」を判定

A2:A100 にID一覧があるとします。
A2 に入れる“初回出現判定”の式はこうです。

=COUNTIF($A$2:A2, A2)=1

これを A2 から下方向へコピーすると、

  • あるIDが 最初に出てくる行 → COUNTIF の結果が 1 → TRUE
  • 同じIDが 2 回目以降に出る行 → COUNTIF の結果が 2 以上 → FALSE

となります。

「COUNTIF の範囲が先頭から自分の行まで伸びていく」
ここが“初回出現”ロジックのポイントです。


IF と組み合わせて「初回のみフラグ」を付ける

初回出現なら「★」を付ける

TRUE / FALSE のままでは少し分かりにくいので、
IF 関数で「初回だけマークを付ける」形にするのがよくあります。

A2:A100 に商品コード、A2 に式を書くとします。

=IF(COUNTIF($A$2:A2, A2)=1, "★", "")

意味はこうです。

  • その商品コードが初めて出てくる行 → COUNTIF=1 → 「★」
  • 2 回目以降に出てくる行 → COUNTIF>1 → 空白

結果として、“コードごとに1行だけ★が付く”状態になります。


初回出現行だけ「集計対象」にする

例えば B 列に売上、A 列に商品コードが入っていて、
「商品コードごとに 1 行だけを集計対象にする」という場面では、
初回フラグを条件に SUMIFS などを組み合わせることもできます。

シンプルな形としては、

=IF(COUNTIF($A$2:A2, A2)=1, B2, 0)

初回出現行では B2(売上)をそのまま返し、
2 回目以降は 0 を返すので、全体を SUM すると「商品ごとに1回だけの売上合計」のような使い方もできます。


初回出現判定のよくある用途

重複一覧の「代表行」を作りたいとき

  • IDごとに最初の行だけ残したい
  • 商品コードごとに1行だけ残して一覧化したい

といったとき、初回出現行だけをフィルターで抽出すると“ユニークな一覧”に近いものが作れます。

手順イメージはこうです。

  1. 隣列に
    =COUNTIF($A$2:A2, A2)=1
    あるいは
    =IF(COUNTIF($A$2:A2, A2)=1, "初回", "")
    を入れる
  2. TRUE や「初回」にフィルターをかける
  3. 見えている行だけコピーして新しいシートへ貼り付ける

Power Query や UNIQUE 関数を使わない環境でも、
このやり方で“ユニーク一覧”を作ることができます。


初回出現判定の注意点

範囲の絶対参照「$」を必ず付ける

$A$2:A2 のように、
開始側($A$2)は固定、終わり側(A2)はコピーとともに下に伸びるようにします。

もし $ を付け忘れて A2:A2 のようにすると、
下にコピーしたときに範囲が「A3:A3」「A4:A4」…になってしまい、
「ここまでに何回出たか」ではなく「この1行だけで1回かどうか」になってしまいます。

必ず $A$2:A2 のように 先頭側を絶対参照 にするのがポイントです。


例題

問題1

A2:A100 に会員IDが入力されています。
A2 のIDについて、「A2 からその行までの範囲の中で、自分のIDがちょうど 1 回だけ出現しているかどうか」を TRUE/FALSE で判定する式を書いてください。

=COUNTIF($A$2:A2, A2)=1

問題2

問題1と同じ前提で、
「初回出現なら『初回』、2回目以降なら空白」を表示する式を A2 に書いてください。

=IF(COUNTIF($A$2:A2, A2)=1, "初回", "")

問題3

A2:A100 に商品コード、B2:B100 に売上が入っています。
「商品コードごとに最初の1行だけ B列の値を返し、それ以外の行では 0 を返す」式を C2 に書いてください。

=IF(COUNTIF($A$2:A2, A2)=1, B2, 0)

問題4

A2:A100 にメールアドレスが入っています。
各行について「そのメールアドレスが一覧の中で初めて出てきた行であれば TRUE、それ以外は FALSE」と判定する式を A2 に書いてください。

=COUNTIF($A$2:A2, A2)=1

問題5

A2:A100 に顧客ID一覧があります。
A2 の顧客IDが A2:A100 全体の中で一意(1件だけ) の場合に TRUE、それ以外(2件以上ある場合)は FALSE となる式を書いてください。

※この問題は「初回出現」ではなく「一意判定」ですが、COUNTIF=1 を使う別パターンです。

=COUNTIF($A$2:$A$100, A2)=1

まとめ

「初回出現判定 → COUNTIF=1」のポイントは、
「先頭から自分の行まで」の範囲で COUNTIF する ことです。

型としては、ほぼこの1行だけ覚えれば十分です。

=COUNTIF($A$2:A2, A2)=1

これを IF と組み合わせれば、

=IF(COUNTIF($A$2:A2, A2)=1, "初回", "")

のように、「初回だけフラグ」「初回だけ集計」「初回だけ表示」といった処理を自由に作れます。

重複データが多い表で、「1件目だけを代表として扱いたい」と思ったら、
真っ先にこの COUNTIF=1 パターンを思い出してみてください。

タイトルとURLをコピーしました