AND関数は空の空白セルに対してTRUEの結果を返します-なぜですか?


31

空白のB2セルがあります。

= ISBLANK(B2)はTRUEを返します

単純な論理テストはFALSEを返します

= IF(B2、TRUE、FALSE)はFALSEを返します

ただし、ANDステートメントで直接使用すると、TRUEを返します

= AND(B2、TRUE)はTRUEを返します

もちろん、ANDステートメントで間接的に使用すると、まだFALSEを返します

= AND(IF(B2、TRUE、FALSE)、TRUE)はFALSEを返します

Excelがそのように動作する理由を教えてください。

回答:


41

ここから抽出されExcelの論理関数-事実と数字というタイトルのセクションを探します。

Excelでは、論理関数(AND、XOR、NOT、OR)を使用しているときに、引数のいずれかにテキスト値または空のセルが含まれている場合、そのような値は無視されます。


2
これは知っておくといいです!!
ゲイリーの学生

2
おそらく、式をカバーするルールを追加できIF(B2,TRUE,FALSE)ますか?また、結果としての空のセットの論理的に正しい(ただし、少し直感に反する)接続詞と論理和が返されること、つまりAND(B2)true OR(B2)がfalseであることが返されることを望みましたが、実験によりエラーが返されることが示されています。
PJTraill

2
もしあればすべてではなく、引数のは、テキスト値または空のセルが含まれ、このような値は無視されます。ただし、すべての引数にテキスト値または空のセルが含まれる場合、関数は#VALUE!を返します。
ThunderFrame

いい答えだ。@ThunderFrameのコメントも重要です。
レイスタファリアン

もう1つ注意点があります。文字列リテラルとして渡されるテキストとは対照的に、セル参照として渡されるテキストには違いがあります。詳細については私の答えをご覧ください。
ThunderFrame

6

TL; DR -Excelがセルの内容を内部的に保存および交換する方法の成果物です。空のセルは値のないVARIANTであり、プログラミング言語がゼロおよびゼロ以外の値の真偽をどのように扱うかにより、FALSEに変換されます。

挙動AND()(及び他の論理関数の全て)を、ブール値に両方の引数を変換論理実行することでandそれらの操作を。カバーをはがして、Visual Basic Editorのオブジェクトブラウザーを使用して、Excelオブジェクトモデルでどのように定義されているかを確認できます。

オブジェクトブラウザで

a Booleanではなく aを返すことに注意してくださいVariant。これは、関数を評価するプロセスのある時点で、すべての引数をBooleans に変換する必要があることを意味します。実際に観察された動作は、これが処理の早い段階で行われたことを示しています。Excelは、すべての引数を変換し、成功した場合は計算で変換された値を使用することにより、ユーザーフレンドリーであることを試みます。これはString、関数に値「True」および「False」を渡すことで実証できます。

=AND("true","true") <---Results in TRUE
=AND("false","true") <---Results in FALSE
Etc.

また、数値引数で示すこともできます-ゼロ以外の値をtrueとして、ゼロをfalseとして扱います。

=AND(42,-42) <---Results in TRUE
=AND(0,0) <---Results in FALSE
=AND(42,0) <---Results in FALSE
Etc.

組み合わせでは同じ動作になります。

=AND("false",0) <---Results in FALSE
Etc.

ここまでで、画像が得られるはずです。では、これは空白セルのテストとどのように関係していますか?これに対する答えは、Excelがセルの内容を内部的に保存する方法にあります。繰り返しますが、Excelオブジェクトモデルは啓発的です。

オブジェクトブラウザーのセル値

COM VARIANT構造であることに注意してください。この構造には基本的に2つの部分があります。それは、それを使用するコードに解釈方法を伝えるタイプと、データ領域です。ExcelにコンテンツのないセルにはVariant、サブタイプので表される「値」がありVT_EMPTYます。繰り返しますが、これはマクロで確認できます。

Sub DemoMacro()
    'Displays "True" if cell A1 on the active sheet has no contents.
    MsgBox Range("A1").Value2 = vbEmpty
End Sub

では、AND関数がそれをaに変換するとBooleanどうなりますか?良い質問!プログラミング言語が通常ゼロを扱う方法と同様に、たまたまFalseです。

Sub DemoMacro2()
    MsgBox CBool(vbEmpty)
End Sub

引数を完全に省略すると、同じ動作を確認できます。

=AND(,)

...と同じことです...

=AND({vbEmpty},{vbEmpty})

...これは同じです...

=AND(0,0)

...これは:

=AND(FALSE,FALSE)

1
しかし、OPは空のセル引数が(あなたが言うように)FalseではなくTrueとして扱われると報告します。
nekomatic

@nekomatic-その部分を見逃した。編集予定。
コミンテルン

A1に:が含まれTRUE、B1にアポストロフィ:が先行するテキストが含まれる場合'FALSE=AND(A1,B1)TRUE を返します。ムワハハハ。
ThunderFrame

この場合の正しい答えではありませんが、それでも関数評価の良い一般的な説明です。このコメントを+1として扱います。
mtone

@ThunderFrame:あなたのポイントは何ですか?A1にが含まれTRUE、B1にテキスト値(空の文字列を含む)が含まれる場合、を=AND(A1,B1)返しますTRUE
スコット

2

@jcbermuの答えに対する私のコメントによると、小さな修正があります:

いずれの場合すべてではなく、引数のテキスト含まれている セルの値や空のセルを、このような値は無視されます。ただし、すべての引数セル値または空のセルにテキスト 含まれる場合、関数は#VALUE!

修正の意味:

セル参照のテキストではなく、1つ以上の引数が文字列リテラルのテキストである場合、結果は次のようになります。 #VALUE!

セルがあれば、あるA1値「ABC」、そして持って=AND(A1,TRUE)戻りTRUEしかし =AND("abc",TRUE)リターンを#VALUE!。以下の画像の行9〜13を参照してください。

ここに画像の説明を入力してください

しかし、見知らぬ人になります...

場合は任意の引数のは誤りで、その後、AND戻ります最初のエラーを。を除き、引数のいずれかが文字列リテラルの場合、戻り値は#VALUE!

=AND(TRUE,TRUE,"abc") = #VALUE!

=AND(1/0,foo(),TRUE) = #DIV/0!

=AND(foo(),1/0,TRUE) = #NAME?

=AND(1/0,foo(),"abc",TRUE) = #VALUE!

=AND(foo(),1/0,"abc",TRUE) = #VALUE!


0

=ISBLANK(B2)
B2が空白ではなく空の場合にTRUEを返します

=AND(B2,TRUE) である必要があり
=AND(B2="",TRUE)ますが、値(B2空の戻り真)と第二論理がTrueを記述する必要がとtrueを返します
=IF(B2,TRUE,FALSE)する必要があります=IF(B2="",TRUE,FALSE)真が与える
=AND(IF(B2,TRUE,FALSE),TRUE)べきである=AND(IF(B2="",TRUE,FALSE),TRUE)真の与える
すべてのテストを書くために常にトライをし、Excelがやるとは思いません。
常に覚えてくださいLogical Test、あなたの式ではB2をテストしていません
IF関数を使用する方法
Excel AND関数


8
OPのポイントを逃したと思います。= ISBLANK(B2)は、セルB2が空白であることを証明するためのものです。= AND(B2、TRUE)は、セルB2のブール値をテストするためのものです。次に、これがTRUEと評価される唯一の方法は、セルB2がTRUEと評価される場合です。これは、= IF(B2、TRUE、FALSE)がFALSEを返すという次のテストと矛盾します。Excelはいくつかのセル値をブール値(TRUEまたはFALSE)に評価する代わりに無視することを知らなかったので、これは素晴らしい質問です。
linhartr22

6
なぜこれが賛成ですか?AND(B2,TRUE)間違いなくAND(B2="",TRUE)質問の文脈にあるべきではありません。
ドミトリーグリゴリエフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.