重複するデータ行を探して削除する方法|基本の操作と関数

重複するデータ行を探して削除する方法|基本の操作と関数
Excelデータベース

Excel(エクセル)で重複(ちょうふく)するデータ行を探して削除する方法|基本の操作と関数

使用関数:COUNTIF、IF

重複データの処理はデータベースを整える必須作業の一つです。Excel(エクセル)には秒速で重複データを削除する機能が備わっています。基本の重複削除操作と、削除はしたくないが一時的に非表示にして表を閲覧したいという場合の設定方法を図解。また、IF関数とCOUNTIF関数を使って重複データをデータベースから探し、抽出してチェック・マークを付ける操作も図解します。

「重複の削除」で重複する行を削除する

Excel(エクセル)には重複データを効率的に削除する機能が備わっています。簡単操作で、表も心も瞬時に軽くなる優れものです。

重複データを削除したい表のセルをどれか一つ選択して、「データ」タブの「データツール」グループにある「重複の削除」をクリックします。
「データ」タブの「データツール」グループにある「重複の削除」ボタンをクリック

「重複の削除」ダイアログが開きます。フィールド(列項目)全てが選択されています。1行全ての項目が完全に一致したデータばかりなら、このままEnter押しでOK。
1行全ての項目が完全に一致したデータばかりなら重複の削除の列見出しのチェックはそのまま

同じデータなのに項目の記載が少しずつ違っているような場合は「名前」以外のチェックを外します。
項目の記載が少しずつ違っているような場合は、重複の削除ダイアログで「名前」以外のチェックを外す

データベースに列見出しが無く、1行目からデータが始まっている場合は「先頭行をデータの見出しとして使用する」のチェックを外します。列の項目名が「氏名」から「列A」、「会社」から「列B」に変更されています。後の操作は上記と同じです。
1行目からデータが始まってる表では「先頭行をデータの見出しとして使用する」のチェックを外す

上記操作で「OK」を押すと、削除されるデータ数の確認画面が出ます。
削除されるデータ数の確認画面

「重複の削除」で「一意の値が残っている」とは?

メッセージの最後に「一意の値が~個残っている」とあるのは、例えば、データ内に役職の「課長」「部長」が複数あったり、同じ会社に属する人の行データが複数あるといったようなことです。
重複の削除の確認メッセージ「一意の値が~個残っている」

ちょっと念を押す感じですね。ほぼ気にせずにEnter押してOK。

これで、重複する行(レコード)が全て削除されたはずです。
重複した行が適正に削除された

IF関数とCOUNTIF関数で重複をチェックして削除する

重複のチェックフィールドを設けて、重複データを確認した後に削除するやり方です。

COUNTIF」は「条件に一致するデータの数を返す」関数です。同じデータがフィールド内に幾つあるかを数えてくれます。
重複したデータがあれば「」以上の数が返り、一意のデータであれば「」と返るということですね。

即ち、「COUNTIFで返された数字が2以上なら・・・」または、「COUNTIFで返された数字が1より大きければ・・・」という比較演算子(等号・不等号)を使ったIF文でチェックリストを実装すればいいわけで、IF関数にCOUNTIFをネストした数式を組み立てます。

比較演算子の詳細はIF関数のページへ

最初に、チェックが入るフィールドを増設します。フィールドを増設する位置の右隣の列にあるセルを選択して、「ホーム」タブ「セル」グループ「挿入」→「シートの列を挿入」をクリックします。
「挿入」→「シートの列を挿入」をクリック
増設された列のフィールド名を「重複」にします。
増設した列見出しを「重複」にする

COUNTIF関数で検索する範囲の指定に注意!

ここでは「名前」から重複データを探すことにしますが、COUNTIFの最初の引数「範囲」に「名前」の列すべてのセル範囲を指定しません
「名前」の列すべてのセルを範囲にすると、重複する行データ全部をチェックしてしまうからです。同じ名前が2つあれば片方は残したいのに、両方の行にチェックが付いてしまいます。
「名前」の列すべてのセルを範囲にすると、重複する行データ全部をチェックしてしまう

重複するデータを一つだけ残して他を削除したいので、指定する範囲は「名前」の列の最初のセルから、当該セルまでにします。例えば「A8」セルに入った名前を検索する範囲は「A2」から「A8」セルまでにするということです。

数式」タブの「関数ライブラリ」の「その他の関数」→「統計」→「COUNTIF」をクリックし、「COUNTIF」の関数の引数ダイアログボックスを開きます。
「範囲」には「名前」の最初のセル番地~最初のセル番地を「A2:A2」と入力し、F4キーで左のセル番地だけ「$A$2:A2」というように絶対参照にしておきます。
次の引数「検索条件」にも「名前」の最初のセルをクリックして指定します。
COUNTIF関数の引数ダイアログボックスで範囲と条件を指定

数式は「=COUNTIF($A$2:A2,A2)」です。後でIFに入れ子するので、この数式(=を除いた部分)をコピーしておきます。

※複数の範囲を指定する時はCOUNTIFではなく、COUNTIFS関数で

表によっては一つの範囲指定だけでは重複かどうかの判定が難しい場合があります。その時は「COUNTIF」ではなく、複数の範囲を指定できる「COUNTIFSを使います。
複数の条件で数える場合はCOUNTIFSを使う
数式は「=IFCOUNTIFS($A$2:A2,A2,$C$2:C2,C2)>1,"✔","")」のようになります。範囲と条件をカンマで区切って交互に並べる構成ですね。

IF関数にCOUNTIF関数をネストして重複データにチェックマークを付ける

COUNTIFで探した重複データをチェックマークで一目で判るようにしておきましょう。

「関数ライブラリ」→「論理」→「IF」をクリックしてダイアログを開き、最初の引数「論理式」に前章でコピーしておいた数式「COUNTIF($A$2:A2,A2)」をペーストし、そこに続けて「>1」(または>=2)と入力します。前述したように、「COUNTIFで返された数字が1より大きければ」(または「COUNTIFで返された数字が2以上なら」)というIF文になりました。
IF関数のダイアログで論理式にコピーしておいたCOUNTIF関数の式をペースト

このIF文に答えて、「真の場合」に「"✔"」を入力し、「偽の場合」に空欄を意味する「""」を入力しました。重複データがあればチェック欄にレ点が表示されるということです。(※IMEやGoogle日本語入力が設定された環境なら「✔」は「ちぇっく」と入力して変換できます)
IF関数のダイアログの「真の場合」に✔、「偽の場合」に空欄を指定

「重複」列を確認すると、重複する行データに、一つを残してチェックマークが付きました。
重複する行データに、一つを残してチェックマークが付いた

最終的な数式は「=IF(COUNTIF($A$2:A2,A2)>1,"✔","")」となります。
同一の名前が既にあれば、チェック欄に✔が付き、なければ何も表示されない

フィルターで重複するデータをまとめてから削除する

表内のセルをどれか選択した状態で、「データ」タブの「並べ替えとフィルター」グループにある「フィルタ」ボタンをクリックします。
データタブのフィルターボタンをクリック
表の列見出しにフィルター機能が付きました。
列見出しにフィルター機能が付いた

「重複」列のフィルター「▼」をクリックして、「✓」にだけチェックを入れ、空白のチェックは外します。
フィルターで「✓」以外のチェックを外す
2つ目以降の同一データだけを抽出できました。
2つ目以降の重複データが抽出された
重複データの行番号をドラッグして行全体を選択し、右クリック、出てきたメニューの「行の削除」をクリックします。
重複データの行全体を選択し、右クリック、出てきたメニューの「行を削除」をクリック
「フィルタ」ボタンを再度クリックして解除すれば、重複データが無くなった表になります。

フィルターで重複するデータを残したまま非表示にする

前章と同じ手順で「重複」列のフィルター「▼」をクリックして、フィルターのメニューの「空白」にだけチェックを入れ、「✓」のチェックは外します。
フィルターで「空白」にだけチェック
重複データを削除したのと同じ表になります。違うのは、行の番号が飛び飛びになることだけ。
重複データをフィルターで非表示にした表
「フィルタ」ボタンを再度クリックして解除すれば、元の表に戻ります。

重複データにチェックしたり、削除するまでもなく、ただ一時的に非表示にしたいだけなら、元のデータ表のセルをどれか選択した状態で、「データ」タブの「並べ替えとフィルター」グループにある「詳細設定」ボタンをクリックします。
並べ替えとフィルターにある「詳細設定」をクリック
フィルターオプションの設定」ダイアログボックスが開き、「リスト範囲」に表全体が指定されています。「検索条件範囲」に重複の検索値を指定(ここでは住所の最初のセルをクリック)して、「重複するレコードは無視する」にチェックを入れます。
フィルターオプションの設定ダイアログで「重複するレコードは無視する」にチェック
「OK」すれば、重複データが非表示になります。元に戻したい時は、「フィルター」ボタンをクリック。

タイトルとURLをコピーしました