いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)重複データを削除して残さない方法

 Excelで、データのうち重複するもの(2つ以上あるもの)は1つも残さず完全に削除し、もともと1つだけ存在するデータだけを残す方法についてです。

UNIQUE関数を使う方法

 次の画像ではD3セルに数式を入力し、B3:B11セルの値のうち重複するもの(2つ以上あるもの。ここでは「りんご」「もも」「いちご」)を完全に削除し、もともと1つだけあるものを残した結果を得ています。

 D3セル

=UNIQUE(B3:B11,FALSE,TRUE)

 値の重複を除くUNIQUE関数を使いますが、第3引数(回数指定)をTRUEにしているのがポイントです。これにより重複データは完全に削除され、1つだけある値だけが残ります。この引数を省略するかFALSEを指定すると、重複データを1つずつ残した結果が得られます。
 なお第2引数(列の比較)はTRUEにすると列の重複を除いた結果が、FALSEにすると行の重複を除いた結果が得られます。FALSEの場合は省略可能なので、ここでは「=UNIQUE(B3:B11,,TRUE)」としても同じ結果となります。



 次の画像は複数列のデータを指定した例です。
 この場合、複数列の全体で重複するかどうかが判定されますので、「りんご」「青森県」の行と「もも」「福島県」の行が残らず削除されます。「りんご」「長野県」の行は重複しないものとみなされ、残ります。

 E3セル

=UNIQUE(B3:C11,FALSE,TRUE)

 


 複数列に値が並んでいるが1つ1つのセル単位で重複を判定して除きたい、という場合は、TOCOL関数を使って値を縦1列に並べ直したうえでUNIQUE関数を適用するのが1つの方法です

 F3セル

=UNIQUE(TOCOL(B3:D5),FALSE,TRUE)

 


 飛び飛びの範囲を対象にしたい場合は、離れた複数範囲を縦に積み重ねることができるVSTACK関数を使う方法が考えられます。

 F3セル

=UNIQUE(VSTACK(B3:B5,C6:C8,D3:D5),FALSE,TRUE)

 VSTACK関数によりB3:B5,C6:C8,D3:D5の3つの範囲を縦に積み重ねた結果を取得し、UNIQUE関数の対象としているので、アルファベットのセルは抽出されません。

フィルタを使う方法

 UNIQUE関数を使わない場合の例です。
 「重複の削除」メニューだと重複データも1つずつ残ってしまうので、フィルタを使ってやってみます。
 まずはC3セルに次の式を入力してC11セルまでフィルコピーし、各行の値がそれぞれ何個ずつあるかカウントします。

 C3セル(下方にフィルコピー)

=COUNTIF(B$3:B$11,B3)

 絶対参照($)を使うのがポイントです。これにより下方にフィルコピーしても第1引数(カウントする範囲)は「B$3:B$11」のままで変わりません。結果的に、各行の値がB3:B11の範囲にそれぞれいくつあるのかカウントできます。
 


 表の範囲(B,C列)を選択し、データタブにある「フィルタ」をクリックします。
 なお表内の1つのセル(B3セルとかC9セルとか)を選択した状態でメニューを選択してもOKです。

 


 表の先頭行に▼のボタンが表示されます。

 

 ボタンのうちC列のものをクリックします。
 詳細設定が現れますので、下部にあるチェックボックスのうち「1」のチェックだけを残したうえでOKボタンをクリックします。

 


 するとC列の値が「1」である行が、つまり重複していない行だけが残ります。
 フィルタですので他の行は非表示状態になっているだけで、再表示が可能です。

 


 複数列の全体で重複を判定する場合は、COUNTIFS関数を使用して重複行をカウントします。

 D3セル(下方にフィルコピー)

=COUNTIFS(B$3:B$11,B3,C$3:C$11,C3)

 COUNTIFS関数はAND条件で値をカウントする関数です。
 絶対参照を使ってカウントする範囲(B3:B11及びC3:C11)を固定するのは上記の例と同じです。



 あとは上記と同様の操作で重複データを非表示にすることができます。