Excelには重複を検出し、削除するためのツールが組み込まれていますが、これらは既存のデータに対して事後的に機能します。そもそも重複が発生しないようにしたい場合は、Excelのデータ検証機能の使用を検討してください。この機能は、入力時に値をチェックし、指定したルールに従って値を拒否または承認します。残念ながら、重複値を認識する組み込みの検証ルールはないため、この機能をExcelのCOUNTIF()関数と組み合わせる必要があります。
この記事では、構造化参照と名前付き範囲を使用して、Table オブジェクトでこれを行う方法を説明します。
私はWindows 10 64ビットシステムでOffice 365のExcel 2016(デスクトップ版)を使用していますが、どちらの手法も以前のバージョンやブラウザ版でも動作します。ご自身のデータを使用することも、デモ用の.xlsxファイルと.xlsファイルをダウンロードすることもできます。
参照: Windows 10 パワーヒント: お気に入りの設定への秘密のショートカット (Tech Pro Research)
COUNTIF()について
Excelのデータ入力規則には重複ルールは組み込まれていませんが、COUNTIF()関数と組み合わせることで同じ効果を得ることができます。ただし、COUNTIF()関数の使い方を理解しておく必要があります。(この関数の使い方をご存知の方は、このセクションを読み飛ばしてください。)
COUNTIF()関数は、範囲内で特定の条件を満たすセルの数を数えます。範囲と条件を引数として指定し、以下の構文を使用します。
COUNTIF(range,condition)
この関数を使って、図Aに示すシートの列B(会員番号列)内で会員番号の出現回数を数えてみましょう。現在、この列には重複が許可されています。
図A
会員番号列の番号が重複するのを防ぐために、データ検証を使用します。
まず、セル K3 に次の関数を入力します。
=COUNTIF(Table1[Membership Number],B3)
この関数は、データがTableオブジェクトとしてフォーマットされているため、構造化参照を使用しています。列内に値100が1回しか出現しないため、関数は1を返します。この値を残りのセルにコピーすると、すべて1が返されることがわかります(図A)。いずれかの値が重複している場合、それぞれの関数は2を返します(図B)。条件付き書式を使用して重複がある場合に警告を表示することもできますが、重複を完全に回避する方がよいのではないでしょうか。
図B
この関数は条件が満たされた回数を返します。
テーブル設備
データ検証設定にCOUNTIF()関数を追加することで、範囲内に既に存在する値を拒否できます。開始する前に、対象の列に重複データが含まれていないことを確認してください。この手法の例としては、次のように「会員番号」列に検証データコントロールを追加することで確認できます。
- 問題の列にある既存のデータセルをすべて選択します。この場合はB3:B6です。
- [データ] タブをクリックし、[データの入力規則] ドロップダウン ([データ ツール] グループ内) から [データの入力規則] を選択します。
- 表示されるダイアログで、[許可] ドロップダウンから [カスタム] を選択します。
- 数式コントロールに、数式(図C)
=COUNTIF(INDIRECT(“Table1[会員番号]”),B3)<=1を入力します
。必ずストレートクォーテーション(波括弧ではなく)を使用してください。独自のデータを扱う場合は、テーブル名と列名を必ず更新してください。 - [OK]をクリックします。
図C
このカスタム ルールは、メンバーシップ番号列の重複を拒否します。
INDIRECT() 関数の仕組みを正確に理解する必要はありませんが、簡単に言うと、参照をテキストとして返します。この関数がない場合、Table オブジェクトに対応するために必要な構造化参照のため、この機能は関数を拒否します。(実際の範囲を入力することもできますが、まず範囲の名前を定義する必要があります。その方法については次のセクションで説明します。)
テーブルとINDIRECT()関数のおかげで、行を追加するたびに範囲が増加します。範囲内のセルに既存の値を入力すると、図Dに示すように、この機能によってその値は拒否されます。重複ルールについて理解していない限り、エラーメッセージはあまり役に立ちません。この機能の「入力メッセージ」タブと「エラーアラート」タブ(図B参照)を使用して、ユーザーにとって意味のある情報を表示できます。
図D
カスタム ルールは、範囲内にすでに値が存在する場合、その値を拒否します。
名前付き範囲
INDIRECT() を避ける必要はありませんが、代わりに名前付き範囲を使用することもできます。既存のデータセルに名前を付けるには、次のようにします。
- B3:B6を選択します。
- 名前コントロールに「MNumber」と入力します (図 E )。
- Enterキーを押してください。名前を確定するにはEnterキーを押す必要があります。
図E
名前コントロールを使用して範囲に名前を付けます。
次に、前と同じように検証ルールを作成しますが、INDIRECT() を使用する代わりに、名前付き範囲を参照する次の関数を入力します。
=COUNTIF(MNumber,B3)<=1
2 つのルールは同じように機能しますが、1 つはテーブル構造で機能し、もう 1 つは名前付き範囲で機能します。
Officeに関するご質問をお送りください
読者の質問には可能な限りお答えしますが、必ずお答えできるとは限りません。リクエストがない限り、ファイルは送信しないでください。添付ファイル付きの初回サポートリクエストは未読のまま削除されます。ご質問を明確にするために、データのスクリーンショットを送信していただくことも可能です。お問い合わせの際は、できるだけ具体的にご記入ください。例えば、「ワークブックのトラブルシューティングを行い、問題点を修正してください」といった質問では返答がないかもしれませんが、「この数式が期待どおりの結果を返さない理由を教えていただけますか?」といった質問であれば、回答が得られるかもしれません。ご使用のアプリとバージョンを明記してください。読者サポートにあたり、TechRepublicから時間や専門知識の報酬を受け取ることはありません。また、サポートした読者から料金を請求することもありません。お問い合わせは[email protected]までお願いいたします。
参照
- Excel Power Query を使用して、複数の値を持つ列から新しいレコードを生成する非常に簡単な方法 (TechRepublic)
- Microsoft Word 2016 文書に用語集の用語を追加する 3 つの方法 (TechRepublic)
- Excelのエラー:Microsoftのスプレッドシートが健康に危険をもたらす可能性(ZDNet)
- Outlook 2016のオートコンプリートリストを効率的に使うための5つのヒント(TechRepublic)
- VBA を使用して Excel の範囲を選択する方法 (TechRepublic)