タグ: 重複

  • スプレッドシートで重複を削除・抽出する方法まとめ

    重複データの扱いには、「見つける」「抽出する」「削除する」「そもそも入れない」の4つの目的があります。どれをやりたいかで手段が変わります。

    このページでは5つの方法を目的別に整理します。

    目的別の早見表

    やりたいこと 使うもの
    重複を除いた一覧を作る UNIQUE
    重複している行に印を付ける COUNTIF
    重複を色で目立たせる 条件付き書式
    元データから重複を消す メニューの「重複を削除」
    そもそも重複を入れない データの入力規則

    最後の「入れない」が最も確実です。 後から掃除するより、入力時に弾くほうが手間もリスクも小さくなります。

    1. UNIQUE ── 重複を除いた一覧を作る

    =UNIQUE(A2:A100)

    元データには一切手を触れず、重複を除いた一覧を別の場所に表示します。

    範囲を大きく取ると空欄も1つの値として含まれるので、FILTER で除きます。

    =UNIQUE(FILTER(A2:A1000, A2:A1000<>""))

    この形が実用上の基本形です。

    並べ替えるなら SORT を重ねます。

    =SORT(UNIQUE(FILTER(A2:A1000, A2:A1000<>"")))

    複数列での重複判定

    範囲を複数列にすると、行全体が同じものだけを重複と見なします。

    =UNIQUE(A2:C1000)

    「支店 × 商品」の組み合わせ一覧が作れます。

    件数を数える

    =COUNTA(UNIQUE(FILTER(A2:A1000, A2:A1000<>"")))

    2. COUNTIF ── 重複している行に印を付ける

    すべての重複行に印

    =IF(COUNTIF(A:A, A2) > 1, "重複", "")

    A列全体で自分と同じ値を数え、2件以上あれば重複と判定します。下方向にコピーするだけで使えます。

    この書き方だと、重複しているものがすべて「重複」になります。

    2件目以降だけに印

    1件目は残して2件目以降を消したい場合、範囲を「自分の行まで」に限定します。

    =IF(COUNTIF($A$2:A2, A2) > 1, "削除対象", "")

    範囲の開始だけを絶対参照($A$2)にするのがポイントです。下にコピーすると範囲が $A$2:A3$A$2:A4 と伸びていき、「ここまでに自分と同じ値が何件あったか」を数えます。

    この列でフィルタをかければ、削除対象だけを選んで消せます。

    複数列での判定

    複数の列を組み合わせて重複を判定したい場合、キーを連結します。

    作業列D2:  =A2 & "|" & B2
    判定E2:    =IF(COUNTIF($D$2:D2, D2) > 1, "削除対象", "")

    区切り文字(|)を挟むのが重要です。挟まないと AB + CA + BC が同じキーになってしまいます。

    COUNTIFS を使う方法もあります。

    =IF(COUNTIFS($A$2:A2, A2, $B$2:B2, B2) > 1, "削除対象", "")

    3. 条件付き書式 ── 色で目立たせる

    範囲を選択して「表示形式 → 条件付き書式 → カスタム数式」に次を入れます。

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

    列だけを $ で固定するのがポイントです。行を固定しないことで、各行が個別に判定されます。

    行全体に色を付けたいなら、範囲を A2:D1000 にして同じ数式を入れてください。

    削除する前に、目で確認できるのがこの方法の価値です。

    4. メニューの「重複を削除」── 元データから消す

    データ → データクリーンアップ → 重複を削除

    • – 判定に使う列を選べます
    • – 「データにヘッダー行が含まれている」のチェックを忘れずに
    • 実行すると元に戻せません(Ctrl+Z は効きますが、確実ではありません)

    必ず実行前にコピーを取ってください。 シートを複製しておくのが最も安全です。

    どの行が残るかは制御できません。「最新の行を残したい」といった要件がある場合は使えません。 その場合は SORT で並べ替えてから UNIQUE を使うか、COUNTIFで印を付けて手動で消してください。

    5. データの入力規則 ── そもそも入れない

    最も確実な方法です。

    対象の列を選択して「データ → データの入力規則 → カスタム数式」に次を入れます。

    =COUNTIF(A:A, A1) = 1

    「入力を拒否」に設定すると、既に存在する値を入力できなくなります。

    後から掃除する必要がなくなるので、新しく表を作るときは最初にこれを設定しておくことを推奨します。

    重複しているように見えて別物のケース

    「同じに見えるのに重複と判定されない」場合、原因はほぼ次の4つです。

    原因 確認方法 対処
    前後のスペース =LEN(A2) で文字数 TRIM
    全角と半角 目視 ASC
    数値と文字列 セルの寄せ方向 VALUE
    見えない改行 =LEN(A2) SUBSTITUTE(A2, CHAR(10), "")

    まとめて整えるなら次の形です。

    =ARRAYFORMULA(IF(A2:A="", "", TRIM(ASC(SUBSTITUTE(A2:A, CHAR(10), "")))))

    作業列に整形済みの値を出してから、そちらで重複判定するのが確実です。

    なお、COUNTIFUNIQUE は大文字小文字を区別しません。 "abc""ABC" は同じ値として扱われます。区別が必要なら EXACT を使った判定に置き換えてください。

    重複している値のほうを一覧にする

    UNIQUE は重複を「除く」関数なので、逆はできません。組み合わせて書きます。

    =UNIQUE(FILTER(A2:A1000, COUNTIF(A2:A1000, A2:A1000) > 1))

    2回以上出現している値だけの一覧が出ます。

    出現回数も一緒に見たいなら QUERY が便利です。

    =QUERY(A:A, "select A, count(A) where A is not null group by A order by count(A) desc", 1)

    多い順に並んだ集計表が1行で作れます。

    まとめ

    • 一覧を作るなら UNIQUE(元データは変わらない)
    • 印を付けるなら COUNTIF。2件目以降だけなら $A$2:A2
    • 複数列の判定はキーを | で連結する
    • – 元データから消すならメニュー機能。必ずコピーを取ってから
    • 最も確実なのは入力規則で「入れない」こと
    • – 判定されないときはスペース・全角半角・型・改行を疑う

    関連ページ

  • UNIQUE関数の使い方|重複を除いた一覧を作る

    UNIQUEは、重複を除いた一覧を返す関数です。

    「支店の一覧が欲しい」「登場した商品名だけ知りたい」というときに、1つの数式で済みます。元の表には手を触れません。

    書式

    =UNIQUE(範囲)

    引数は範囲だけです。

    基本の使い方

    A
    1 東京
    2 大阪
    3 東京
    4 名古屋
    5 大阪
    =UNIQUE(A1:A5)

    結果: 東京 / 大阪 / 名古屋

    出てきた順番が保たれます。 五十音順にはなりません。並べ替えたいなら SORT で包みます。

    =SORT(UNIQUE(A1:A5))

    空行が入る原因と対処

    範囲を A2:A1000 のように大きく取ると、空欄も1つの値として結果に含まれます。

    対処は FILTER で空を除くことです。

    =UNIQUE(FILTER(A2:A1000, A2:A1000<>""))

    この形が実用上の基本形になります。列全体(A:A)を使うときは特に必要です。

    複数列での重複判定

    範囲を複数列にすると、行全体が同じものだけを重複と見なします。

    A B
    1 東京 A
    2 東京 B
    3 東京 A
    =UNIQUE(A1:B3)

    結果: 東京/A、東京/B の2行。1行目と3行目が同一なので1つにまとまります。

    「支店 × 商品」の組み合わせ一覧が作りたいときに使えます。

    件数を数える

    重複を除いた件数は COUNTA と組み合わせます。

    =COUNTA(UNIQUE(A2:A100))

    空欄を除くなら FILTER を挟んでください。

    =COUNTA(UNIQUE(FILTER(A2:A100, A2:A100<>"")))

    集計表の見出しを作る

    UNIQUEの実務での主な用途がこれです。

    E2に  =UNIQUE(FILTER(A2:A1000, A2:A1000<>""))
    F2に  =ARRAYFORMULA(IF(E2:E="", "", SUMIF(A:A, E2:E, C:C)))

    支店の一覧が自動で作られ、その横に合計が出ます。 新しい支店のデータが増えても、一覧が自動で伸びます。

    ただし、この用途なら QUERY 1行のほうが短く書けます。

    =QUERY(A:C, "select A, sum(C) where A <> '' group by A", 1)

    集計まで含むならQUERY、一覧だけならUNIQUE、という使い分けになります。

    重複している値のほうを知りたい

    UNIQUEは重複を「除く」関数なので、逆はできません。重複しているものを見つけるなら COUNTIF を使います。

    =IF(COUNTIF(A:A, A2) > 1, "重複", "")

    重複している値の一覧が欲しいなら、組み合わせます。

    =UNIQUE(FILTER(A2:A100, COUNTIF(A2:A100, A2:A100) > 1))

    実際に重複行を削除したい

    UNIQUEは表示するだけで、元データは変わりません。元データから重複を消したいなら、次のいずれかです。

    • – メニューの「データ → データクリーンアップ → 重複を削除」
    • – UNIQUEの結果をコピーして「値のみ貼り付け」で置き換える

    元データを直接いじる前に、必ずコピーを取ってください。 UNIQUEで結果を確認してから実行するのが安全です。

    エラーの対処

    #REF! が出る

    結果の展開先にデータが入っています。 UNIQUEは下方向に結果を広げるため、その領域が空いている必要があります。

    空欄が結果に含まれる

    FILTER<>"" を指定してください。

    同じに見えるのに別扱いされる

    • – 前後にスペースが入っている("東京 ""東京"
    • – 全角と半角が違う
    • – 数値と文字列が混ざっている

    TRIM で整えると解決することが多いです。

    =UNIQUE(ARRAYFORMULA(TRIM(A2:A100)))

    大文字小文字が区別されない

    UNIQUEは大文字小文字を区別しません。"abc""ABC" は同じ値として扱われます。区別したい場合は、EXACT を使った判定に置き換える必要があります。

    Excelとの違い

    Excelにも UNIQUE があります(Microsoft 365 / Excel 2021以降)。書式はほぼ同じですが、Excelには追加の引数があります。

    Excel スプレッドシート
    列方向の重複除去 第2引数で指定可 範囲の向きで決まる
    1回だけ出現した値のみ 第3引数で指定可 無い

    Excel 2019以前では使えないので、その場合は「重複の削除」機能か、COUNTIF を使った作業列で対応します。

    まとめ

    • – 書式は =UNIQUE(範囲)出てきた順が保たれる
    • – 実用上の基本形は =UNIQUE(FILTER(A2:A, A2:A<>""))
    • – 複数列を指定すると、行全体が同じものを重複と見なす
    • – 件数は =COUNTA(UNIQUE(...))
    • – 集計まで含むなら QUERY のほうが短い
    • 元データは変わらない。削除したいならメニュー機能を使う

    関連する関数

  • COUNTIF関数の使い方|条件に合う件数を数える

    COUNTIFは、条件に合うセルの個数を数える関数です。「東京の件数」「未処理の件数」といった集計に使います。

    合計ではなく件数を数える点だけが SUMIF との違いで、書き方の考え方は同じです。Excel・Googleスプレッドシート両方で同じ書式が使えます。

    書式

    =COUNTIF(範囲, 条件)
    引数 内容
    範囲 数える対象の範囲
    条件 判定の内容。文字列や比較式は " で囲む

    引数は2つだけです。SUMIF と違い、「数える範囲」を別に指定する必要はありません。

    基本の使い方

    A B
    1 支店 売上
    2 東京 1200
    3 大阪 800
    4 東京 1500
    5 名古屋 950
    =COUNTIF(A2:A5, "東京")   → 2

    数値の条件も同じように書けます。

    =COUNTIF(B2:B5, ">=1000")   → 2

    条件をセル参照にすれば、入力で切り替えられます。

    =COUNTIF(A:A, D1)

    条件の書き方

    条件 意味
    "東京" 東京と完全一致
    ">1000" 1000より大きい
    ">=1000" 1000以上
    "<>東京" 東京以外
    "" 空欄
    "<>" 空欄でない
    "東*" 「東」で始まる
    "*店" 「店」で終わる
    "*営業*" 「営業」を含む

    セルの値と比較したいとき

    比較演算子とセル参照を組み合わせるには、& で連結します。

    =COUNTIF(B:B, ">"&D1)

    ">D1" と書くと文字列の「D1」を探しに行きます。 ここが最も多い間違いです。

    重複チェックに使う

    COUNTIFの実務での最大の用途がこれです。

    重複している行に印を付ける

    =IF(COUNTIF(A:A, A2) > 1, "重複", "")

    A列全体で自分と同じ値を数え、2件以上あれば重複と判定します。この数式を下方向にコピーするだけで、重複が一目で分かります。

    2件目以降だけに印を付ける

    上の書き方だと、重複している行がすべて「重複」になります。1件目は残して2件目以降だけ消したい場合は、範囲を「自分の行まで」に限定します。

    =IF(COUNTIF($A$2:A2, A2) > 1, "削除対象", "")

    範囲の開始だけを絶対参照($A$2)にするのがポイントです。下にコピーすると範囲が $A$2:A3$A$2:A4 と伸びていき、「ここまでに自分と同じ値が何件あったか」を数えます。

    入力規則で重複を防ぐ

    データの入力規則 → カスタム数式に次を入れます。

    =COUNTIF(A:A, A1) = 1

    同じ値が既にあると入力できなくなります。後から掃除するより、入れさせないほうが確実です。

    2つのリストを突き合わせる

    「Aのリストにあって、Bのリストにないもの」を探すのにも使えます。

    =IF(COUNTIF(B:B, A2) = 0, "Bに無い", "")

    VLOOKUP#N/A を見る方法もありますが、存在確認だけならCOUNTIFのほうが素直です。エラー処理が不要になります。

    リストに含まれるか判定する

    「東京・神奈川・千葉・埼玉のどれかか」を判定したいとき、OR を並べると長くなります。

    =IF(OR(A2="東京", A2="神奈川", A2="千葉", A2="埼玉"), "首都圏", "地方")

    別シートにリストを作れば、COUNTIFで1行で書けます。

    =IF(COUNTIF(リスト!A:A, A2) > 0, "首都圏", "地方")

    候補が増えても数式を触らずに済みます。 候補が5つを超えたらこちらに切り替えるのが実用的な目安です。

    条件が2つ以上あるとき

    COUNTIFは条件を1つしか取れません。「東京」かつ「1000以上」のような判定には COUNTIFS を使います。

    =COUNTIFS(A2:A5, "東京", B2:B5, ">=1000")

    COUNT・COUNTAとの違い

    関数 数えるもの
    COUNT 数値が入っているセル
    COUNTA 空欄でないセル(文字列も含む)
    COUNTIF 条件に合うセル

    「入力済みの行数を数えたい」なら COUNTA です。COUNTは数値しか数えないので、文字列の列に使うと0になります。

    注意: 数式が返した ""(空文字)は、見た目は空欄ですが COUNTA では1件として数えられます。ここは実務でよく引っかかります。

    よくある失敗

    数えられない・0になる

    1. 余分なスペース

    "東京 ""東京" は別物です。元データを TRIM で整えてください。

    2. 数値と文字列の食い違い

    101(数値)と "101"(文字列)は別物です。セルが左寄せなら文字列です。

    3. 比較演算子とセル参照を & でつないでいない

    ">"&D1 が正解です。

    4. 全角と半角

    "ABC""ABC" は一致しません。

    意図より多く数えられる

    ワイルドカードが効いてしまっている可能性があります。検索したい文字列に *? が含まれていると、任意の文字として解釈されます。文字そのものを探すなら ~* のように ~ を付けてください。

    部分一致してしまう

    COUNTIFは、条件に * を書かなければ完全一致です。ただしセル内改行や不可視文字が入っていると、一致しないのに一致しているように見えることがあります。LEN() で文字数を確認すると判別できます。

    Excelとの違い

    書式・挙動ともにExcelと同じです。 ワイルドカード、比較演算子、& での連結もすべて共通です。

    Googleスプレッドシート特有の利点として、QUERY を使うとグループごとの件数を一度に出せます。

    =QUERY(A:B, "select A, count(B) group by A", 1)

    COUNTIFを支店の数だけ並べる代わりに、この1行で全支店の件数が出ます。集計表を作るならQUERYのほうが速いです。

    まとめ

    • – 書式は =COUNTIF(範囲, 条件)
    • – 比較演算子は ">1000" のように " で囲む
    • – セル参照と組み合わせるときは ">"&D1
    • 重複チェックの定番COUNTIF(A:A, A2) > 1
    • – 2件目以降だけなら COUNTIF($A$2:A2, A2) > 1
    • – 条件が2つ以上なら COUNTIFS

    関連する関数

    • COUNTIFS — 条件が複数あるときの件数
    • COUNT — 数値の入ったセルを数える
    • SUMIF — 条件に合うものを合計する
    • UNIQUE — 重複を除いた一覧を出す
    • 関数一覧に戻る