スプレッドシートの使い方

Googleスプレッドシート・FILTER × COUNTIF

重複データだけを別の一覧に抽出する方法

商品を登録した一覧で、同じ商品名の行が何度も出てくる。重複している商品だけを別の一覧で確認したいけれど、元の行は消したくない。そんなときは FILTER関数とCOUNTIF関数を組み合わせると、元の表を残したまま重複する行だけを別タブに表示できます。

元の商品一覧を残し、同じ商品名の行を取り出す

例えば「商品一覧」には6行の商品があり、「りんご」と「食パン」がそれぞれ2回登録されています。抽出するのはその4行です。「牛乳」と「ヨーグルト」は1行ずつなので含みません。

「商品一覧」の6行は消しません。スマホ幅では、商品名・分類と単価・在庫数を上下に分けています。

判定に使うのはA列の「商品名」です。同じ名前の行をまとめて確認するため、ほかの列まで完全に一致するかどうかは、この式では判定しません。

「重複候補」タブのA2に式を貼り付ける

練習シートの「重複候補」タブを開いてください。見出しは入力済みなので、空欄のA2セルを選びます。

赤枠のA2に次の式を貼り付け、Enterキーを押します。下の行へコピーする必要はありません。

「重複候補」A2に貼り付ける式

=FILTER('商品一覧'!A2:D100,ARRAYFORMULA(COUNTIF('商品一覧'!A2:A100,'商品一覧'!A2:A100))>1,'商品一覧'!A2:A100<>"")

この式は、「商品一覧」のA列で同じ商品名が2回以上ある行を、A~D列ごと取り出します。空欄の商品名は除外します。

自分の表に置き換える場所

  1. '商品一覧'!A2:D100:持ってくる元データの範囲

    元の「商品一覧」のA~D列、2~100行目。商品名だけでなく、分類・単価・在庫数も一緒に取り出します。

  2. COUNTIF('商品一覧'!A2:A100,'商品一覧'!A2:A100):同じ商品名が何回あるか

    元のA列の各商品名について、A2~A100の中に同じ名前が何回あるか数えます。ARRAYFORMULAが各行分をまとめて計算します。

  3. >1:2回以上の行だけ

    出現回数が1より多い、つまり同じ商品名が2回以上ある行が対象です。1回目の行も含みます。

  4. '商品一覧'!A2:A100<>"":空欄の商品名は除外

    商品名が空欄の行を出さない条件です。判定列のA2~A100を指定しています。

参照元の範囲 A2:D100 と、条件で使う A2:A100 は、どちらも2行目から100行目までにそろえています。ずれると、条件と取り出す行が対応しなくなります。

「りんご」と「食パン」の4行だけが別タブに並ぶ

Enterキーを押すと、「りんご」が2行、「食パン」が2行の合計4行がA2:D5に表示されます。牛乳とヨーグルトは表示されず、元の「商品一覧」の6行は残ったままです。

「完成例」タブでも確認できます。同じ商品名の1回目と2回目の両方が表示されます。

自分の表の列・行数に合わせて式を変更する

別の表に使う場合は、まず何をもって重複とするかを決めます。別の表で取引先名の重複を調べるなら、取引先名の列をCOUNTIFの中の2つの範囲と空欄チェックの範囲に指定してください。抽出したい列が違う場合は、FILTERの最初の範囲を変えます。

この練習例は100行目までを対象にしています。101行目以降にも追加するなら、式の 100 を必要な最終行にすべて変更してください。行数をむやみに増やすと計算が重くなる場合があります。

「#N/A」と表示された
指定した範囲に同じ商品名が2回以上ある行がない場合、FILTERは #N/A を返します。範囲内に本当に重複があるか、判定する列を間違えていないか確認してください。
「#REF!」や「配列結果は展開されません」と表示された
結果はA2から右と下へ広がります。取り込み先に値や結合セルが残っていると表示できません。必要な値を別の場所に退避してから、表示先を空けてください。

関数の仕様:Google公式「FILTER」、「COUNTIF」、「ARRAYFORMULA」