Excelの空白セルと空文字列

「空のセル」

Excelにおいて空のセルをどう処理すれば良いのかというのは難しい問題である。そもそも「空のセル」と言った場合に、それがそもそも何を意味しているのかという点からして問題がある。
見た目が空白になるセルの例として、代表的なものは以下の3つだろう。

  1. 何も入力されていない空白セルである。
  2. 空文字列「""」が入っている。
  3. 半角or全角スペースが入力されている。

スペースはただの文字列なので、厄介なのは上の二つである。
空文字列は生成の方法によっては空白セルと見た目で区別ができなくなる。例えば「=IF(TRUE,"")」というように空文字列を生成する関数の結果を値としてコピペすると空白セルと見分けの付かない空文字列が完成する。IF関数の返り値を空文字列にするような作業はしばしば発生するので、見分けの付かない空文字列が発生する危険性は結構高い。
ちなみに、そもそも返り値が必要ない場面では空文字列も返さない処理をすれば良いと考えるところだが、Excelには空白セルに該当する値を返す方法が無い。要するに、他のプログラミング言語で言うところのnull、nil、Noneに該当するような何かが存在しない。存在しないにもかかわらず、空白セルはそのように振る舞うのである。

空のセルをどう判別するか

いくつかの方法がある。

  • 手動で:Ctrl+上下左右によるカーソルのジャンプを利用すると、空文字列の入ったセルは「引っかかる」ので判別ができる。
  • LEN関数:空白セル、空文字列共に0が返る。
  • IF(x="", TRUE):空文字列を判別しているように見えるが、空白セル、空文字列共にTRUEである。
  • ISBLANK(x):空白セルのみがTRUEであり、空文字列はFALSEになる。
  • COUNTBLANK(x):ISBLANKのCOUNTバージョンかと思ったら大間違いで、空白セルも空文字列も1としてカウントする。

実際に実行するとこんな感じになる。
%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202014/10/05%2021:56
ついでに空のセルの値を参照した結果を示したが、ここにまた別の問題が現れていることに気づくだろう。
空文字列を参照すると空文字列が返ってくるが、空白セルを参照すると空白セルではなく0が返ってくるのである。関数の引数を省略すると0が補われるが(例:=IF(TRUE,)→0)、なんかその辺の関係だろうと思う。空白セルの参照結果として出ている0は別に特別な0ではなくて、本当に0である。よって、空白セルを参照したセルに対して空白セルの判定をすれば普通に0が入力されていた場合と同じ反応が返ってくる。そんな場合があるのかという話だが、例えば参照によって領域のコピーを作るという場合はしばしばある。空白セルはちょっとしたことで0に変化する可能性があるということを意識しておかなければならない。
一方で、空文字列を参照した結果は空文字列なので、参照結果に対する判定は元の空文字列と変わらない。
とにかくこのあたりの処理は間違いに繋がりやすいので注意が必要である。