Excel 自動重複削除を関数で考えてみた


制作環境

Windows 10
WPS Office

はじめに

エクセルにそう詳しい訳ではないので、素人のメモ程度に見てください。
Office 365であればUNIQUE 関数でやりたい事ができるのですが、職場がOffice 2019でUNIQUE 関数が使えないので、使える関数だけでできないか考えて見ました。
ネットで色々検索しましたが、やりたい事について書かれたサイトを見つけられなかったので、ここに残します。
データの重複削除でもやりたい事はできますが、都度手動で削除するのが非効率だったので、自動でできるようにしました。

完成画像

今回の要件

日付のリストの中から、重複を削除して日付の値を取り出します。
例えば発送日の一覧から、発送日毎にデータを分ける時等に使えるデータを作成します。
もちろん一覧の値が変われば、抽出結果も自動で変わります。

準備

適当なサンプルデータの作成をします。
以下のような日付のリストを作成しました。
もちろん日付は重複させます。

処理①

それでは実際に処理をしていきます。
まず日付の中から、重複する日付が最初(1番目)に出てくる箇所を見つけます。

B2セルに以下の関数を記述し、表の一番下まで関数をコピーします。
※コピーの仕方についてはここでは記述しません。ネットで簡単に検索できるのでそちらで調べてください。

=IF(COUNTIF($C$1:C2,C2)=1,1,"")

COUNTIFでC列の値が出てくる回数を出します。
その時、必要なのは最初に出てくる値だけなので、結果の値が1以外は空白を返すようにします。

結果画像

処理②

処理①で出した結果に連番を付けます。

A2セルに以下の関数を記述し、表の一番下まで関数をコピーします。

=IF(B2="","",COUNTIF($B$1:B2,B2))

結果画像

B2の値が空白の箇所は必要ないので、空白を返すようにします。
それ以外はCOUNTIFの値を返し、連番を作成します。

処理③

右側に新しく表を作成し、そこに抽出結果を表示させます。
抽出にはVLOOKUPを使用する為、検索用の値をまず作成します。

表の作成

検索は処理2の連番を使用しますので、E2に以下の関数を記述します。

=IF(ROW()-1<=COUNT($A$2:$A$9),ROW()-1,"")

検索用の値はROW()関数で作成します。
その際必要な数だけ作成したいので、COUNT関数で作成回数の条件を付けます。
条件に当てはまらなければ空白を返します。

結果画像

最終処理

あとはVLOOKUPで値を抽出結果に表示させるだけです。

F2セルに以下の関数を記述し、表の一番下までコピーします。

=IF(E2="","",VLOOKUP(E2,$A$2:$C$9,3,0))

完成結果

以上で完成です。

エクセルに詳しければもっといいやり方があるかもしれません。