Excelで重複を削除する方法:コマンド、数式、Power Query
By Mirko Peters ·
Excelで重複を削除する方法を解説します。データ タブの「重複の削除」、数式を使って元のデータを残す方法、Power Queryの使い方を取り上げ、手順、制限、よくあるミスを紹介します。
Automatically translated with AI from the original post. Read the English original
Excelで重複を削除するには、データ範囲を選択し、データ > 重複の削除 の順に選びます。重複の判定基準となる列にチェックを入れ、OK を選択します。Excelは、それらの列の値が重複する行をすべて削除し、最初の行を残します。この記事は、リスト、エクスポートデータ、レポートを整理し、適切な方法を選びたいExcelユーザーを対象としています。まずコマンドを取り上げ、次に削除前に重複を確認する方法、元のデータを保持するオプション、最後に繰り返し行う作業の自動化方法を紹介します。
重要なポイント
- データを選択し、「データ」タブを開いて「重複の削除」を選択します。重複を判断する列にチェックを入れ、「OK」を選択します。Excel は一致する行全体を削除し、最初に見つかった行を残します。
- 削除は完全に行われるため、先に別のシートへデータをコピーしておいてください。Ctrl+Z は、別の操作を行うまでしか使えません。
- Excelはセルに表示されている内容を比較するため、3/8/2006 と 2006年3月8日 は別の値として扱われます。先に書式を整えてください。
- 削除する前に重複を確認したい場合は、条件付き書式で強調表示するか、COUNTIF を使った補助列でフラグを付けてください。
- UNIQUE と Power Query を使うと、元のデータに手を加えずに整理されたリストを得られます。さらに Power Query では、更新のたびに同じ整理処理を繰り返せます。
「重複」が意味する内容は複数あるため、Excel にはこの作業のための手段が複数あります。完全に同一の行を指す場合もあれば、同じ顧客IDで電話番号だけが異なる行を指す場合もあります。何かをクリックする前に、どの意味の重複を対象とするのかを決めてください。
データ タブのコマンドで重複を削除する
これは最も速く、多くの人が必要とする方法です。Microsoftの記事一意の値をフィルターするか、重複する値を削除するの手順に沿っています。
- データをバックアップします。 範囲を別のシートまたはブックにコピーしてください。Microsoftも明言しているとおり、重複は完全に削除されます。
- 範囲を選択します。 データ内の任意のセルまたはExcelテーブル内のセルをクリックするか、範囲を自分で選択します。変更されるのは選択した範囲またはテーブルだけで、その外側のセルは元の位置に残ります。
- コマンドを開きます。 データ タブに移動し、「データ ツール」グループの重複の削除を選択します。
- 列を選択します。 ダイアログで、Excelに比較させたい列にチェックを入れます。すべて選択またはすべて選択解除を使うこともできます。先頭行に列名がある場合は、先頭行を见出しとして使用するのチェックをオンのままにしてください。
- OK を選択します。 削除された重複値の件数と、残った一意の値の件数を示すメッセージが表示されます。
手順 4 は間違えやすいので注意してください。行が重複とみなされるのは、チェックを入れたすべての列の値が一致する場合だけです。ID、名前、価格の列があるリストを考えます。ID と名前にだけチェックを入れて価格にチェックを入れない場合、ID と名前が同じ 2 行は、価格が異なっていても重複とみなされます。その結果、Excel は 2 番目の行を価格も含めて丸ごと削除します。何かが異なる行をすべて残したい場合は、すべての列にチェックを入れてください。ID だけでレコードを特定できる場合は、ID にだけチェックを入れます。ただし、何が削除されるのかを必ず確認してください。
結果がおかしいと思ったら、コマンドの実行直後に Ctrl+Z を押してください。後から元に戻そうとしないでください。
どの行が残るかは、先に並べ替えて決める
Microsoft によると、最初に出現した行が残り、後から出現する同一の行が削除されます。つまり、結果を決めるのは行の順序です。1 人に複数の連絡先がある一覧で最新のものを残したい場合は、日付の新しい順に並べ替えてから重複の削除を実行してください。メールアドレスが入力されている行を残したい場合は、その行が先頭に来るように並べ替えます。ここでは並べ替えは、整理作業の一般的な手順であり、おまけの機能ではありません。
同一とみなされる基準
Excel が比較するのは、セルに格納されている値ではなく、画面に表示されている内容です。Microsoft の例では、2006/3/8 と 2006年3月8日 は同じ日付であっても、別の値として扱われます。表示形式が異なる数値や、末尾にスペースがあるテキストも同様です。重複の検索と削除に関する記事には、その後 Excel に表示される件数に、空のセルやスペースが含まれる場合があるとも書かれています。
削除する前に、セルの見た目をそろえてください。日付の表示形式を統一し、余分なスペースを削除します(TRIM 関数で削除できます)。また、数値が文字列として保存されていないかを確認してください。Microsoft のページには、このコマンドが大文字と小文字を区別するかどうかは書かれていません。大文字と小文字の区別が重要な場合は、小さな範囲で試してから実行してください。
コマンドが実行できない場合
アウトラインや小計が設定されているデータからは、重複を削除できません。先にアウトラインと小計を削除してから、コマンドを実行してください。
削除する前に、重複を確認する
Microsoft の推奨は、まずフィルターまたは強調表示で確認してから削除することです。少し手間がかかりますが、後悔する場面の多くを防げます。
条件付き書式で重複を強調表示する
- 確認したいセルを選択します。
- ホーム タブで 条件付き書式 を開き、セルの強調表示ルール、重複する値 の順に選択します。
- 強調表示のスタイルを選び、OK を選択します。
繰り返し出現するすべての値に色が付きます。この方法はピボットテーブルの値領域には適用できません。また、1 つの列ずつ確認するため、複数の列にまたがってのみ重複する行は強調表示されません。その場合は、補助列を使用してください。
補助列で重複行に印を付ける
補助列は、各行の横に TRUE または FALSE を表示します。これを使うと、フィルターで絞り込み、内容を確認してから削除できます。
- データの横に列を挿入し、「重複?」などの見出しを入力します。
- 列 A を確認する場合は、B2 に次の数式を入力します:
=COUNTIF(A$2:A2,A2)>1 - 数式を下方向にコピーします。値が最初に現れた行は FALSE になり、それ以降に現れる行はすべて TRUE になります。
- 補助列で TRUE でフィルターします。該当する行を確認し、本当に重複している場合は削除します。
数式をコピーすると、範囲 A$2:A2 は下方向に広がっていきます。そのため、2 回目以降に出現する値だけに印が付き、最初の値は対象外になります。これは重複の削除コマンドの動作と同じです。
複数の列をまとめて確認するには、それらを結合したキー列を作成します:=A2&"|"&B2&"|"&C2。このキー列に対して COUNTIF を実行します。フィールドの間には「|」などの区切り文字を入れてください。区切り文字がないと、「12」と「34」の組み合わせも、「1」と「234」の組み合わせも「1234」になり、同じレコードとして扱われてしまいます。
フィルターにも欠点があります。フィルターで絞り込んだ行を選択して削除する場合は、表示されていて印の付いた行だけが選択されていることを確認してください。その際は、必ずコピーしたシートで作業してください。迷ったら、補助列を並べ替えて、TRUE の行をまとめて一度に削除する方法もあります。
元のデータを残したまま、重複のない一覧を作成する
データを削除せずに、重複のない一覧だけが必要な場合もあります。たとえば、ドロップダウンリスト、集計、インポート用のデータなどです。その場合は、次の 3 つの方法が適しています。
UNIQUE 関数
Excel for Microsoft 365、Excel 2024、Excel 2021 では、=UNIQUE(A2:A100) が範囲内の重複しない値をすべて返し、結果は下のセルに自動的に展開されます。Microsoft によると、この関数は Excel for the web およびモバイルアプリでも利用できます。構文は =UNIQUE(array,[by_col],[exactly_once]) です:
arrayは確認する範囲です。複数の列がある場合、UNIQUE は行全体を比較します。by_colは、行ではなく列で比較したい場合に TRUE を指定します。通常の行の比較では省略します。exactly_onceは、データ内で 1 回だけ出現する行のみを返したい場合に TRUE を指定します。省略すると、重複しないすべての行が返されます。
結果は元のデータが変わると更新されます。元データが Excel テーブルで構造化参照を使用している場合、行を追加または削除すると展開範囲のサイズも変わります。並べ替えたリストが必要な場合は、次のように関数を入れ子にします: =SORT(UNIQUE(A2:A100))。
2 番目の引数の指定は、思われている以上に重要です。=UNIQUE(A2:A100,,TRUE) は 1 回だけ出現する値を返しますが、これは「余分な重複を削除する」とは別の問いです。どちらが必要かを先に確認してください。
制限が 1 つあります。Excel 2019 以前のバージョンには UNIQUE がありません。Microsoft のページに記載されているのは、上記のバージョンだけです。
詳細フィルター
この方法はデスクトップ版のすべてのバージョンで使え、結果を別の場所にコピーできます。
- データを選択します。
- 「データ」タブの「並べ替えとフィルター」グループで、データ > 詳細設定 を選択します。
- 別の場所にコピー を選択します。
- コピー先 ボックスにセルを入力し、重複するレコードは無視する にチェックを入れます。
- OK を選択します。
元のデータはそのまま残り、重複しない行が新しい場所に表示されます。
従来の数式による方法
UNIQUE が使えない場合は、新しい列に =IF(COUNTIF($A$2:A2,A2)=1,A2,"") と入力し、下にフィルコピーします。各値は 1 回だけ表示され、重複は空の文字列になります。その列をコピーして値として貼り付け、空白を除外します。手間はかかりますが、どの環境でも動作します。
部分一致と大文字・小文字の違いへの対応
実際のデータが完全に同じ複製であることはほとんどありません。繰り返し発生する状況が 3 つあります。
完全な重複。 チェックしたすべての列が一致します。この場合は、コマンドで問題なく処理できます。
部分一致。 キーの列は繰り返されますが、他のフィールドが異なります。たとえば、同じ顧客 ID で住所が 2 つ異なる場合です。この場合は、どちらが正しいかを判断する必要があります。正しいほうが先頭に来るように並べ替えてから、キーの列だけを対象に重複を削除してください。あるいは、補助列で重複にフラグを付け、手作業で確認する方法もあります。どの住所が正しいかは、ツールでは判断できません。
大文字・小文字の違い。 Microsoft のドキュメントによると、Power Query では大文字と小文字が区別されるため、「Apple」と「apple」は重複とはみなされません。推奨される回避策は、重複を削除する前に変換で列を大文字または小文字に統一することです。ただし、これにより保存されている値が変わるため、正確な表記が必要な場合は元の列を残しておいてください。
自動化: Power Query と VBA
1 回限りのクリーンアップであれば、コマンドで十分です。毎週整理するファイルであれば、繰り返し実行される仕組みを設定しましょう。
Power Query
データが CSV ファイル、データベース、または別のブックから取得される場合は、インポート時に重複を削除します。Power Query は、この手順を記録し、更新のたびに再実行します。
- データを Power Query エディターに読み込みます。データがすでにワークシートにある場合は、データ内のセルを選択し、クエリ > 編集 を選択するか、データ > データの取得 で新しいソースを読み込みます。
- 列見出しをクリックして列を選択します。複数の列を選ぶには Shift キーまたは Ctrl キーを押しながらクリックします。列が隣り合っている必要はありません。
- ホーム > 行の削除 > 重複の削除 の順に選択します。
- 「閉じて読み込む」を選択します。
Microsoft のPower Query で重複する行を保持または削除するページには、これらの手順が記載されています。重複の扱いについてのガイダンスは知っておく価値があります。重複とみなされるかどうかは選択した列によって決まり、Power Query は一連の重複のうち最初の行を残すことを保証しません。どの行が残るかが重要な場合は、並べ替えだけに頼らないでください。Microsoft は Power Query の一般的な問題に関する記事にある「並べ替えを保持」の説明を案内しています。関連するオプションの重複を保持は、その逆の動作をします。値が複数回出現する行だけを残すため、リストを手早く監査するのに便利です。
2 つのテーブルを結合する場合は、重複の削除をどこで行うかを検討してください。結合前に各ソースから重複を削除すると、結合結果が小さくなり、予測しやすくなります。結合後に削除すると、結合によって生じた重複を整理できます。重複がどこから発生しているかに基づいて選択し、読み込む前にプレビューで行数を確認してください。
VBA マクロ
毎日開くブックで同じクリーンアップを繰り返すなら、マクロも選択肢になります。Range オブジェクトには RemoveDuplicates メソッドがあり、Microsoft の VBA リファレンスに記載されています。比較する列を指定し、先頭行が見出しかどうかを指定します。Microsoft 自身のサンプルは次のとおりです。
ActiveSheet.Range("A1:C100").RemoveDuplicates Columns:=Array(1,2), Header:=xlYes
この例では、範囲 A1:C100 の最初の 2 列を比較し、先頭行を見出しとして扱います。使うには、Alt+F11 を押してモジュールを挿入し、その行を Sub の内側に貼り付けて、ファイルをマクロ有効ブック(.xlsm)として保存します。まずはコピーで実行してください。マクロは、コマンドと同じく元に戻せない形で削除します。Ctrl+Z では行を復元できません。また、IT 部門がマクロをブロックしている場合もあるため、同僚が実行できないものを作る前に確認してください。この言語についてさらに学びたい場合は、VBA ページに関連資料がまとめられています。
Excel for the web とモバイル
重複の削除に関する Microsoft の記事では、デスクトップ版の Excel(Microsoft 365、2024、2021、2019、2016)のみが取り上げられており、Web 版やモバイルアプリについては触れられていません。Microsoft は、これらのバージョンで「重複の削除」コマンドについては説明していないため、このコマンドを前提にした作業手順は組まないでください。Web 版とモバイル版について Microsoft が文書化しているのは UNIQUE 関数です。そのため、これらのデバイスできれいな一覧を得るにはこの関数を使い、完全な削除はデスクトップ版で行ってください。
よくある間違い
- バックアップを取らずにコマンドを実行する。ファイルを閉じると、行は完全に失われます。
- 誤った列を選択する。列を除外すると重複とみなされる行が変わり、繰り返されているセルだけでなく行全体が削除されます。
- 先に並べ替えるのを忘れ、なぜ新しいレコードではなく古いレコードが残ったのかと首をかしげる。
- 見た目は同じでも書式が異なるセルを比較する。たとえば、日付の書き方が 2 通りある場合や、文字列の末尾に空白がある場合です。
- アウトラインや小計が含まれるデータに対してコマンドを実行しようとする。先にそれらを削除してください。
exactly_onceを TRUE に設定したUNIQUEを、余分な行を削除する手段だと考える。この設定では 1 回だけ出現する値のみが返されるため、繰り返し出現する値は結果から完全に消えてしまいます。
関連トピック
- 何かを削除する前に、条件付き書式で重複を強調表示し、COUNTIF の補助列で繰り返し行に印を付けてください。どちらも上記で説明しています。
- インポート時にデータをクリーンにする。Power Query の手順を使えば、更新のたびに重複を取り除けます。CSV ファイルや他のシステムのデータにも適しています。
- 入力時に重複を防ぐ。ユーザーが既存の値を入力できないよう、カスタム数式を使ったデータの入力規則を設定できます。まずは小さなシートでテストしてください。
- 繰り返し行う作業はマクロで自動化し、コピーで安全に実行する方法を学んでください。
- 重複が発生しがちな、複数のソースからのデータ統合。クリーンアップと結合の順序を計画してください。
次のステップ
次のクリーンアップを行う前に、データをコピーし、条件付き書式で重複を強調表示して、件数を確認してください。そのうえでコピーに対して「重複の削除」を実行し、件数を Excel が報告する数値と比較してください。