ニュース | 2008/07/24
○何が問題か
Excelで空白セルを返す式は、セルに代入される時点(つまり、"="が適用される時点)でゼロに変換されます。
たとえば、A1が空白セルとして、=A1とすると、0と表示されます。
ただし、ここで重要なのは、「セルに代入される時点」ということです。このため、A1が空白セルのとき、=ISBLANK(IF(TRUE, A1, ""))はTRUEになります。
○一般的な解決方法(IF関数を利用)
これに対してよく使われるのは、IF関数を使って、空白セルを空白文字列("")で置き換えるということです。○を数式として、
=IF(ISBLANK(○), "", ○)
=IF(○="", "", ○)
とすれば、めでたく何も表示されなくなります。この方法は、以下のサイトでも紹介されています。
http://www.relief.jp/itnote/archives/001357.php
(ちなみに上の二つの数式は完全に同じ結果になります。実は、ISBlANK("○")と○=""は同じ結果になりません。○が空白セルではなく、空白文字列の場合、ISBLANK("○")はFALSEになりますが、○=""はTRUEになるからです。上の数式の場合、一つ目ではIFの条件式がFALSEになり、二つ目ではIFの条件式がTRUEになります。しかし、IFの結果はどちらも空白文字列です。)
○IF関数の問題
ただ、この方法では、○の数式が複雑で計算に時間がかかる数式である場合、計算時間が2倍必要になってしまいます。また、式が複雑になり、メンテナンスの手間が増えます。
さらに、結果が空白文字列というのも大変扱いづらいものです。というのも、空白文字列は空白セルと異なり、数値として扱うことができません。たとえば、空白セルを指すセル参照に1を加えると1になりますが、空白文字列が入ったセルを指すセル参照に1を加えるとエラーになるのです。これを解決するには「空白文字列だった場合は、0に変換する」という処理を入れる必要があるので大変面倒です。
(ちなみに、空白文字列を0に変換するためには、IF(○="",0,○")とするより、SUM("○")とした方が簡単です。ただし、この場合、空白文字列以外の文字列でもエラーにならないので注意が必要です。)
○エレガントな解決方法(表示形式を利用)
そこで便利なのが、そのまま「ゼロ」をセルに代入した上で、表示形式の設定で、0だったら表示しないとする方法です。このためには、表示形式をユーザ定義にして、[=0]""とするだけです。
この方法のメリットは作業が簡単でわかりやすいのに加え、このセルは計算上「ゼロ」として扱われるという点です。このため、このセルをそのまま数値として計算に使うことができます。
ただし、この方法は、ゼロと空白セルを区別する必要がある場合には使えません。普通にゼロと表示したいセルまで何も表示されなくなってしまうからです。この場合はやはりIF関数を使う方法しかないと思います。
○付録
さて、一般に、表示形式の設定では、以下のような場合分けをすることができます。今回使ったのは最後のものですが、他の書式と組み合わせる場合は、他のパターンを使わないといけない場合もあります。ネットで検索しても見つからなかったので、まとめておきます。
表示形式 | 条件 | 正の数 | 負の数 | ゼロ | 数値以外 |
a; "b"; "c"; "d" | a | b | c | d | |
a; "b"; "c" | a | b | c | 標準 | |
a; "b" | a | b | a | 標準 | |
a | a | -a | a | 標準 | |
[条件]"x"; "a, "b", "c" | x | b | a | b | c |
[条件]"x"; "a, "b" | x | b | a | b | 標準 |
[条件]"x"; "a | x | a | -a | a | 標準 |
[条件]"x" | x | 標準 | 標準 | 標準 | 標準 |
[=0]"x"; "a, "b", "c" | b | a | x | c | |
[=0]"x"; "a, "b" | b | a | x | 標準 | |
[=0]"x"; "a | a | -a | x | 標準 | |
[=0]"x" | 標準 | 標準 | x | 標準 |
[=0]は通常の条件と同じ扱いですが、参考までに掲載しました。また、条件は2つまで指定することもでき、どの条件にも当てはまらなかった場合を、その後に指定します。条件を指定する場合は、それ以降の条件で正の値とゼロの値を区別できません。
固定リンク | コメント(0件) | トラックバック(0件)
エジプト報道で、朝日と毎日がすごい件
に対する
情報学ブログさんのコメント
硫化水素自殺って楽に死ねるんだろうか?
に対する
真実さんのコメント
大学に市場原理を導入する方法
に対する
北風mk-2さんのコメント
八百長力士を処分するべきなのか?
(2011/02/05)
ロシア大使更迭経緯の流出は誰のリークか?
(2010/12/24)
大学に市場原理を導入する方法
(2010/12/23)
サンデルの政治哲学と日本の戦争責任問題
(2010/12/12)
負の所得税としての子ども手当
(2010/12/11)