• ベストアンサー
  • 暇なときにでも

エクセルの数式で、COUNTIF(A1:A100,">""") 

http://oshiete1.goo.ne.jp/kotaeru.php3?q=2224824 の関連質問です。 表A1:A100にある、各セル内の数式で求められた計算結果が文字列の場合、その数を調べるには、 =COUNTIF(A1:A100,">""") で、各セルの計算式の答えが "" 以外の文字列の数を返してくれるようです。(数値や空白セルはカウントされません。) 非常に便利なのですが、ちょっと腑に落ちないのは、  >""  って、""より大きいということですよね? しかし文字列は数字とちがい大小はないのではないでしょうか? もう一点疑問です。 ためしに、=COUNTIF(A1:A100,">=""")  としてみました。 今度は、  >=""  ですから、""も含むということになるはずですよね? ところが答えが  ""  となるものをカウントしません。 不思議でたまりません。 よろしくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1938
  • ありがとう数4

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

  • ベストアンサー
  • 回答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)ですと、式が入っていない空白セルも > カウントするようです。 すみません。これだとブランクセルを含めてしまいますね。その通りです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • エクセルのCOUNTIFで

    エクセルのカウント方法について教えてください。 A1~A100のセルに式が入っていて、条件により答えが表示される場合とされない場合(="")があります。 答えは文字列です。 A1~A100のなかに答えが表示されているセルの数を求めるにはどういう式にすればいいのでしょうか? COUNTA(A1:A100)では100となってしまいますので、COUNTIFだとは思うのですが・・・・。

  • COUNTIFで空白表示以外のセル数を取得

    エクセル2010です。 セル範囲A1:A10にはすべて数式が入っています。 計算の結果はすべて文字列が返ります。 その中には、="" で空白に表示されたセルもあります。 セル範囲A1:A10で空白に表示されたセルの数は =COUNTBLANK($A$1:$A$10) で求められます。 空白でないセルの数を求める場合 =COUNTA($A$1:$A$10) では、="" も数式が入っているためすべてカウントされ使えません。 やむを得ず、 =SUMPRODUCT(($A$1:$A$10<>"")*1) や =ROWS($A$1:$A$10)-COUNTBLANK($A$1:$A$10) でしのぎました。 これを、COUNTIFで求めることはできないでしょうか? =COUNTIF($A$1:$A$10,"<>""") とやってみましたが、これも全セル数を返すようです。

  • COUNTIFを使って文字を抽出したい

      A 1 ビタミン   カルシウム 2 ビタミン 3 鉄 4 ビタミン 5 マグネシウム というようにA1のセルには二行にわたって文字が入力されています。 このA列で、「ビタミン」を含むセルはどのようにカウントするのですか? COUNTIFで「=COUNTIF(A1:A5,"ビタミン")」とすると、2 となってしまいます。この列に含まれるビタミンの数、つまり3と計算させる関数を教えてください。 よろしくお願いします。

その他の回答 (1)

  • 回答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 さんが想像したとおり の結果になります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • COUNTIFで特定の文字列を含む値のカウント方法

    Excel2010を使っている者です。 COUNTIF関数で特定の文字列を含むセルの数をカウントしたいのですが、結果がゼロになってしまいます。 具体的には A列の1行目から900行目までに以下のように番号が振ってあって、その中で1994を含むセルの数を数えようと思っています。 計算式として「=COUNTIF($A$1:$A$900,"1994")」と入力したのですが、戻り値が0になってしまいます。 なお、A列は数値にしても文字列にしても結果は変わらず、「=COUNTIF($A$1:$A$900,"1994*")」とワイルドカードを使った検索にしても同じく0になってしまいます。 1994000001 1994000002 1994000005 &#65374; 2009111112 2009111117 もう一つ関連した質問をさせていただきますが、そもそもこの関数で特定の文字列を含む検索をかけたいときは、ワイルドカードの*を使わないとうまく計算できないものなのですか? よろしくお願いいたします。

  • Excel COUNTIF関数

    お世話になります。 countif関数について教えてください。 12345 12345A countif関数で、ワイルドカードを使用して、=countif(A:A,"12345*") とし、上記の12345で始まる文字列をカウントしようとしたのですが、 12345Aはカウントされ、12345はカウントされませんでした。 上記のような文字列を両方ともカウントさせるにはどうしたらいい でしょうか。 よろしくお願いします。

  • エクセルでセルをカウントしたい!

    エクセルを使ってある言葉が出てくるセルの数をカウントしたいと 思っています。 たとえば一つのセル、 Aの1に「言葉の数を数えます。」 と文字がはいっていたとして、 これを=COUNTIF(A1:A1,"*数*")とすれば、 出てきた個数ではなく、セルの数として 「1」と返ってくると思います。 これを応用して、 Aの1に「数」と入力されていて、 Bの1に「言葉の数を数えます。」が入っていて、 =COUNTIF(B1:B1,"*数*")で数えるのではなく、 =COUNTIF(B1:B1,"*A1*")としてAの1の文字を 認識させてセルの数をカウントしたいんです。 しかしこれではエラーがでるし、 だからといって =COUNTIF(B1:B1,A1)では0になってしまいます。 どのようにすればA1の文字を参照させセルの数を カウントすることができるでしょうか?

  • Excelで数式中に他セルの値

    Excelで数式について、他のセルに書いてある数字を文字列として代入したいのですが、 どうすればよいでしょうか。 具体的には 1  A1に10と入っており 2-1 B2に=COUNTIF(OFFSET(A1:D10, 0, 1), "=【A1】") 2-2 SUMIF(&#65374;&#65374;&#65374;, "=【A1】", &#65374;&#65374;&#65374;) のような形で、A1の値に応じてCOUNTIFとSUMIFの条件分岐をしたいのです。 よろしくお願いします。

  • Excel2010でcountif関数について

    countif関数を使って、特定の文字が入力されたセルの数を算出するシートを作っています。検索する文字に"*"(アスタリスク)を指定すると数字以外のセルがすべてカウントされてしまいます。 =countif(範囲,"*") 他の文字列と同じように検索するにはどうしたら良いでしょうか?

  • エクセルのcountifについて

    はじめまして。 countifを使って以下の作業を行いたいのですが 上手くいきませんのでよろしくお願いします。   A   B 1 1149 個数を出す 2 7921    3 97    4 171    5 265 ・ ・ ・ 10000まで A列に10000までランダムに数字を入力して  COUNTIF(A1:A10000,1)で B列にA1からA10000の内1は何個か数える。 ここまでは出来るのですが このまま10000まで引っ張って行くと  COUNTIF(A2:A10001,1)  COUNTIF(A3:A10002,1)     ・     ・     ・ となってしまいます。 私としては  COUNTIF(A1:A10000,1)  COUNTIF(A1:A10000,2)  COUNTIF(A1:A10000,3)   と範囲はそのままで検索だけを1から10000まで変えたいのですが方法はあるでしょうか? 手作業でやる事も考えましたが余りにも時間がかかるので挫折しました。 解決法をご存知の方よろしくお願いします。

  • =A1といった簡単な数式が・・・

    セルに数式を打ち込みますが、何かの拍子に、数式を読まなくなります。 たとえば、=A1といったような数式も、セル内にそのまま"=A1"と表示されます。数式を変更したりすると、おかしくなるようです。 いったんセル内がおかしくなると、どのような数式を入れても、そのままの文字列としてしか表示されません。 同じシート内の他の未使用のセルで数式を入れると機能しますが、数式をいじると、文字列表示になってしまい、元に戻りません。 久しぶりにエクセルの数式を使いましたが、入り口でつまずいています。 助けてください。

  • エクセルのCOUNTIF式について教えてください

    こんばんは。 A1 10月21日 A2 10月30日 A3 11月3日 A4 11月12日 A5 10月1日 A6 3 上記のような列で、先頭2文字が「10月」となっているセルの数を数える式をA6に入れることで、 答えの「3」と表示させたいのですが、うまくできません。 =COUNTIF(A1:A5,LEFT(A1:A5,3)="10月") としています。 お手数ですが、エラーの原因と解答をお願いいたします。

  • EXCEL:あるセルの内容により文字列をカウントする

    EXCELでセルB1からB4 に 1EFG 2AAAG 3EFGHC 4TFGFG と入っているとします。またA1にはFGと今入っているとします。 B5に FGを含んでいるセルがいくつあるかをカウントした数を表示するため はB5に式=COUNTIF(B1:B4、”*FG*”)と書けば3とカウントできますがA1セルに入っている文字列を含むセルがB1からB5にいくつあるかというのは、どう書けばいいのでしょうか。 A1はいろいろ変えたいが、B5の式は変えずに処理できるかという質問です。 回答をよろしくお願いし

  • エクセルのCOUNTIF関数について

    COUNTIF関数でワイルドカードを使って検索する場合、検索対象は文字列でないと検索できないんでしょうか? 例えば、COUNTIF(A1:A10,"??1??") と入力した場合、A1からA10は数値では検索できず、文字列でないと検索できませんか?