Excel将“ FALSE”和空白单元格评估为相等

时间:2019-11-12 16:47:12

标签: excel vba excel-formula

我有一个电子表格,该电子表格使用VBA从数据库中检索数据并将其复制到工作表中。我需要比较两列以查看它们是否匹配。可能的值为“ TRUE”,“ FALSE”或空白单元格。

如果值不同,我有一个简单的公式来标记行:=IF(I2=J2,"Same","Difference")

如果值匹配,或者它们是TRUE / BLANK或TRUE / FALSE,则此公式可以正常工作,但是当存在FALSE和空白单元格时,该公式的计算结果不符合预期! Screenshot of formula not evaluating as expected

如果我输入单词“ FALSE”,则该公式将正确求值(如下图所示)。仅当VBA从数据库粘贴数据时,该公式似乎才被激活。

screenshot of formula evaluating correctly when I type in the word "False"

我怀疑这与Excel将FALSE和空白单元格都等同于“ 0”有关,但是我无法弄清楚如何轻松解决此“功能”。我尝试了几件事:

  • 我确认所有单元格的单元格类型均设置为“文本”,并尝试使用VBA通过使用Range("I:J").NumberFormat = "@"强制将格式设置为文本。仍然评估为“相同”。
  • 我尝试使用“公式”功能区中的“立即计算”选项来手动重新计算公式。仍然评估为“相同”。
  • 我可以在IF语句中写一个丑陋的公式来检查单元格是否匹配:=IF(OR(AND(I2="FALSE",J2="FALSE"), AND(I2="TRUE",J2="TRUE"), AND(I2="",J2="")),"Same","Difference")有没有一种方法可以简化此公式或强制I2 = J2公式正确计算,以防我们不得不处理数据不是真/假/空白?

2 个答案:

答案 0 :(得分:2)

原因是它被定义为FALSE = 0TRUE = 1(在公式中)或TRUE = -1(在VBA中)。

如果您比较A1=B1,则会比较这些单元格的FALSE的值为0,就像空白单元格的值为0一样。因此它们的值相等,因此被视为相同。

除了仅检查值A1=B1是否相同外,还使用TYPE function检查数据类型是否TYPE(A1)=TYPE(B1)

=IF(AND(A1=B1,TYPE(A1)=TYPE(B1)),"same","different")

enter image description here

这可防止隐式数据类型转换(例如,从布尔FALSE到整数0,反之亦然)。

TYPE()可以区分以下数据类型:

  • 1 =数字
  • 2 =文字
  • 4 =逻辑值(布尔值)
  • 16 =错误值
  • 64 =数组(矩阵)
  • 128 =复合数据

答案 1 :(得分:2)

您可以使用EXACT:

=IF(EXACT(A1,B1),"Same","Different")

enter image description here