概要
「同じ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行だけ残して一覧化したい
といったとき、初回出現行だけをフィルターで抽出すると“ユニークな一覧”に近いものが作れます。
手順イメージはこうです。
- 隣列に
=COUNTIF($A$2:A2, A2)=1
あるいは=IF(COUNTIF($A$2:A2, A2)=1, "初回", "")
を入れる - TRUE や「初回」にフィルターをかける
- 見えている行だけコピーして新しいシートへ貼り付ける
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 パターンを思い出してみてください。
