Fungsi AND memberikan hasil TRUE untuk sel BLANK kosong - mengapa?

31

Saya memiliki sel B2 kosong.

= ISBLANK (B2) memberi BENAR

Tes logis sederhana untuk mengembalikan FALSE

= JIKA (B2, BENAR, SALAH) memberikan SALAH

Namun ketika langsung digunakan dalam pernyataan DAN, itu mengembalikan BENAR

= AND (B2, TRUE) memberikan TRUE

Tentu saja, ketika secara tidak langsung digunakan dalam statment AND, ia masih mengembalikan SALAH

= AND (IF (B2, TRUE, FALSE), TRUE) memberikan FALSE

Bisakah Anda menjelaskan kepada saya mengapa Excel saya berperilaku seperti itu?

pulsar3424
sumber

Jawaban:

41

Diekstrak dari sini , lihat bagian berjudul Fungsi logis Excel - fakta dan angka :

Di Excel saat Anda menggunakan fungsi logis (AND, XOR, NOT, OR), jika ada argumen yang berisi nilai teks atau sel kosong , nilai tersebut diabaikan.

jcbermu
sumber
2
Ini bagus untuk diketahui !!
Siswa Gary
2
Mungkin Anda bisa menambahkan aturan yang mencakup ekspresi IF(B2,TRUE,FALSE)? Juga, saya berharap bahwa konjeksi dan disjungsi yang dihasilkan secara logika benar (tetapi sedikit kontra-intuitif) akan dikembalikan, yaitu AND(B2)benar sementara OR(B2)itu salah, tetapi percobaan menunjukkan bahwa mereka mengembalikan kesalahan.
PJTraill
2
jika ada tapi tidak SEMUA argumen berisi nilai teks atau sel kosong, nilai tersebut diabaikan. Tetapi jika SEMUA argumen berisi nilai teks atau sel kosong, fungsi mengembalikan #VALUE!
ThunderFrame
Jawaban yang bagus. Komentar @ ThunderFrame juga sangat penting.
Raystafarian
Ada satu peringatan lagi. Ada perbedaan antara teks yang dikirimkan sebagai referensi sel, sebagai lawan dari teks yang dikirimkan sebagai string-literal. Lihat jawaban saya untuk detailnya.
ThunderFrame
6

TL; DR - Ini adalah artefak tentang bagaimana Excel menyimpan dan menukar konten sel secara internal. Sel kosong adalah VARIAN tanpa nilai, yang dikonversi ke FALSE karena cara bahasa pemrograman memperlakukan kebenaran dari nilai nol dan bukan nol.

Perilaku AND()(dan semua fungsi logis lainnya) adalah mengubah kedua argumen menjadi Boolean, kemudian melakukan andoperasi logis pada keduanya. Anda bisa mengupas sampul dan melihat bagaimana itu didefinisikan dalam model objek Excel menggunakan Browser Browser Visual Basic Editor:

DAN di Object Browser

Perhatikan bahwa ia mengembalikan a Boolean, bukan a Variant. Ini berarti bahwa pada titik tertentu selama proses mengevaluasi fungsi, semua argumen harus dikonversi ke Booleans . Perilaku yang diamati sebenarnya menunjukkan bahwa ini dilakukan pada awal dalam pemrosesan - Excel mencoba untuk menjadi ramah pengguna dengan mencoba untuk mengkonversi semua argumen dan menggunakan nilai-nilai yang dikonversi dalam perhitungan jika berhasil. Ini dapat didemonstrasikan dengan mengirimkan Stringnilai "Benar" dan "Salah" ke fungsi:

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

Itu juga dapat didemonstrasikan dengan argumen numerik - itu memperlakukan nilai bukan nol sebagai benar dan nol sebagai salah:

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

Ini memiliki perilaku yang sama dalam kombinasi:

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

Sekarang Anda harus mendapatkan gambarnya. Jadi bagaimana hubungannya dengan pengujian sel kosong? Jawabannya terletak pada bagaimana Excel menyimpan konten sel secara internal. Sekali lagi, Model Objek Excel mencerahkan:

Nilai sel di Browser Objek

Perhatikan bahwa ini adalah struktur COM VARIANT . Struktur ini pada dasarnya berisi 2 bagian - tipe, yang memberi tahu kode menggunakannya bagaimana menafsirkannya, dan area data. Sel tanpa konten di Excel akan memiliki "nilai" yang diwakili oleh Variantdengan sub-tipe VT_EMPTY. Sekali lagi, ini dapat dikonfirmasi dengan makro:

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

Jadi apa yang terjadi ketika ANDfungsi mengubahnya menjadi Boolean? Pertanyaan bagus! Itu salah, mirip dengan bagaimana bahasa pemrograman biasanya memperlakukan nol:

Sub DemoMacro2()
    MsgBox CBool(vbEmpty)
End Sub

Anda dapat melihat perilaku yang sama dengan menghilangkan argumen sepenuhnya:

=AND(,)

... sama seperti ...

=AND({vbEmpty},{vbEmpty})

... yang sama dengan ...

=AND(0,0)

...yang mana:

=AND(FALSE,FALSE)
Komintern
sumber
1
Tetapi OP melaporkan bahwa argumen sel kosong diperlakukan sebagai Benar, bukan (seperti yang Anda katakan) Salah.
nekomatic
@nekomatic - Saya melewatkan bagian itu. Edit datang.
Comintern
Jika A1 berisi TRUE:, dan B1 berisi teks yang didahului oleh tanda kutip:, 'FALSElalu =AND(A1,B1)kembalikan TRUE. mwa-ha-ha-ha.
ThunderFrame
Bukan jawaban yang benar dalam hal ini, tetapi penjelasan umum yang bagus tentang evaluasi fungsi tetap. Perlakukan komentar ini sebagai +1.
mtone
@ThunderFrame: Apa maksudmu? Jika A1 berisi TRUE, dan B1 berisi nilai teks apa pun (termasuk string kosong) , maka =AND(A1,B1)kembali TRUE.
Scott
2

Sesuai komentar saya pada jawaban @ jcbermu, dengan sedikit koreksi:

Jika ada tetapi tidak SEMUA argumen berisi nilai teks dalam nilai sel atau sel kosong, nilai tersebut diabaikan. Tetapi jika SEMUA argumen berisi nilai teks dalam nilai sel atau sel kosong, fungsinya kembali#VALUE!

Dengan koreksi yang menyiratkan:

Jika satu atau lebih argumen adalah teks dari string-literal, sebagai lawan dari teks dalam referensi sel, maka hasilnya adalah #VALUE!

Yaitu, jika sel A1memiliki nilai "abc", maka =AND(A1,TRUE)kembali TRUE, tetapi =AND("abc",TRUE) kembali #VALUE!. Lihat baris 9 hingga 13 pada gambar di bawah.

masukkan deskripsi gambar di sini

Tapi semakin asing ...

Jika ada argumen yang salah, maka ANDakan mengembalikan kesalahan pertama . Kecuali , jika ada argumen yang berupa string-literal, maka nilai baliknya adalah#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!

ThunderFrame
sumber
0

=ISBLANK(B2)
memberikan TRUE jika B2 kosong bukan ruang kosong

=AND(B2,TRUE) seharusnya
=AND(B2="",TRUE)Anda harus menulis nilai (B2 kosong mengembalikan Benar) dan logika 2 adalah Benar dan akan kembali Benar
=IF(B2,TRUE,FALSE)harus =IF(B2="",TRUE,FALSE)akan memberikan Benar
=AND(IF(B2,TRUE,FALSE),TRUE)harus =AND(IF(B2="",TRUE,FALSE),TRUE)akan memberikan Benar
Cobalah selalu untuk menulis semua tes dan jangan berpikir Excel akan melakukannya.
Ingat selalu Logical Test, dalam rumus Anda tidak menguji untuk B2
Cara menggunakan fungsi IF
Excel AND Function


sumber
8
Saya pikir Anda melewatkan poin OPs. The = ISBLANK (B2) hanya untuk membuktikan bahwa sel B2 kosong. The = AND (B2, TRUE) dimaksudkan untuk menguji nilai boolean sel B2. Maka satu-satunya cara ini mengevaluasi ke TRUE adalah jika sel B2 mengevaluasi ke TRUE. Ini kemudian bertentangan dengan tes berikut, = IF (B2, TRUE, FALSE) mengembalikan FALSE. Ini adalah pertanyaan yang luar biasa karena saya tidak tahu Excel mengabaikan beberapa nilai sel alih-alih mengevaluasinya menjadi nilai boolean (BENAR atau SALAH).
linhartr22
6
Mengapa ini dibalik? AND(B2,TRUE)pastinya tidak harus AND(B2="",TRUE)dalam konteks pertanyaan.
Dmitry Grigoryev