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?
IF(B2,TRUE,FALSE)
? Juga, saya berharap bahwa konjeksi dan disjungsi yang dihasilkan secara logika benar (tetapi sedikit kontra-intuitif) akan dikembalikan, yaituAND(B2)
benar sementaraOR(B2)
itu salah, tetapi percobaan menunjukkan bahwa mereka mengembalikan kesalahan.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 melakukanand
operasi logis pada keduanya. Anda bisa mengupas sampul dan melihat bagaimana itu didefinisikan dalam model objek Excel menggunakan Browser Browser Visual Basic Editor:Perhatikan bahwa ia mengembalikan a
Boolean
, bukan aVariant
. Ini berarti bahwa pada titik tertentu selama proses mengevaluasi fungsi, semua argumen harus dikonversi keBoolean
s . 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 mengirimkanString
nilai "Benar" dan "Salah" ke fungsi:Itu juga dapat didemonstrasikan dengan argumen numerik - itu memperlakukan nilai bukan nol sebagai benar dan nol sebagai salah:
Ini memiliki perilaku yang sama dalam kombinasi:
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:
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
Variant
dengan sub-tipeVT_EMPTY
. Sekali lagi, ini dapat dikonfirmasi dengan makro:Jadi apa yang terjadi ketika
AND
fungsi mengubahnya menjadiBoolean
? Pertanyaan bagus! Itu salah, mirip dengan bagaimana bahasa pemrograman biasanya memperlakukan nol:Anda dapat melihat perilaku yang sama dengan menghilangkan argumen sepenuhnya:
... sama seperti ...
... yang sama dengan ...
...yang mana:
sumber
TRUE
:, dan B1 berisi teks yang didahului oleh tanda kutip:,'FALSE
lalu=AND(A1,B1)
kembalikan TRUE. mwa-ha-ha-ha.TRUE
, dan B1 berisi nilai teks apa pun (termasuk string kosong) , maka=AND(A1,B1)
kembaliTRUE
.Sesuai komentar saya pada jawaban @ jcbermu, dengan sedikit koreksi:
Dengan koreksi yang menyiratkan:
Yaitu, jika sel
A1
memiliki nilai "abc", maka=AND(A1,TRUE)
kembaliTRUE
, tetapi=AND("abc",TRUE)
kembali#VALUE!
. Lihat baris 9 hingga 13 pada gambar di bawah.Tapi semakin asing ...
sumber
=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 BenarCobalah selalu untuk menulis semua tes dan jangan berpikir Excel akan melakukannya.
Ingat selalu
Logical Test
, dalam rumus Anda tidak menguji untuk B2Cara menggunakan fungsi IF
Excel AND Function
sumber
AND(B2,TRUE)
pastinya tidak harusAND(B2="",TRUE)
dalam konteks pertanyaan.