我有一个电子表格,该电子表格使用VBA从数据库中检索数据并将其复制到工作表中。我需要比较两列以查看它们是否匹配。可能的值为“ TRUE”,“ FALSE”或空白单元格。
如果值不同,我有一个简单的公式来标记行:=IF(I2=J2,"Same","Difference")
如果值匹配,或者它们是TRUE / BLANK或TRUE / FALSE,则此公式可以正常工作,但是当存在FALSE和空白单元格时,该公式的计算结果不符合预期!
如果我输入单词“ FALSE”,则该公式将正确求值(如下图所示)。仅当VBA从数据库粘贴数据时,该公式似乎才被激活。
我怀疑这与Excel将FALSE和空白单元格都等同于“ 0”有关,但是我无法弄清楚如何轻松解决此“功能”。我尝试了几件事:
Range("I:J").NumberFormat = "@"
强制将格式设置为文本。仍然评估为“相同”。=IF(OR(AND(I2="FALSE",J2="FALSE"), AND(I2="TRUE",J2="TRUE"), AND(I2="",J2="")),"Same","Difference")
有没有一种方法可以简化此公式或强制I2 = J2公式正确计算,以防我们不得不处理数据不是真/假/空白?答案 0 :(得分:2)
原因是它被定义为FALSE = 0
和TRUE = 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")
这可防止隐式数据类型转换(例如,从布尔FALSE
到整数0
,反之亦然)。
TYPE()
可以区分以下数据类型:
答案 1 :(得分:2)