ฟังก์ชัน AND ให้ผลลัพธ์เป็น TRUE สำหรับเซลล์ BLANK เปล่า - ทำไม


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
นี่เป็นเรื่องดีที่จะรู้ !!
นักเรียนของ Gary

2
บางทีคุณสามารถเพิ่มกฎที่ครอบคลุมการแสดงออกได้IF(B2,TRUE,FALSE)? นอกจากนี้ฉันหวังว่าคำสันธานและการแยกส่วนที่ว่างเปล่าที่เกิดขึ้นจะถูกส่งกลับอย่างถูกต้องตามหลักเหตุผล (แต่ตอบโต้ได้ง่าย) คือกล่าวAND(B2)ว่าเป็นจริงในขณะที่OR(B2)เป็นเท็จ แต่การทดลองแสดงให้เห็นว่าพวกเขากลับข้อผิดพลาด
PJTraill

2
ถ้ามีแต่ไม่ใช่ทั้งหมดของข้อโต้แย้งที่มีค่าข้อความหรือเซลล์ว่างเปล่าค่าดังกล่าวจะถูกละเว้น แต่ถ้าอาร์กิวเมนต์ทั้งหมดมีค่าข้อความหรือเซลล์ว่างเปล่าฟังก์ชันจะส่งกลับ #VALUE!
ThunderFrame

คำตอบที่ดี. @ ความคิดเห็นของ ThunderFrame เป็นสิ่งสำคัญยิ่งเช่นกัน
Raystafarian

มีข้อแม้อีกหนึ่งข้อ มีความแตกต่างระหว่างข้อความที่ส่งผ่านเป็นการอ้างอิงเซลล์ซึ่งตรงข้ามกับข้อความที่ส่งเป็นตัวอักษรสตริง ดูคำตอบของฉันสำหรับรายละเอียด
ThunderFrame

6

TL; DR - เป็นสิ่งประดิษฐ์ที่ Excel จัดเก็บและแลกเปลี่ยนเนื้อหาของเซลล์ภายใน เซลล์ว่างเป็นตัวแปรที่ไม่มีค่าซึ่งแปลงเป็น FALSE เนื่องจากวิธีการเขียนโปรแกรมภาษาที่ปฏิบัติต่อความเป็นจริงของค่าศูนย์และค่าที่ไม่ใช่ศูนย์

พฤติกรรมของAND()(และฟังก์ชันทางตรรกะอื่น ๆ ทั้งหมด) คือการแปลงอาร์กิวเมนต์ทั้งสองเป็นบูลีนจากนั้นดำเนินการทางตรรกะandกับพวกเขา คุณสามารถถอดฝาครอบกลับมาและดูว่ามันถูกกำหนดในรูปแบบวัตถุ Excel โดยใช้ Object Browser ของ Visual Basic Editor:

และในเบราว์เซอร์วัตถุ

โปรดทราบว่าจะส่งกลับBoolean, ไม่ Variantซึ่งหมายความว่าในบางจุดในระหว่างขั้นตอนของการประเมินฟังก์ชันทั้งหมดของการขัดแย้งจะต้องมีการแปลงเป็นBoolean s พฤติกรรมที่สังเกตได้จริงแสดงให้เห็นว่าสิ่งนี้ทำเสร็จแล้วในช่วงต้นของการประมวลผล - Excel พยายามที่จะเป็นมิตรกับผู้ใช้โดยพยายามแปลงอาร์กิวเมนต์ทั้งหมดและใช้ค่าที่แปลงแล้วในการคำนวณหากทำได้สำเร็จ สิ่งนี้สามารถแสดงให้เห็นได้โดยการส่งStringค่า "True" และ "False" ไปยังฟังก์ชัน:

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

นอกจากนี้ยังสามารถแสดงให้เห็นด้วยข้อโต้แย้งเชิงตัวเลข - มันปฏิบัติต่อค่าที่ไม่เป็นศูนย์ใด ๆ เป็นจริงและเป็นศูนย์เป็นเท็จ:

=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 กำลังตรัสรู้:

ค่าของเซลล์ใน Object Browser

โปรดทราบว่ามันเป็นโครงสร้าง COM ที่แตกต่างกัน โครงสร้างนี้โดยทั่วไปประกอบด้วย 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ฟังก์ชั่นแปลงว่าเป็นBoolean? คำถามที่ดี! มันเกิดขึ้นเป็นเท็จคล้ายกับภาษาการเขียนโปรแกรมโดยทั่วไปถือว่าศูนย์

Sub DemoMacro2()
    MsgBox CBool(vbEmpty)
End Sub

คุณสามารถเห็นพฤติกรรมเดียวกันโดยการละเว้นข้อโต้แย้งทั้งหมด

=AND(,)

... เป็นสิ่งเดียวกับ ...

=AND({vbEmpty},{vbEmpty})

... ซึ่งเหมือนกับ ...

=AND(0,0)

...ซึ่งเป็น:

=AND(FALSE,FALSE)

1
แต่ OP รายงานว่าอาร์กิวเมนต์เซลล์ว่างถือเป็น True ไม่ใช่ (อย่างที่คุณพูด) False
nekomatic

@nekomatic - ฉันพลาดส่วนนั้น แก้ไขมา
Comintern

ถ้า A1 ประกอบด้วย: TRUE, และ B1 มีข้อความนำหน้าด้วยเครื่องหมายอัญประกาศเดี่ยว: 'FALSEจากนั้น=AND(A1,B1)ส่งคืน TRUE กปน. ฮ่าฮ่าฮ่า
ThunderFrame

ไม่ใช่คำตอบที่ถูกต้องในกรณีนี้ แต่เป็นคำอธิบายทั่วไปที่ดีของการประเมินฟังก์ชั่นอย่างไรก็ตาม ถือว่าความคิดเห็นนี้เป็น +1
mtone

@ ThunderFrame: คุณมีประเด็นอะไร หากมี A1 TRUEและ B1 มีค่าข้อความใด ๆ (รวมทั้งสตริงที่ว่างเปล่า)แล้วผลตอบแทน=AND(A1,B1) TRUE
สกอตต์

2

ตามความคิดเห็นของฉันเกี่ยวกับคำตอบของ @ jcbermu โดยมีการแก้ไขเล็กน้อย:

หากมีแต่ไม่ทั้งหมดของข้อโต้แย้งที่มีค่า ข้อความในค่าเซลล์หรือเซลล์ว่างเปล่าค่าดังกล่าวจะถูกละเว้น แต่ถ้าอาร์กิวเมนต์ทั้งหมดมีค่า ข้อความในค่าเซลล์หรือเซลล์ว่างฟังก์ชันจะส่งคืน#VALUE!

ด้วยการแก้ไขหมายถึง:

หากอาร์กิวเมนต์หนึ่งตัวขึ้นไปเป็นข้อความจากสตริงตัวอักษรซึ่งตรงข้ามกับข้อความในการอ้างอิงเซลล์ผลลัพธ์จะเป็น #VALUE!

นั่นคือถ้าเซลล์A1มีค่า "เอบีซี" จากนั้น=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)
ให้ TRUE หาก B2 ว่างเปล่าไม่ใช่ช่องว่าง

=AND(B2,TRUE) ควรจะเป็น
=AND(B2="",TRUE)คุณต้องเขียนค่า (B2 เปล่าคืนจริง) และตรรกะที่สองคือจริงและจะกลับจริง
=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 และ Function


8
ฉันคิดว่าคุณพลาดจุดโอพีเอส = ISBLANK (B2) เพียงเพื่อพิสูจน์ว่าเซลล์ B2 ว่างเปล่า = และ (B2, TRUE) หมายถึงการทดสอบค่าบูลีนของเซลล์ B2 วิธีเดียวที่สิ่งนี้ประเมินเป็น TRUE คือถ้าเซลล์ B2 ประเมินเป็น TRUE นี่เป็นข้อขัดแย้งจากการทดสอบดังต่อไปนี้ = IF (B2, TRUE, FALSE) ที่ส่งคืน FALSE นี่เป็นคำถามที่ยอดเยี่ยมเพราะฉันไม่รู้ว่า Excel เพิกเฉยต่อค่าของเซลล์บางส่วนแทนที่จะประเมินเป็นค่าบูลีน (TRUE หรือ FALSE)
linhartr22

6
ทำไม upvoted นี้คืออะไร AND(B2,TRUE)แน่นอนไม่ควรอยู่AND(B2="",TRUE)ในบริบทของคำถาม
Dmitry Grigoryev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.