重複したセルやデータを含むレコードを抽出する・削除する

計算ソフトであるExcelの真骨頂は、文字通り表計算であったり、関数やグラフといった計算を主とするものですが、基本操作編でも学習したとおり、簡単なデータベース機能も持っています。

データベースは、データを収集し蓄積していくためのフォーマットで、フィールド(列)に項目をとり、レコード(行)に個別のデータを入力していきます。

例えば、社員名簿を作成するとすると、フィールドには「社員番号」、「氏名」、「生年月日」などが入り、レコードにはそれぞれのデータが入ります。

さらに勤怠管理や所有資格の有効期限などを組み合わせた本格的なデータベースを作成しようと思うと、「Accsess」などのデータベースソフトを利用しなければなりませんが、通常はExcelで十分です。

本項ではデータベースの作成をするわけではありませんが、主にデータベースを作成する場合に必要になってくる機能やテクニックを学習していきます。

では下図のように、社員名簿の簡単なデータベースを作成していくケースを考えてみましょう。

社員名簿のデータベースのイメージ

このようにレコード(行)をどんどん追加していくのがデータベースになりますが、レコード数が百を超えてくると、ある問題が生じてくる可能性があります。それは、

重複してはならないレコードが存在する可能性がある

ということです。どういうことかというと、例えば、一意の番号であるはずの「社員番号」が重複して登録されているかもしれないし、同じ名前の人物が重複して登録されているかもしれないということです。つまり、入力ミスが発生する可能性があるのです。

また、債権管理や顧客管理などのデータベースを使って請求書を発送する場合など、重複があれば複数枚の請求を先方に送ってしまうことになります。金額が異なる請求書ならまだしも、同じものを2通送ってしまったとしたら目も当てられません。

Excelには、デフォルト(初期設定)でこうしたチェック機能はありません。レコード数が多くなってくると、ざっと見ただけでは重複をチェックすることが困難になってきます。そこで、重複をチェックするためにいろいろな方法を用いることになります。

では、どのような方法があるのかというと、まずは、オーソドックスに関数を使う方法からです。

こういう場面でもっとも使われるのが「COUNTIF(カウントイフ)関数」になります。COUNTIF関数は、基本操作編の 簡単なデータベースの作成(1)で学習したとおり、指定した範囲の中から条件に合う「セルの個数」を返す関数です。

例えば、上の表の「氏名」の列を範囲に指定して、引数に「赤木 しげる」を指定すると、「赤木 しげる」と一致するセルの個数が返されます。これが「2」以上になると重複していることになります。

「関数の引数」画面のイメージ

さらに、COUNTIF関数とIF関数を組み合わせて、下図のように「×」という記号や「重複」といった文字列で、重複しているセルに記号や文字を表示してわかりやすくすることもできます。(IF関数については、基本操作編の IF関数 を参照してください)

COUNFIF関数とIF関数で重複チェックをしているイメージ

上記の関数式(「A3」セルの式)は、「=IF(COUNTIF($B$3:$B$20,B3)>1,"×","〇")」としています。その式を「A20」セルまでオートフィルでコピーしています。

意味は、「B列」において重複するセルの個数を算出し、その値が1より大きい場合に「×」、1以下の場合に「〇」を表示させるという意味になります。1より大きいということは、重複があるということです。

この場合、求める個数は整数しかないので、2以上の「2>=」としても同じ意味になります。また、1以下ということは、一意の値であるということになります。上図は、「A15」セルと「A20」セルで値が「2」になるため「×」が表示されています。

関数の記述方法は、まずIF関数の「論理式」に入れ子でCOUNTIF関数を挿入します。「×」と「〇」はその後で記述します。

「IF関数」の「関数の引数」画面のイメージ

次に、COUNTIF関数の「範囲」に重複をチェックする範囲を指定し、「検索条件」には文字列の「×」や「〇」ではなく、セルを指定します。個数を数える文字列がそれぞれセルによって異なるためです。

下図のように「B3」を指定すると、範囲の中で「B3」セルの値が何個あるかを算出します。オートフィルで「B4」にコピーすると、範囲の中で「B4」セルの値を処理するようになります。

「COUNTIF関数」の「関数の引数」画面のイメージ

COUNTIFの関数式「=COUNTIF($B$3:$B$20,B3)」が完成したらIF関数に戻り、「論理式」に「>1」を追記して「COUNTIF($B$3:$B$20,B3)>1」と記述します。これで「COUNTIF関数の値が1より大きい時」というIFの条件が設定されます。

そして、条件が真の時は「×」、偽の時は「〇」とすると、重複がなければ「〇」、重複があれば「×」が表示されるようになります。

IF関数との組み合わせは少々ややこしいように見えますが、慣れると簡単に作成することができるようになります。COUNTIF関数については、本応用操作編の COUNTIF関数 でもさらに深く学習しますので、本項ではここまでに留めます。

では次に、重複チェックでもっともよく使われる方法で、非常に簡単な方法です。

それは、「条件付き書式」という機能を使います。この機能を使うと、まさにあっという間に重複セルを抽出することができます。

まず、抽出したい範囲をマウスで範囲指定します。この場合は、同様の表全体を範囲指定しています。その状態で「ホーム」タブの「条件付き書式」ボタンをクリックします。

「ホーム」タブの「条件付き書式」ボタンのイメージ

すると、下図のようにリストメニューが表示されます。「セルの強調表示ルール」を選択して、さらに「重複する値」を選択します。

「条件付き書式」ボタンのメニューのイメージ

すると、「重複する値」画面が表示されます。

「重複する値」画面のイメージ

ここでは、どのような書式で強調表示するのかを指定します。重複がわかればよいので特に気にする必要はありません。デフォルト(初期設定)の「濃い赤の文字、明るい赤の背景」のまま「OK」ボタンをクリックします。

すると、これだけで、下図のように重複しているセルが強調表示されます。

重複するセルが強調表示されているイメージ

この場合では、一意であるはずの「社員番号」に重複があることがわかります。重複する値のどちらかを修正すると、強調表示は自動的に消えます。

また、例えば「A列」全体に強調表示ルールを設定しておくと、新たに社員番号を割り振るときに、重複した番号であれば強調表示されるようになるので、一意の番号を割り振ることができます。

重複するセルが強調表示されているイメージ

一方、強調表示ルールを解除する場合は、同「条件付き書式」ボタンより、「ルールの管理」を選択します。

「条件付き書式」ボタンのメニューのイメージ

すると、「条件付き書式ルールの管理」画面が表示されます。

「条件付き書式ルールの管理」画面のイメージ

画面を開いた状態では、「書式ルールの表示」のリストメニューが「現在の選択範囲」になっています。ルールの設定が増えてくると選択範囲以外にもルールが設定されています。例えば、「このワークシート」を選択すると、ワークシートに設定されているすべてのルールが表示されます。

該当するルールを選択して、「ルールの削除」ボタンをクリックすると、設定したルールが画面から消えます。「OK」ボタンで完全に削除することができます。

「条件付き書式ルールの管理」画面のイメージ

このように、重複チェックの方法として、強調表示ルールを設定する方法は非常に簡単で便利です。ぜひ覚えておいて活用してください。

ただ、この方法は「条件付き書式」の機能の一部にすぎません。条件付き書式の全容については、条件付き書式 で詳しく解説しますので、本項ではここまでに留めます。

では最後に、これまでの重複するセルをチェックする方法と似て非なる方法です。それは、

重複するセルを含む行を削除してしまう方法

になります。つまり、COUNTIF関数や強調表示のようにチェックするのではなく、いきなり削除してしまうという方法です。そのため、あまり用途がないのではと思われがちですが、そうでもありません。

これまでは、列の一部のセルの値が重複しているのをチェックするのが目的でしたが、例えば、上の例の社員名簿が千以上のレコード(行)になってくるとどうでしょうか?

そうなると、重複がかなりの確率で発生している可能性があります。大きなデータベースで複数の強調表示がされると、いったいどことどこが重複しているのかわからなくなります。

また、「社員番号」が重複している行が3つあり、「記念品」が重複している行が4つあったとして、どちらも一意の値でなければならない場合、そうした組み合わせのチェックをすることが強調表示では困難になります。

わかりやすく同じ表を使って、重複を削除してみましょう。

まず、同様に任意の範囲をマウスで範囲指定します。その状態で「データ」タブの「重複の削除」ボタンをクリックします。

「データ」タブの「重複の削除」ボタンのイメージ

すると、「重複の削除」画面が表示されます。

「重複の削除」画面のイメージ

デフォルトでは上図のように、「先頭行をデータの見出しとして使用する」にチェックがついた状態であり、画面に表示されている「列」のタイトル(見出し)が項目名称になっている場合があります。

これは基本操作編の フィルタと並び替えと検索 で学習したとおり、範囲指定したデータ範囲の1行目をタイトルとみなしているためで、タイトル行を範囲に含まずに範囲指定した場合は、「先頭行をデータの見出しとして使用する」のチェックを外します。

「重複の削除」画面のイメージ

すると、見出しがなくなり列「A~」に画面の表示が変わります。また、タイトル部分まで範囲指定して「先頭行をデータの見出しとして使用する」場合は、下図のようにタイトルが列の名称になるため、非常にわかりやすくなります。

「重複の削除」画面のイメージ

この列やタイトルの中から選択していきます。「列A」は「社員番号」の列であり、この列で重複を削除したい場合は、「列A」のみにチェックを入れた状態で「OK」ボタンをクリックします。

「重複の削除」画面のイメージ

すると、下図のように「列A」で重複する行が削除され、何個の重複があり、一意の値が何個残ったかというメッセージが表示されます。

重複の削除が実行されたメッセージ

上下でどう変わったのかというと、「行15」の「1877(鷹村守)」と「行20」の「1877(江戸川コナン)」が重複しており、行が下位のほう「1877(江戸川コナン)」の行がまるごと削除されました。

つまり、「列A」で重複している値があると、そのセルを含む行で、かつ下位の行すべてが削除されるということです。例えば、重複が3つあった場合は、下位の2行がまるごと削除されます。すなわち、

最上位行の1行のみが残り、その他の行はすべて削除される

ということになります。どうしてこのような一律的な削除になるのかというと、そもそも、この重複の削除機能は、どの行を削除したからといって同じだという考え方の機能だからです。

当然ながら、項目数(列数)が多くなってくると、すべての項目において同じになることは少なく、削除されてしまっては困る場合もあります。そんな場合は、列の組み合わせで重複の範囲を限定することができます。

どういうことかというと、例えば、「列A」で重複かつ「列B」でも重複している、「列A」かつ「列B」のように「AND検索」をかけることができます。

AND検索とは、基本操作編の 簡単なデータベースの作成(1)で学習したとおり、「AかつB」という条件になります。つまり、「AとBの両方を含む場合」という条件になります。

例えば、下図のように「列A」、「列C」、「列D」の3つにチェックをいれた場合、それらすべての条件を満たす場合に削除が行われます。

「重複の削除」画面のイメージ

このように、Excelでデータベースを作成していく場合において、重複というのはどうしても発生してしまうものです。入力時に気をつけるのはもちろんですが、便利な方法がいくつもあるので、後から簡単にチェックをかけることができるということを覚えておきましょう。

ただし、注意が必要なのは、「半角」と「全角」の違いが区別されるということです。つまり、全角の英数字カナと半角の英数字カナが混在している場合は、同じ文字であっても同一文字として認識されません。

さらに、「全角スペース」と「半角スペース」にも注意が必要です。姓と名の間をスペースで区切っている場合で、半角と全角が異なれば重複データとして扱われないので注意してください。

更新履歴

2018年4月20日
ページを公開。

参考文献・ウェブサイト

当ページの作成にあたり、以下の文献およびウェブサイトを参考にさせていただきました。

文献
なし
サイト
なし