(Gスプレッドシート)UNIQUE関数の結果から空白を除く方法

 GoogleスプレッドシートでUNIQUE関数を使ってデータの重複を除くときに、空白(空白セルや空文字列)を除外して値があるセルや行だけを取得する方法についてです。

データが1列の場合

FILTER関数を使う方法

 次の画像では、UNIQUE関数とFILTER関数を併用することで、B列のデータから重複を除くとともに空白を除外した結果を得ています。

 D3セル

=UNIQUE(FILTER(B3:B9,B3:B9<>""))

 FILTER関数を使ってB3:B9の範囲から空白を除き、それをUNIQUE関数の引数とすることでUNIQUE関数の結果から空白を除いています。

TOCOL関数を使う方法

 次の画像ではTOCOL関数を併用して空白セルを除いています。
 ただしこちらの方法では空文字列(「=""」や「'」)は除外されません。

 D3セル

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

 TOCOL関数の本来の機能はデータを縦1列に並べ替えることですが、第2引数を「1」とすることで空白セルを除外することができます。
 これを利用してUNIQUE関数の結果から空白セルを除いています。



 上記のとおり、TOCOL関数で除外できるのは純粋な空白セル(未入力状態)だけで、空文字列は除かれません。
 TOCOLの方が式を簡単にできますが、実用的にはFILTER関数の方を選択する場合が多いかと思います。

 ちなみに「=UNIQUE(FILTER(B3:B9,ISBLANK(B3:B9)=FALSE))」などとすればFILTER関数でも空白セル(未入力)のみ除外することは可能です。

データが複数列の場合

 2列以上のデータを対象とする例です。重複行を除いたうえですべての列が空白の行を除く方法と、セル単位で値の重複を除いたうえで空白を除く方法をそれぞれ紹介します。


 まずは行単位で重複を除く例です。
 次の画像ではFILTER関数を使い、B列とC列の両方の列が空白である行を除くとともに、UNIQUE関数により両方の列が重複する行の重複を除いています(具体的には「冷やし中華、カレー」の行)。

 E3セル

=UNIQUE(FILTER(B3:C9,B3:B9&C3:C9<>""))

 データが3列以上の場合でも同じように&でつないでいけばOKです。



 続いてセル単位で重複を除く例です。
 データの内容が上の例とは異なることに注意してください

 E3セル

=UNIQUE(FILTER(TOCOL(B3:C9),TOCOL(B3:C9)<>""))

 
 TOCOL関数を使ってデータを縦1列に並べ直し、そこからFILTER関数で空白を除いています。最後にUNIQUE関数で値の重複を除いています。



 TOCOL関数は(特に指定しない場合)上の行から順に値を取得するため、1つ上の例では上の行からみた初出順で値が表示されています。
 そこで次の画像ではこれを変更し、左の列からみた初出順で値が表示されるようにしています。

 E3セル

=UNIQUE(FILTER(TOCOL(B3:C9,,TRUE),TOCOL(B3:C9,,TRUE)<>""))

 TOCOL関数の第3引数を「TRUE」とすることで左側の列から順に値を取得するようにしています(既定値はFALSEで、このとき上の行から順に取得)。
 結果的にB列にて初めて現れる値(ラーメンや冷やし中華など)が先に、C列にて初めて現れる値(そばや担々麺)が後に表示されます。