エクセルで、重複するデータを削除するには、「重複の削除」機能を使えば簡単です。
しかし、この機能は、重複やダブりを削除したいときに、手動で実行しなければなりません。
そうではなく、データを入力したら自動的に重複を除いたリストが作成できたらいいなと思いませんか。
例えば、下の図のようにデータを入力するだけで、自動的に重複が削除された一覧を作成するということです。
この図の左の表のC9セルに新たに「Eさん」と入力すると、自動的に右側の表のH7セルに「Eさん」が表示されます。
同じようにC10セルに「Aさん」と入力しても、Aさんは重複しているため、右の表では改めて追加されることはありません。
このページでは、上の例のように入力したデータから重複を除いた一覧を自動で作成・更新する方法についてご紹介します。
スグにためセル! – ここを読めばすぐ使える
- Step1作業列を用意する
- Step2作業列の最初のセルに下の計算式を入力する
=IF(COUNTIF($対象範囲の最初のセル:対象範囲の最初のセル,対象範囲の最初のセル)=1,ROW(),””)
- Step3Step2のセルを下にコピーする
- Step4重複を除いたリストに連番を振っておく
- Step5重複を除いたリストを表示したいセルに下の計算式を入力する
=IFERROR(INDEX(表示する対象範囲,MATCH(SMALL(作業列の範囲,連番のセル),作業列の範囲,0)),””)
※ より詳しい解説はここから下に続きます。
【実践】入力したデータから自動的に重複を除く方法
例として、冒頭でもご紹介した下の図の左にあるような参加者名簿に対し、その氏名の重複を除いたリストが右側の表に自動作成されるようにしてみましょう。
1.作業列を用意する
最初に、作業列を用意します。
作業列は後で非表示にしますので、どこに作成しても構いません。
ここでは、わかりやすく隣の列に作りました。
2.作業列の最初のセルに計算式を入力する
追加した作業列の最初のセル(この例では、D3セル)に次の計算式を入力します。
=IF(COUNTIF($対象範囲の最初のセル:対象範囲の最初のセル,対象範囲の最初のセル)=1,ROW(),””)
対象範囲の最初のセルというのは、重複を除きたい範囲の最初のセルということなので、この例で言えばC3セルになります。
また、COUNTIFの最初の「対象範囲の最初のセル」の頭には$マークがついています。
これは、このセルの移動を固定する(絶対参照といいます。)ということを表しています。
具体的には下のような計算式になります。
=IF(COUNTIF($C3:C3,C3)=1,ROW(),””)
ちなみに、エクセルでセル範囲を入力するときって、「C3」と直接打つこともできますが、多くの方はマウスを使って対象のセルをクリックするのではないでしょうか。
その場合、この例で示した「$C3:C3」の入力方法は若干クセがあります。
その入力方法についても簡単にご説明しておきましょう。
- 1マウスでC3セルをクリックする
この時点では、画面には「C3」としか表示されません。
- 2:キーを押す
すると、自動的に「C3:C3」に変化します。
- 3F2キーを押す
こうすることで、キーボードを使って入力カーソルが移動できるようになります。
- 4<キーを押して入力カーソルを最初のC3のところに移動させる
「C」と「3」に間に入力カーソル持っていくとよいです。
- 5F4キーを押す
これで$マークが付きます。
同じようなテクニックは下のページでも使われています。
3.入力したセルを下にコピーする
入力したD3セルを対象範囲の一番下までコピーします。
コピーするときは、D3セルの右下にカーソルを合わせ、カーソルが+になったら、ダブルクリックしましょう。そうすると一瞬で一番下までコピーされますよ。
4.重複を除いたリストに連番を振っておく
重複を除いたリストを表示したい場所にあらかじめ連番を振っておきましょう。
この例では、F列に連番を振りました。
5.重複を除いたリストを表示したいセルに計算式を入力する
重複を除いたリストを表示したいセルに次の計算式を入力します。
=IFERROR(INDEX(表示する対象範囲,MATCH(SMALL(作業列の範囲,連番のセル),作業列の範囲,0)),””)
この例では氏名の重複を除きたいので、表示する対象範囲はC3セルからC12セルとなります。
また、ここでは範囲全体を固定しておきたいので、「$C$3:$C$12」と入力します。
次の作業列の範囲は、ステップ2で作成した作業列全体を指定します。
ここでも範囲全体は固定しておきましょう。
次の連番のセルは、先ほどのステップで用意した連番のうち、現在入力しているセルに対応する番号を指定します。つまり、H3セルに入力する場合の連番のセルは、F3セルとなります。
ここは、固定する必要はありません。
最後の作業列の範囲も、先ほどと同じようにステップ2で作成した作業列全体を絶対参照(固定)で指定します。
最終的な計算式は次のようになります。
=IFERROR(INDEX($C$3:$C$12,MATCH(SMALL($D$3:$D$12,F3),$D$3:$D$12,0)),””)
入力したセルは、下までコピーしておきましょう。
最後に、不要となる作業列は非表示にしておきましょう。
列を非表示にするには、作業列のD列の上で右クリックし、表示されたメニューの中から「非表示」をクリックします。
これで下のように重複を除いたリストが完成しました。
実際にデータを入力してみる
それでは、参加者名簿のC9セルに「Eさん」と入力してみましょう。
「Eさん」はこれまで入力されていませんので、「これまでの参加者一覧」のG7セルに「Eさん」が表示されました。
次にC10セルに既に入力されている「Aさん」と入力してみます。
しかし、「Aさん」は重複していますので、「これまでの参加者一覧」には追加されません。
うまくいっているようですね。
計算式の仕組みを確認
それでは、ここで入力した計算式の仕組みを解説しておきましょう。
例えば、先ほど入力した「Eさん」について見てみます。
作業列の計算式
「Eさん」と入力した隣の作業列(D9セル)の計算式を見てみると下のような計算式になっています。
=IF(COUNTIF($C$3:C9,C9)=1,ROW(),””)
IFのところ
まず最初に出てくるIF関数は、条件によって答えを分岐させる関数です。
この例では、条件が「COUNTIF($C$3:C9,C9)=1」となっており、COUNTIF関数の答えが1の場合は、ROW()を返し、そうでない場合は「””」つまり何も表示しないということになります。
COUNTIFのところ
=IF(COUNTIF($C$3:C9,C9)=1,ROW(),””)
COUNTIF関数は、指定した範囲の中で、ある文字などの数を数える関数です。
IF関数と合わせて見てみると、指定した範囲の中でその文字が1つしかない場合、つまり、重複がない場合は、ROW()を返し、そうでない場合は何も表示しないようになります。
この例では、C3:C9の範囲の中でC9セル、つまり「Eさん」の数を数えます。
その答えは1となりますので、重複がないということになりますね。
ROWのところ
=IF(COUNTIF($C$3:C9,C9)=1,ROW(),””)
IF関数の条件を満たしますので、最終的にROW()が答えとなりますが、このROW()は入力したセルの行番号を返す関数です。
この例では、C9セルに入力していますので、答えとしては「9」が返ってくるのです。
このようにして、上の図のように、重複がない場合は行番号が、重複がある場合は何も表示されないようになるのです。
あとは、この行番号が表示されたセルだけを一覧に表示させればいいのです。
重複を除いたリストの計算式
ということで、重複を除いたリストとなるG7セルの計算式を確認してみましょう。
計算式はこのようになっています。
=IFERROR(INDEX($C$3:$C$12,MATCH(SMALL($D$3:$D$12,F7),$D$3:$D$12,0)),””)
IFERRORのところ
最初のIFERROR関数は、計算式がエラーとなる場合の処理をするものです。
ここでは、エラーとなる場合は、何も表示しないようにしています。
ちなみに、なぜエラーが発生するかというと、下で説明しますが、この計算式ではある数を検索する処理を行います。このときに、その数字が見つからない場合はエラーとなるので、エラーの場合には何も表示しないようにするため書いているのです。
INDEXのところ
=IFERROR(INDEX($C$3:$C$12,MATCH(SMALL($D$3:$D$12,F7),$D$3:$D$12,0)),””)
INDEX関数は、指定した範囲の中で、指定した位置の値を返す関数です。
この例では、$C$3:$C$12の範囲の中で、上から数えて、MATCHの部分で計算した位置にある値を返します。
MATCHのところ
=IFERROR(INDEX($C$3:$C$12,MATCH(SMALL($D$3:$D$12,F7),$D$3:$D$12,0)),””)
MATCH関数は、指定した範囲の中で、特定の文字を検索して、その位置を返す関数です。
この例では、SMALLの部分で計算した数を、$D$3:$D$12の範囲の中から検索します。
このINDEX関数とMATCH関数はよく組み合わせて使用しますので、下のページも参考にご覧ください。
SMALLのところ
=IFERROR(INDEX($C$3:$C$12,MATCH(SMALL($D$3:$D$12,F7),$D$3:$D$12,0)),””)
SMALL関数は、指定した範囲の中で、〇番目に小さい数値を返す関数です。
この例では、$D$3:$D$12の範囲の中で、F7セルに入力された「5」番目に小さい数を返します。
その結果、「9」が答えとなりますね。
計算式をまとめると・・・
ここまでの説明をまとめると、まずSMALL関数の答えが9になりますので、計算式の途中は次のようになります。
=IFERROR(INDEX($C$3:$C$12,MATCH(9,$D$3:$D$12,0)),””)
そして、MATCH関数で「9」という数字を$D$3:$D$12の中から検索します。
すると、上から7セル目ということがわかったので、計算式はこのようになります。
=IFERROR(INDEX($C$3:$C$12,7),””)
次にINDEX関数で$C$3:$C$12の中で上から7番目のセルの値を返します。
つまり、作業列の「9」と書かれた数字のそばにあるセルの値が返されますので、この例では「Eさん」となるのです。
=IFERROR(“Eさん”,””)
ここで計算式は上のようになりますが、特にエラーは出ていないので、答えはそのまま「Eさん」になるということです。
重複している場合は・・・?
ちなみに「Aさん」について見てみると、作業列の計算式は下の図のように入力されています。
しかし、COUNTIF関数によってAさんの数は「3」となるため、IF関数によってその答えは「何も表示しない」ということになります。
こうなると、重複を除いたリストのセルの計算式では、作業列の中で6番目に小さい数を検索しますが、そのようなものは見つからないので、エラーとなり、IFERROR関数によって「何も表示されない」という答えになるのです。
ちなみにG3セルには「Aさん」が表示されていますが、こちらは作業列の中で1番目に小さい数を探して、その隣にある氏名を表示するので、その結果「Aさん」と表示されているわけです。
まとめ
エクセルでは重複やダブりを削除する方法がいくつかあります。
今回はその中でも関数を使った方法をご紹介しました。
関数を使った方法であれば、データの入力に合わせて自動的に重複を除いたリストが作成され、更新されます。
リアルタイムで重複を除きたい場合には、おすすめのテクニックです。
以上、このページでは入力したデータから重複を除いた一覧を自動で作成・更新する方法についてご紹介しました。