• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの数式で、COUNTIF(A1:A100,">""") )

エクセルの数式で文字列をカウントする方法

このQ&Aのポイント
  • エクセルの数式を使って特定の範囲内の文字列の数をカウントする方法について説明します。
  • COUNTIF関数を使用すると、セル内の計算結果が文字列の場合にその数を調べることができます。
  • 大きな文字列や空白セル以外の文字列の数を数えることができますが、文字列の大小比較はできないため注意が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

#1 の回答前半部は、   ”文字列と文字列”の比較に">"や"<"が使えるか? についてのコメントです。結論として #1 で説明したとおり”使えます。”   ・論理式("A" > "B")  --> False   ・論理式("A" < "B")  --> True   ・論理式("A" > "")  --> True   ・論理式("1" > "A")  --> False (文字列の数字と文字列) ところで、Excel のワークシート上ではユーザーの利便性のため、本来 型不一致でエラーとなるはずの論理式(1 > "A") で False が返ります。(数値と文字列) このおかげで、ユーザーはデータ型について普段意識せずに済むわけ ですが、これはイレギュラーで、True にならないなら False 、、と単純 に評価しているに過ぎません。本来プログラムの世界では、   ・論理式(1 > "A")   --> 型不一致でエラー で比較不能です。比較する以前にエラーになってしまいます。ここで、 COUNTIF 関数も当然プログラムが提供している機能だということに注目 して下さい。 > ... =COUNTIF(A1:A100,">""") でなぜ数値は除外されるのでしょうか? 数値がカウント除外されているのは、COUNTIF 関数が "" を長さ 0 の 文字列と解釈しているのであれば、文字列と数値の比較のように比較不能 でエラーとなる場合には、カウントしないように実装されているから だと思います。 =COUNTIF(A1:A100,">""") =COUNTIF(A1:A100,">=""") この両者がなぜ同じ結果を返すかについては、=COUNTIF(A1:A100,"ABC") で ABC と入力されたセル数を返すところを見る限り、文字列の場合は、 イコールを書かなくても補完されるようです。 そのため、イコールは書いても書かなくても結果が同一になるのでしょう。 COUNTIF 関数の第 2 引数である条件部は、文字列で指定します。 内部的にどのように処理されているか正確なところは、COUNTIF 関数の 作成者にしか分からないのですが、比較を行うためには、この文字列で 渡された条件部を論理式に展開する必要があります。 その過程で、数値化できないものは文字列として扱う、としているよう ですね。 したがって、 > =COUNTA(A1:A100)-COUNT(A1:A100) は、次のように書いても OK みたいです。 =COUNTIF(A1:A100,"=*") ... イコールはあってもなくてもOK 以下は文字列以外のセルです。ブランクセル+文字列以外のデータがあるセル =COUNTIF(A1:A10,"<>*") > =SUMPRODUCT((A1:A100>="")*1)ですと、式が入っていない空白セルも > カウントするようです。 すみません。これだとブランクセルを含めてしまいますね。その通りです。

OASIS33
質問者

お礼

くわしいご説明、ありがとうございました。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

【ご質問 前半】 > 文字列は数字とちがい大小はないのではないでしょうか? 確かにそうですね。数値的な大小はありません。ただし、コンピューターは その仕組上、数値であれ文字列であれビットデータ(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 さんが想像したとおり の結果になります。

OASIS33
質問者

お礼

さっそくありがとうございました。 コンピューターはビットで比較しているのなら、=COUNTIF(A1:A100,">""")  でなぜ数値は除外されるのでしょうか?不思議です。 あと、=SUMPRODUCT((A1:A100>="")*1)ですと、式が入っていない空白セルもカウントするようです。 =COUNTA(A1:A100)-COUNT(A1:A100)で、""を含めた文字列をカウントできました。

関連するQ&A

専門家に質問してみよう