【3月6日実施】システムメンテナンス実施のお知らせ

Excelの学習をしており、空文字の判定に関してわからないことがあり質問しました。

例えば以下のような関数がA1のセルに書いてあり、B1=C1とします。
=IF(B1=C1,"同じ","")
↑は""(空文字)を入れたくて行っています。
加えてA2-A5には適当な文字列が入っているとします。

A1からA5に対してCOUNTIF関数を使います。結果は以下のようになります。
①  =COUNTIF(A1:A5,"") の場合 -> 1
②  =COUNTIF(A1:A5,"<>") の場合 -> 5

ここで疑問なのですが、なぜ①で空文字が1つと判定されているのに、②で空文字でないものが5つと判定されるのでしょうか?4つと判定されるのが正常な気がします。

Excelの文字列周りについて調べたのですが、自分のググる力が足りず解決できませんでした。

詳しい方、教えていただけると大変助かります。
よろしくお願いします。

質問者からの補足コメント

  • 見た目上はA1が空欄,A2-A5に適当な文字列が入っているため、逆ではないです。
    COUNTIF(A1:A5, "") は空文字の数を数えており、結果は1(A1が空文字のため)
    COUNTIF(A1:A5,"<>")は空文字ではないものを数えると思っているのですが、なぜか結果が5と表示されているという状況です。
    COUNTIF(A1:A5,"<>")はCOUNTIF(A1:A5,"<>"&"")と同義だとネット上に書いてあったので上記の結果に納得がいっていません。

    何がいけないのでしょうか・・

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/01/06 14:19

A 回答 (7件)

No.5、6です。



前々回の回答で、
>一つの関数なのに等号・不等号を入れ替えても「補集合」にならない
>という珍現象がおこります。
と書きましたが不適切な表現でした。

=COUNTIF(範囲,"<>")に対して、等号・不等号を入れ替えるのであれば、=COUNTIF(範囲,"")ではなく、=COUNTIF(範囲,"=")を用いて検証しなければいけません。
=COUNTIF(範囲,"")を用いて検証し、【「補集合」にならない】と書いてしまいまい、単なる早とちりでした。

=COUNTIF(範囲,"<>")と=COUNTIF(範囲,"=")は未入力のみを空白と捉えるようなので、互いに補集合になります。
Microsoftにツッコミを入れるような問題ではありませんでした。
お詫びして訂正いたします。
    • good
    • 0

No.5です。

前回回答の補足説明です。

ご質問者は最初の質問で
>なぜ①で空文字が1つと判定されているのに、②で空文字でないものが
>5つと判定されるのでしょうか?
と述べており、さらに補足説明で
>何がいけないのでしょうか・・
とおっしゃっています。

ご質問者は何もいけないことをしていません。
前回回答のとおり、COUNTIF関数の「意外な仕様」により「意外な結果」に遭遇しているだけです。

普通に考えると「5個のうち【●●という条件に当てはまる】ものが1つあるとき、【●●という条件に当てはまらない】ものは4つである」という常識が、「COUNTIF関数と""(空白)との組み合わせでは成立しない」という特殊事情を知っているかどうかの問題です。
    • good
    • 0

>COUNTIF(A1:A5,"<>")はCOUNTIF(A1:A5,"<>"&"")と同義だとネット


>上に書いてあったので上記の結果に納得がいっていません。
ということですが、COUNTIF関数の仕様に「意外な部分」があるからだと思います。

添付画像をご覧ください。A1~A10にさまざまな文字、数値、空白、未入力を置いて検証してみました。
おそらくfujillinさんの解説のように、COUNTIF関数は「空白である」を判別するときはCOUNTBLANKと平仄をあわせ、「空白でない」を判別するときはCOUNTAと平仄を合わせるとした結果、一つの関数なのに等号・不等号を入れ替えても「補集合」にならないという珍現象がおこります。
つまり、COUNTIF関数は「空白である」を判断するとき「空白には【見かけの空白】を含む」のに対して、「空白でない」を判断するとき「空白には【見かけの空白】は含まず(純粋な【未入力】のみカウント)」という意外な仕様であることが判ります。
「Microsoftさん、いささかやりすぎですよ」とツッコミたくなる状況です。

また、enunokokoroさんが、
>ワイルドカードを使ったCOUNTIF(A1:A5,"?*")であれば、未入力と
>空文字のセルをカウントします。
と解説しておられます。添付画像のように検証してみました。これを見る限り、そのような結果にはなりません。

COUNTIF(範囲,"?*")は「範囲内の長さ1以上の文字列セルを数える」数式だと思います。従って添付画像の場合、数値を除く文字a、b、c、dを数えて4が返ります。

さらに、COUNTIF(範囲,"<>?*")を検証するとちゃんと補集合が返ります。

従って「長さ0の文字列は空白」と見做すのであれば、数値セルを数えるCOUNT関数と組み合わせて、
=COUNTIF(範囲,"?*")+COUNT(範囲)
とすれば、範囲内の長さ1以上の文字列があるセルの数+数値が入力されたセルの数がカウントされるので、範囲内の空白(長さ0の文字列:見かけり空白を含む)以外のセルがカウントできます。

COUNTIF関数は上記のように紛らわしい挙動なので、見かけの空白を含めて「空白」と「空白以外」のセルを判別するときはSUMPRODUCT関数を使う手もあります。

添付画像のように見かけの空白も含めて空白セルをカウントするときは、
=SUMPRODUCT((範囲="")*1)
という数式を記述し、見かけの空白も含めて空白以外のセルをカウントするときは、
=SUMPRODUCT((範囲<>"")*1)
という数式を用いるということになります。
「Excelの空文字判定について」の回答画像5
    • good
    • 0

関数でセットする””は値というより、エクセル上で見た目を


ブランクにする手段ですね。
「関数の引数」(fxをクリック)を見ると
わかるように返ってきた値は””だが結果はブランクです。
つまり見た目ブランクだけど本当はブランクじゃないということです。
1セルだけで試すと分かり易い。
=COUNTA(実体)は1で、=COUTBLANK(見た目)も1。
従ってCOUNTIF(A1:A5,"<>")は実体の有無を判断するので5。
COUNTIF(A1:A5, "")は見た目を判断するので1。
では実体も無しでいいじゃないかとは思いますが、
マイクロソフトはそこは厳密なんでしょう。
    • good
    • 0

COUNTIF(A1:A5,"<>")は、未入力セル以外カウントするものです。


数式による空文字も入力されたものとしてカウントされます。
ワイルドカードを使ったCOUNTIF(A1:A5,"?*")であれば、未入力と
空文字のセルをカウントします。
https://excel-ubara.com/excel-answer/EXCEL702A.h …
    • good
    • 1

こんにちは



セル内に関数式が設定されているか否かで空白とは見做さないか、関数式とは関係なく結果のセル値が空白かどうかで判断するかの違いですね。
余分なセルを入れずに、1セルだけを判断させてみればわかりやすいと思います。

添付図は、B3:F3セルに値を設定し、5~9行で各セルを評価したものです。
B3:D3は固定値の「空白」、「文字」、「数値」となっており、E3:F3は関数式を設定して、結果が「空白」、「文字」となるようにしてあります。
B5:F9には、A列に示した式を用いて各列の3行目の値を評価しています。

ご覧になればわかると思いますが、
 =COUNTIF(セル範囲,"")  は
 =COUNTBLANK(セル範囲) と同等

 =COUNTIF(セル範囲,"<>") は
 =COUNTA(セル範囲) と同等
ということがわかると思います。

前者は「セル値が空白か」で判断しており、後者は「セルがEmptyでないか」で判断していることになります。
つまり、両式の意味は完全には背反ではないってことでしょう。
「Excelの空文字判定について」の回答画像2
    • good
    • 1

①②の答えは逆だと思います。


A1:A5が全てNULLならば、
COUNTIF(A1:A5,"")=5   …NULLの数が5個
COUNTIF(A1:A5,"<>") =1 …1種類の文字(実際にはNULL)がある。

後者は、違うものの種類の数、を返します。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!