
関数のみ【重複抽出】コピペでOK【空白詰め】Excelデータまとめに便利
エクセルで大量のデータがあると、重複を抽出するとわかりやすいデータになると思います。
関数で重複を抽出をやっとできたと思っても、空白行がたくさんで逆にわかりにくい・・・。
そんな時は、重複を抽出した後で空白行を無くせばよいのですが
なんと、エクセルの関数のみでもできます。
エクセルの関数のみで重複抽出と空白行を詰めるできる方法を記載します。
エクセルで重複抽出と空白行を詰める方法は色々ありますが、紹介する方法は
全て関数のみで、重複抽出できますので、ぜひご参考にしてください。
Excelの関数の使い方すらわからない人はこちら(関数の使い方)をご覧ください。
超初心者の方は、「空白を詰めずに、重複抽出」
初心者の方は、「空白を詰めて、重複抽出」
上級者の方は、「配列数式」で空白を詰めて、重複抽出」
をご覧ください。
< ---目次--- >
◆色々な重複抽出の方法
エクセルで重複を抽出する方法は、色々なやり方がありますので紹介します。
1行目は項目名がなどがある前提で解説します。
ですので、ない場合は、関数などは、2行目からではなく、1行目からの関数にしてください。
・空白を詰めずに、重複抽出(超初心者向け)
説明
空白行を詰めずに、重複抽出する方法は、最も簡単で初心者にはオススメです。
空白行を詰める事ができませんので、実用性はあまり、ありませんが
エクセルで重複を抽出する関数の仕組みを理解しやすいと思います。
方法
空白行を詰めずに、重複抽出する方法を解説します。
成功するとこんな感じになります。
エクセルの重複抽出したいデータがA列にあるとします。
関数を入力して、重複抽出する列をB列とします

セルB2に、下記の関数をコピペします。(下部ブロックの右上で全部コピーできます。)
=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,A2,""))
セルB2から下にオートフィルすると、エクセルで重複抽出できます。
冒頭でも説明した通り、使用頻度は、ほぼ無くて実用性もありません。
ですので、重複抽出の仕組みを何となく理解できたら
次の「空白を詰めて、重複抽出」をご覧ください。
自信のある方は、次の空白詰めして、重複抽出する方法を読んでも理解できると思います。
テンプレート(コピペ用)
下記のテキストをエクセルのA1にコピペすると、上記のサンプル画像のように
Excelで空白を詰めずに、重複抽出ができます。
データ 重複抽出
田中 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,A2,""))
佐藤 =IF(A3="","",IF(COUNTIF(A$2:A3,A3)=1,A3,""))
田中 =IF(A4="","",IF(COUNTIF(A$2:A4,A4)=1,A4,""))
伊藤 =IF(A5="","",IF(COUNTIF(A$2:A5,A5)=1,A5,""))
足立 =IF(A6="","",IF(COUNTIF(A$2:A6,A6)=1,A6,""))
桜井 =IF(A7="","",IF(COUNTIF(A$2:A7,A7)=1,A7,""))
松本 =IF(A8="","",IF(COUNTIF(A$2:A8,A8)=1,A8,""))
桜井 =IF(A9="","",IF(COUNTIF(A$2:A9,A9)=1,A9,""))
松本 =IF(A10="","",IF(COUNTIF(A$2:A10,A10)=1,A10,""))
佐藤 =IF(A11="","",IF(COUNTIF(A$2:A11,A11)=1,A11,""))
田中 =IF(A12="","",IF(COUNTIF(A$2:A12,A12)=1,A12,""))
伊藤 =IF(A13="","",IF(COUNTIF(A$2:A13,A13)=1,A13,""))
足立 =IF(A14="","",IF(COUNTIF(A$2:A14,A14)=1,A14,""))
大野 =IF(A15="","",IF(COUNTIF(A$2:A15,A15)=1,A15,""))
・空白を詰めて、重複抽出(作業列有り)
説明
こちらの方法を使用すれば、初心者は、まず安心でしょう。
空白行を詰めて、重複抽出する方法は、1つ列が増えます。
いわゆる関数の作業列というやつです。
重複を抽出する列と空白行を詰めて表示する列が必要になります・
作業列とは、関数の処理で、必ず必要な行になります。
今回を例にすると、重複を抽出する列が作業列になります。
方法
エクセルの重複抽出したいデータがA列にあるとします。
関数を入力する、作業列をB列
重複抽出する列をC列とします。

セルB2に、下記の関数をコピペします。
=IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,ROW($A2),""))
セルC2に、下記の関数をコピペします。
=IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A1))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A1)))))
B2列とC2列から下にオートフィルすると、上部、画像のようになり
関数のみで空白が無い状態の重複抽出ができます。
テンプレート(コピペ用)
下記のテキストをエクセルのA1にコピペすると、上記のサンプル画像のように
Excelで空白を詰めて、重複抽出ができます。
データ 作業列 重複抽出
田中 =IF(A2="","",IF(COUNTIF(A$2:A2,A2)=1,ROW($A2),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A1))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A1)))))
佐藤 =IF(A3="","",IF(COUNTIF(A$2:A3,A3)=1,ROW($A3),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A2))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A2)))))
田中 =IF(A4="","",IF(COUNTIF(A$2:A4,A4)=1,ROW($A4),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A3))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A3)))))
伊藤 =IF(A5="","",IF(COUNTIF(A$2:A5,A5)=1,ROW($A5),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A4))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A4)))))
足立 =IF(A6="","",IF(COUNTIF(A$2:A6,A6)=1,ROW($A6),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A5))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A5)))))
桜井 =IF(A7="","",IF(COUNTIF(A$2:A7,A7)=1,ROW($A7),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A6))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A6)))))
松本 =IF(A8="","",IF(COUNTIF(A$2:A8,A8)=1,ROW($A8),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A7))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A7)))))
桜井 =IF(A9="","",IF(COUNTIF(A$2:A9,A9)=1,ROW($A9),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A8))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A8)))))
松本 =IF(A10="","",IF(COUNTIF(A$2:A10,A10)=1,ROW($A10),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A9))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A9)))))
佐藤 =IF(A11="","",IF(COUNTIF(A$2:A11,A11)=1,ROW($A11),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A10))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A10)))))
田中 =IF(A12="","",IF(COUNTIF(A$2:A12,A12)=1,ROW($A12),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A11))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A11)))))
伊藤 =IF(A13="","",IF(COUNTIF(A$2:A13,A13)=1,ROW($A13),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A12))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A12)))))
足立 =IF(A14="","",IF(COUNTIF(A$2:A14,A14)=1,ROW($A14),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A13))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A13)))))
大野 =IF(A15="","",IF(COUNTIF(A$2:A15,A15)=1,ROW($A15),"")) =IF(ISERROR(INDEX($A:$A,(SMALL($B:$B,ROW($A14))))),"",INDEX($A:$A,(SMALL($B:$B,ROW($A14)))))
関数の処理詳細
空白を詰めて、重複抽出処理している関数の詳細を解説します。
B列で重複抽出し、C列で空白を詰めて表示しています。
空白行を無くす関数
B列では空白行を無くす関数の処理をしています。
空白行を無くす関数は、「COUNTIF」関数を使用して、現在の行と同行のA列の値が
「A1」から同行のA列までの個数が1個かどうか判断しています。
個数が1個の場合は、現在の行を表示し、2個以上の場合は空白としています。
例えば、関数が「B5」に入力されている場合だと
「A5」の値が「A1」から「A5」までに1個の場合は、「5」と表示して、2個以上の場合は「空白」とします。
サンプル画像のデータだと、「A5」の値の「足立」は
「A1」から「A5」までに1個なので、「B5」に「5」と表示しています。
重複抽出する関数
C列では、重複抽出する関数の処理をしています。
重複抽出する関数の処理は
「SMALL」関数を使用して、B列で数値が低い順に行番号を取得しています。
そして「INDEX」関数を使用して、その行番号のA列の値を表示します。
これが空白を詰めて、重複抽出ができる関数の処理の仕組みです。
例えば、関数が「C5」に入力されている場合だと
「SMALL」関数によって、4番目に低い値を取得します。
なので、B列の4番目に低い値「6」を取得し、「A6」の値を表示する感じになります。
・「配列数式」で空白を詰めて、重複抽出(作業列無し)
説明
こちらの方法で重複抽出するのは、上級者向けの方法となります。
「配列数式」というものを使えば、作業列が無くても、空白を詰めて、重複抽出をできます。
ですが、動作がかなり重いので、初心者の方はオススメできません。
方法
エクセルの重複抽出したいデータがA列にあるとします。
重複抽出する列をB列とします。

セルB2に、下記の関数をコピペします。
=A1
セルB3に、下記の関数をコピーだけします。
注意点があるので、貼り付けは待ってください。
=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B2,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")
セルB3を必ずダブルクリックしてから、貼り付けします。
その後はEnterキーだけ押さずに
「Ctrl + Shift + Enter」キー同時押しをしてください。
そうすることにより、配列数式となります。
あとは、セルB3から下に必要な分だけオートフィルしてください。
多いと、重くなりますので、100行以下をオススメします。
関数も100行以下しか、重複抽出しませんので「100」の箇所を増やしてください。
「B1」だけ違う数式となります。
テンプレート(コピペ用)
下記のテキストをエクセルのA1にコピペすると、上記のサンプル画像のように
Excelで空白を詰めて、重複抽出ができます。
データ 重複抽出
田中 =A2
佐藤 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B2,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
田中 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B3,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
伊藤 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B4,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
足立 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B5,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
桜井 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B6,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
松本 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B7,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
桜井 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B8,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
松本 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B9,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
佐藤 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B10,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
田中 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B11,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
伊藤 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B12,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
足立 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B13,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
大野 {=IFERROR(VLOOKUP("*",IF(COUNTIF(B$2:B14,$A$2:$A$100)=0,$A$2:$A$100,FALSE),1,FALSE),"")}
◆まとめ
Excelの関数だけで、重複抽出と空白詰めする方法は理解できましたでしょうか。
これを読んでも解決できない方、なにか不明点がある場合は
コメントして頂くか、こちらからお問い合わせしてください。