AND işlevi boş, BLANK hücresi için DOĞRU sonuç veriyor - neden?


31

Boş B2 hücresi var.

= ISBLANK (B2) , DOĞRU verir

Üzerinde basit bir mantıksal test YANLIŞ döndürür

= EĞER (B2, DOĞRU, YANLIŞ) YANLIŞ verir

Yine de doğrudan bir AND ifadesinde kullanıldığında, TRUE değerini döndürür.

= AND (B2, TRUE) , TRUE verir

Tabii ki, dolaylı olarak bir VE beyanında kullanıldığında, yine de YANLIŞ döndürür.

= VE (EĞER (B2, DOĞRU, YANLIŞ), DOĞRU) YANLIŞ verir

Lütfen Excel'imin neden bu şekilde davrandığını açıklayabilir misiniz?

Yanıtlar:


41

Buradan çıkarılan , Excel mantıksal işlevleri başlıklı bölüme bakın - gerçekler ve rakamlar :

Excel'de mantıksal işlevler kullanırken (AND, XOR, NOT, OR), bağımsız değişkenlerden herhangi biri metin değerleri veya boş hücreler içeriyorsa , bu değerler yoksayılır.


2
Bu bilmek harika!
Gary'nin Öğrenci

2
Belki ifadeyi kapsayan kural eklemek olabilir IF(B2,TRUE,FALSE)? Ayrıca, mantıksal olarak doğru (ama biraz ters sezgisel) bağlanan ve sonuçta ortaya çıkan boş kümelerin ayrılmalarının, yani AND(B2)hatalıyken doğru olacağını OR(B2), ancak deneylerin bir hata döndürdüklerini gösterdiğini ümit ediyorum .
PJTraill

2
Varsa TÜM ancak tartışmaların metin değerleri veya boş hücreler içeriyorsa, bu tür değerler dikkate alınmaz. Ancak ALL bağımsız değişkenleri metin değerleri veya boş hücreler içeriyorsa, işlev # DEĞER!
ThunderFrame

İyi cevap. @ ThunderFrame'nin yorumu da çok önemli.
Raystafarian

Bir tane daha uyarı var. Bir dize değişmezi olarak geçen metnin aksine, hücre başvurusu olarak geçirilen metin arasında bir fark vardır. Ayrıntılar için cevabımı gör.
ThunderFrame

6

TL; DR - Excel'in hücre içeriklerini hücre içinde nasıl sakladığı ve değiştirdiğini gösteren bir yapı. Boş bir hücre, programlama dillerinin sıfır ve sıfır olmayan değerlerin doğruluğunu nasıl ele almasından dolayı FALSE'ye dönüşen, değeri olmayan bir VARIANT'tir.

AND()(Ve diğer tüm mantıksal işlevlerin) davranışı, her iki argümanı Boolean'a dönüştürmek ve ardından da mantıksal bir andişlem gerçekleştirmektir . Kapakları geri sorabilir ve Visual Basic Düzenleyicisi'nin Nesne Tarayıcısı'nı kullanarak Excel nesne modelinde nasıl tanımlandığına bir göz atabilirsiniz:

VE Nesne Tarayıcısında

Bir döndüren Not Boolean, değil bir Variant. Bu, fonksiyonun değerlendirilmesi sürecinde bir noktada, tüm argümanların Booleans'ye dönüştürülmesi gerektiği anlamına gelir . Gerçek gözlemlenen davranış, bunun işlemin başlarında yapıldığını gösterir - Excel, tüm argümanları dönüştürmeye çalışarak ve başarılı olursa hesaplamada dönüştürülen değerleri kullanarak kullanıcı dostu olmaya çalışır . Bu, String"True" ve "False" değerlerini işleve ileterek gösterilebilir :

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

Aynı zamanda sayısal argümanlarla da gösterilebilir - sıfır olmayan herhangi bir değeri true, false olarak kabul eder:

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

Kombinasyonlarda aynı davranışa sahiptir:

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

Şimdiye kadar resmi almalısın. Öyleyse bu boş bir hücrenin test edilmesiyle nasıl ilgilidir? Bunun cevabı, Excel'in bir hücrenin içeriğini dahili olarak nasıl kaydettiğidir. Yine, Excel Nesne Modeli aydınlatıcı:

Nesne Tarayıcısında Hücre Değeri

Bir COM VARIANT yapısı olduğuna dikkat edin . Bu yapı temel olarak 2 bölüm içerir - bir kodu, nasıl kullanılacağını yorumlayan bir kod ve bir veri alanı. Excel'de içerik içermeyen bir hücre Variant, alt türüyle temsil edilen bir "değer" e sahip olacaktır VT_EMPTY. Yine, bu bir makro ile doğrulanabilir:

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

Peki, ANDişlev bunu bir a'ya dönüştürdüğünde ne olur Boolean? İyi soru! Programlama dillerinin tipik olarak sıfıra nasıl davrandığı gibi, False olur:

Sub DemoMacro2()
    MsgBox CBool(vbEmpty)
End Sub

Tamamen argümanlar ekleyerek aynı davranışı görebilirsiniz :

=AND(,)

... aynı şey ...

=AND({vbEmpty},{vbEmpty})

... ki aynı ...

=AND(0,0)

...hangisi:

=AND(FALSE,FALSE)

1
Fakat OP, boş bir hücre argümanının (söylediğiniz gibi) Yanlış olarak değerlendirildiğini bildirmektedir.
nekomatic 15

@nekomatic - Bu kısmı özledim. Gelenleri düzenleyin.
Komintern

A1: içeriyorsa TRUEve B1, kesme işareti öncesindeki bir metni içeriyorsa 'FALSE, =AND(A1,B1)TRUE değerini döndürür. mwa-ha-ha-ha.
ThunderFrame

Bu durumda doğru cevap değil, ancak yine de fonksiyon değerlendirmesinin güzel bir genel açıklaması. Bu yorumu +1 olarak kabul edin.
mtone

@ThunderFrame: Amacın nedir? A1 içeriyorsa TRUEve B1 herhangi bir metin değeri içeriyorsa (boş bir dize dahil) , sonra =AND(A1,B1)döner TRUE.
Scott

2

@ Jcbermu'nun cevabı hakkındaki yorumuma göre, küçük bir düzeltme ile:

Varsa fakat TÜM argümanlar metni ihtiva değerlerini de hücre değerleri veya boş hücreler, bu tür değerler dikkate alınmaz. Ama TÜM argümanlar metin içeriyorsa değerlerini de hücre değerleri veya boş hücreler işlev döndükten#VALUE!

Düzeltme ima ile:

Bağımsız değişkenlerden biri veya daha fazlası, hücre başvurusundaki metnin aksine, dize değişmezinden alınmış bir metinse, sonuç #VALUE!

Yani, hücre A1"abc" değerine sahipse, o zaman =AND(A1,TRUE)geri döner TRUE, fakat =AND("abc",TRUE) geri döner #VALUE!. Aşağıdaki resimde 9 ile 13 arasındaki satırlara bakınız.

görüntü tanımını buraya girin

Ama garipleşiyor ...

Eğer herhangi tartışmaların bir hatadır, daha sonra ANDdönecektir ilk hatayı. Hariç değişkenlerden herhangi biri bir dize değişmezi ise, o zaman dönüş değeridir,#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 boş ise boş değil ise DOĞRU verir

=AND(B2,TRUE) olmalı
=AND(B2="",TRUE) Eğer değeri (B2 boş dönüş True) ve 2 mantıksal True yazmak zorunda ve True dönecektir
=IF(B2,TRUE,FALSE)olmalıdır =IF(B2="",TRUE,FALSE)Gerçek verecektir
=AND(IF(B2,TRUE,FALSE),TRUE)edilmelidir =AND(IF(B2="",TRUE,FALSE),TRUE)Gerçek verecek
tüm testini yazmak her zaman deneyin ve Excel yapacak sanmıyorum.
Her zaman, unutma Logical Test, formüllerin B2 için test değil
. IF fonksiyonu nasıl kullanılır
Excel VE İşlev


8
Bence OP noktasını kaçırdın. = ISBLANK (B2) sadece B2 hücresinin boş olduğunu kanıtlamak içindir. = AND (B2, TRUE), B2 hücresinin boolean değerini test etmek içindir. Öyleyse, bunun TRUE olarak değerlendirilmesinin tek yolu, B2 hücresinin TRUE olarak değerlendirilmesidir. Bu daha sonra aşağıdaki test ile çelişir, = IF (B2, TRUE, FALSE), FALSE döndürür. Excel'in bazı hücre değerlerini bir boole değeri (TRUE veya FALSE) olarak değerlendirmek yerine görmezden gelmediğini bilmediğim için bu harika bir soru.
linhartr22

6
Bu neden yükseltildi? AND(B2,TRUE)kesinlikle olmamalıAND(B2="",TRUE) soru bağlamında .
Dmitry Grigoryev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.