質問: エクセルの数式で、countif(a1:a100,">""") http://oshiete1.goo.ne.jp/kotaeru.php3?q=2224824 の関連質問です。 表a1:a100にある、各セル内の数式で求められた計算結果が文字列の場合、その数を調べるには、 =countif(a1:a100,">""") で、各セルの計算式の答えが "" 以外の文字列の数を返してくれるようです。(数値や空白セルはカウントされません。) 非常に便利なのですが、ちょっと腑に落ちないのは、 >"" って、""より大きいということですよね? しかし文字列は数字とちがい大小はないのではないでしょうか? もう一点疑問です。 ためしに、=countif(a1:a100,">=""") としてみました。 今度は、 >="" ですから、""も含むということになるはずですよね? ところが答えが "" となるものをカウントしません。 不思議でたまりません。 よろしくお願いします。
回答: 【ご質問 前半】 > 文字列は数字とちがい大小はないのではないでしょうか? 確かにそうですね。数値的な大小はありません。ただし、コンピューターは その仕組上、数値であれ文字列であれビットデータ(1と0の集合)として 扱います。したがって、ビット単位で比較できます。 "" は長さ 0 の文字列ですね。完全に無ではなく、”文字がない”という ビットデータが存在します。unicode は横に置いておくと、 1文字=1バイト=8ビット です。 ・a (文字コード 65)・・・ ビット(2進数)で表すと 01000001 ・"" ・・・ ビット(2進数)で表すと 00000000 なので、 01000001 > 00000000 、従って、論理式の結果としては true です。 このように、コンピューター(プログラム)はビットで計算(比較)しています。 【ご質問 後半】 > ためしに、=countif(a1:a100,">=""") としてみました。.... それは countif 関数が内部でどのような判定を行っているかに係る問題だと 思います。比較のための不等号を文字列で渡しているわけですから、内部で それをどのように論理式に展開するか? の方法次第ということです。 この辺はブラックボックスですから、内部の仕組みを知る術がありませんが、 たまたま”うまくいった”と考えるべきでしょう。 この用途なら、より単純な仕組み(演算の過程が明確な)である次の数式の方 が良いと思いますよ。 = sumproduct((a1:a100<>"")*1) ここで、= sumproduct((a1:a100>="")*1) とすれば、oasis33 さんが想像したとおり の結果になります。