いきなり答える備忘録

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

(Excel)UNIQUE関数で空白セルが0にならないようにする

 ExcelでUNIQUE関数の対象に空白セルがあると「0」として出力されてしまいますが、これを空文字列(="")にする方法についてです。空文字列に限らず任意の値に変換することができます。
 併せて、そもそも空白セルを削除してしまう方法にも触れておきます。

  • UNIQUE関数の第1引数内で空白セルを空文字列に変換しておけば、「0」ではなく空文字列を出力させることができます。
  • 数値や日付も文字列にならずそのまま出力できます(日付はセルの表示形式の設定が必要)。

手順

 まずは空白セルが0になる現象の確認です。
 次の画像ではB3:B10の範囲に対しUNIQUE関数を適用して重複を除いていますが、空白セル(B6セル)がそのままではなく「0」として出力されています。

 XLOOKUP関数などにも共通する結果ですが、目障りなだけでなく最初から「0」だったセルと区別がつかなくなるのが厄介です(ちなみに空白セルと「0」が混在する場合は「0」が2つ出力されます)。



 そこで次のような式に変えることで、「0」の代わりに空文字列(長さ0の文字列)として出力させることができました。

 D3セル

=UNIQUE(IF(B3:B10="","",B3:B10))

 UNIQUE関数の第1引数を「IF(B3:B10="","",B3:B10)」とすることで、空白セル(値がないセル)を空文字列に変換しています。これにより空白セルが「0」に変換される現象が起こらず空文字列として出力されます。



 このやり方のメリットは数値や日付をそのまま出力できることです。
 他のやり方としてはUNIQUE関数の後ろに「&""」をくっつけるという方法もあるのですが、それだと数値や日付が数字の文字列になってしまいます。
 しかしこちらのやり方ならそのようなことは起きません(ただし日付についてはセルの表示形式を日付に設定する必要があります)。



 こちらは複数列のデータに適用した例です。
 複数列データで「0」が出力されるととても見づらいものになりますが、適切に重複が除かれて期待通りの結果となっています。


 同じく複数例のデータでも、セル単位(1つ1つの値)で重複を除く場合は次のようになります。

 E3セル

=UNIQUE(TOCOL(IF(B3:C10="","",B3:C10)))

 TOCOL関数は「複数行のデータを縦1列に並べ直す」という関数です。これを併用してデータがもともと縦1列であるかのような結果を得ています。

空白セルを削除する場合

 そもそも空白セルは削除してしまいたい、という場合はFILTER関数などを併用すればOKです。
 次の画像ではTOCOL関数を利用して空白セルを除いたうえでUNIQUE関数を適用しています。

 セル

=UNIQUE(TOCOL(B3:B10,1))

 TOCOL関数の第2引数を「1」とすることで空白セルを削除することができます。もともと1列だけのデータから空白セルを除く場合にも利用でき、FILTER関数より式を短くできて便利です(ただし空文字列(="")は除けません)。
 当然ながら複数列を対象にした場合は1列に並べ直されるため(上記で見たように)セル単位で重複が除かれますので、そうしたくない場合(及び空文字列も除きたい場合)はFILTER関数を使って行を除くこととなります。