Excelでデータ分析を行う際、複数の条件を組み合わせて重複データを判定したい場面があります。
例えば、氏名と部署、あるいは商品コードと製造年月日など、単一の列だけでは特定できないユニークな組み合わせの重複を検出したい場合です。
このような場合に役立つのが、CONCATENATE関数とCOUNTIFS関数を組み合わせたテクニックです。
この記事では、この組み合わせ技を使って、複数列をキーにした重複判定を行う方法を解説します。
【要点】複数列をキーに重複を判定する方法
- CONCATENATE関数: 複数列の値を結合して、一時的なユニークキーを作成します。
- COUNTIFS関数: 作成したユニークキーが、データ全体で何回出現するかをカウントします。
- 重複判定: COUNTIFS関数の結果が1より大きい場合に重複と判定します。
ADVERTISEMENT
目次
CONCATENATE+COUNTIFSで複数列の重複を判定する仕組み
Excelで複数の列を条件として重複を判定するには、まず「結合キー」を作成し、その結合キーがデータ内にいくつ存在するかを数えるのが基本的な考え方です。
CONCATENATE関数は、指定した複数のセルの値を連結して、新しい一つの文字列を作成します。これにより、例えば「氏名」と「部署」の列を結合して、その組み合わせを表現するユニークな値を作り出せます。
COUNTIFS関数は、複数の条件に一致するセルの数を数える関数です。この関数にCONCATENATE関数で作成した結合キーを条件として指定することで、その結合キーがデータ全体で何回出現するかを正確にカウントできます。
複数列をキーにした重複判定の具体的な手順
ここでは、架空の顧客リストを例に、氏名とメールアドレスの組み合わせで重複を判定する手順を説明します。
以下の顧客リストがあるとします。
| ID | 氏名 | メールアドレス | 重複判定 |
|---|---|---|---|
| 1 | 山田 太郎 | yamada@example.com | |
| 2 | 佐藤 花子 | sato@example.com | |
| 3 | 山田 太郎 | yamada@example.com | |
| 4 | 田中 一郎 | tanaka@example.com | |
| 5 | 佐藤 花子 | hanako@example.com |
「重複判定」列(ここではD列とします)に、重複を検出する数式を入力します。
- 作業列の挿入(任意)
まず、結合キーを作成するための一時的な作業列を挿入します。ここでは、E列を作業列として使用します。E2セルに以下の数式を入力します。=CONCATENATE(B2,C2)この数式は、B2セル(氏名)とC2セル(メールアドレス)の値を結合します。必要であれば、区切り文字として「-」などを挿入することも可能です(例:
=CONCATENATE(B2,"-",C2))。 - 作業列のコピー
E2セルに入力した数式を、リストの最後までコピーします。これにより、各行の氏名とメールアドレスの組み合わせがE列に表示されます。 - COUNTIFS関数で重複をカウント
次に、D2セルに以下の数式を入力します。=COUNTIFS(E:E,E2)この数式は、E列全体(E:E)の中で、E2セルの値(現在の行の結合キー)と一致するものがいくつあるかを数えます。
- 重複判定結果の表示
D2セルに入力した数式を、リストの最後までコピーします。D列に表示される数値は、その行の結合キーがデータ全体で何回出現するかを示します。 - 重複の判定
D列の値が「1」より大きい場合、その行は重複していると判定できます。必要に応じて、D列の値が1より大きい行をフィルターで抽出したり、条件付き書式で色を付けたりすることで、重複データを視覚的に把握できます。
例えば、D列の値が1より大きい場合に「重複」と表示する数式をD2セルに入力し、コピーすると、重複データが明示されます。
D2セルに以下の数式を入力してコピーしてください。
=IF(COUNTIFS(E:E,E2)>1,"重複","OK")
この数式により、重複している行には「重複」と表示され、重複していない行には「OK」と表示されます。
CONCATENATE関数の代替関数について
Excelのバージョンによっては、CONCATENATE関数よりも新しい、あるいは便利な関数が利用できます。
Excel 2019以降やMicrosoft 365では、CONCAT関数やTEXTJOIN関数が利用可能です。これらの関数は、CONCATENATE関数と同様に複数の文字列を結合できますが、より柔軟な使い方ができます。
CONCAT関数
CONCAT関数は、引数として指定された範囲の文字列をすべて連結します。CONCATENATE関数のように、引数ごとに区切り文字を指定する必要はありません。例えば、B2セルとC2セルを結合する場合、以下のように記述できます。
=CONCAT(B2:C2)
区切り文字を入れたい場合は、CONCATENATE関数と同様に、引数として追加します。
TEXTJOIN関数
TEXTJOIN関数は、指定した区切り文字で、指定した範囲の文字列を連結します。空のセルを無視するオプションもあるため、より便利です。例えば、B2セルとC2セルをハイフンで区切り、空のセルは無視する場合、以下のように記述します。
=TEXTJOIN("-",TRUE,B2:C2)
Excel 2019以降やMicrosoft 365をご利用の場合は、これらの新しい関数を利用することで、より簡潔に数式を作成できます。ただし、COUNTIFS関数との組み合わせ方は同じです。
ADVERTISEMENT
COUNTIFS関数で複数列の重複を判定する際の注意点
CONCATENATE関数とCOUNTIFS関数を組み合わせて複数列の重複を判定する際に、いくつか注意すべき点があります。
データ型の違いによる誤判定
数値を文字列として結合した場合、Excelの自動変換によって意図しない結果になることがあります。例えば、「123」という数値と「456」という数値を結合すると、Excelは「123456」という数値として扱う場合があります。
これを防ぐためには、CONCATENATE関数(または代替関数)で結合する際に、数値を文字列に明示的に変換することをお勧めします。TEXT関数を使用すると、書式を指定して文字列に変換できます。
例えば、B2セルが数値、C2セルが数値の場合、以下のように記述します。
=CONCATENATE(TEXT(B2,"0"),TEXT(C2,"0"))
これにより、数値が文字列として結合され、データ型の違いによる誤判定を防ぐことができます。
区切り文字の重要性
CONCATENATE関数で単純に値を結合した場合、意図しない重複と判定される可能性があります。例えば、「山田」「太郎」と「山」「田太郎」を結合した場合、区切り文字がないとどちらも「山田太郎」と結合されてしまい、本来は重複ではないデータが重複として検出されてしまいます。
これを避けるため、結合する値の間に必ず一意の区切り文字(例:「-」「_」「|」など、データに含まれない文字)を挿入することを強く推奨します。
例えば、B2セルとC2セルを結合し、区切り文字として「-」を使用する場合、数式は以下のようになります。
=CONCATENATE(B2,"-",C2)
これにより、「山田太郎」と「山田太郎」という異なる組み合わせが、「山田-太郎」と「山田-太郎」として区別され、誤判定を防ぐことができます。
COUNTIFS関数の対象範囲
COUNTIFS関数で指定する範囲は、結合キーが入力されている列全体(例: E:E)を指定するのが一般的です。これにより、データが増減しても数式を修正する必要がなくなります。
もし、特定の範囲(例: E2:E100)を指定した場合、その範囲外のデータはカウント対象外となるため注意が必要です。データ量が変わる可能性がある場合は、列全体を指定するか、テーブル機能を使用して範囲を自動調整することをお勧めします。
Excelのバージョンによる関数互換性
CONCATENATE関数は古いバージョンから利用可能ですが、CONCAT関数やTEXTJOIN関数はExcel 2019以降やMicrosoft 365で利用できます。
もし、古いバージョンのExcel(Excel 2016以前)のユーザーとファイルを共有する場合、CONCAT関数やTEXTJOIN関数を使用するとエラーになる可能性があります。その場合は、互換性の高いCONCATENATE関数を使用してください。
作業列を使わない方法(COUNTIFSと配列数式)
前述の方法では、結合キーを作成するための一時的な作業列を挿入しました。しかし、データ量が多い場合や、シートをシンプルに保ちたい場合は、作業列を使わずに直接重複判定を行うことも可能です。
この方法は、COUNTIFS関数と配列数式を組み合わせるもので、Excel 2019以降やMicrosoft 365で利用できる動的配列機能が必要です。
配列数式による重複判定
D2セルに以下の数式を入力します。
=IF(COUNTIFS(B2:B500&C2:C500,B2:B500&C2:C500)>1,"重複","OK")
この数式は、以下の処理を行っています。
- 配列の作成:
B2:B500&C2:C500の部分で、B列とC列の各行の値を結合した一時的な配列を作成します。この結合には、暗黙的に区切り文字として「&」が使用されます。 - COUNTIFSによるカウント: 作成された一時的な配列を、COUNTIFS関数の条件として使用します。
COUNTIFS(B2:B500&C2:C500,B2:B500&C2:C500)は、作成された配列内の各要素が、配列全体で何回出現するかを計算します。 - 重複判定: COUNTIFS関数の結果が1より大きい場合に「重複」、それ以外の場合は「OK」と表示します。
注意点:
- この数式は、B列とC列のデータが結合された際に、意図しない重複が発生しないように、暗黙的な「&」による結合が適切である場合にのみ有効です。複雑なデータ型や、区切り文字が必須となる場合は、前述の作業列を使用する方法がより安全です。
- この数式は、動的配列に対応したExcel 2019以降やMicrosoft 365で機能します。それ以前のバージョンでは、数式を配列数式として確定するためにCtrl+Shift+Enter(CSE確定)が必要になる場合があります。
- 範囲指定(B2:B500など)は、実際のデータ範囲に合わせて調整してください。
まとめ
CONCATENATE関数とCOUNTIFS関数を組み合わせることで、Excelで複数列をキーにした重複判定が容易に行えます。
作業列を使用する方法は、その仕組みが分かりやすく、Excelのどのバージョンでも利用できるため、多くの場面で役立ちます。
Excel 2019以降をお使いの場合は、CONCAT関数やTEXTJOIN関数、あるいは配列数式を利用することで、さらに効率的に重複判定を行うことも可能です。
データクレンジングや重複チェックの精度を高めるために、ぜひこのテクニックを活用してください。
ADVERTISEMENT
超解決 Excel・Word研究班
企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。
Office・仕事術の人気記事ランキング
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
- 【Excel】矢印キーで「セルが動かず画面がスクロールする」!ScrollLockの解除方法(ノートPC対応)
- 【Outlook】メールの受信が数分遅れる!リアルタイムで届かない時の同期設定と送受信グループ設定
- 【Outlook】予定表の「祝日」が表示されない!最新カレンダーの追加と二重表示の修正手順
- 【Outlook】「メール送信を5分遅らせる」設定!誤送信を防ぐ最強のディレイ機能
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
