如果公式大于零比较则对文本值返回 TRUE

如果公式大于零比较则对文本值返回 TRUE

我正在排除一个我认为是基本 IF 公式的故障,我预计它会产生 FALSE 结果。该公式是:

=IF(A1>0,"True value","False value")

公式放在单元格 C1 中。当单元格 A1 的值是文本值时,IF 函数的结果为“真值”(不带引号)。我原本以为结果是“假值”,因为单元格 A1 中的值是文本。当使用明显的文本时就会发生这种情况,例如仅包含字母的值(如“黄色”)!

发生了什么事?我读到这个帖子来自一位对此问题进行了自己实验的用户。我接受他的解释,但有人能提供更技术性的解释,说明为什么 Excel 中的文本被视为大于零吗?我的预期是 Excel 在对文本使用大于比较运算符时会出错。

答案1

您可以查看:

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/comparison-operators

这与 VBA 中事情发生的方式有关,但鉴于 VBA 可以直接利用单元格值而无需声明变量,因此也无需声明类型,它大概能够从原始材料中决定类型并继续前进。

在页面的大约 2/3 处,其中一个表格(似乎不是第一个涉及该主题的表格)包含了最多的“适用于此处”的组合实例。

本质上,这个想法是,如果其中一个值是字符串,则执行的比较将是字符串比较,这似乎会调用用于对单元格进行排序的任何确切过程。因此,正如人们所期望的那样,在排序时,数值将位于字符串值之前。其他值也适用:逻辑值、空值、空白等。您将看到 VBA 使用规则(因此单元格端 Excel 也可能如此),因此,例如,空白可能会被视为 0,但空值可能不会,这取决于不匹配的确切类型。

为了避免这个问题,请先在另一个处理中检查文本IF()是否存在,然后执行“>”比较。ISTEXT()例如,或者甚至只是:

=IFERROR(IF(A1,"True value","False value"),"Non-numerical value present")

它会满足您的确切用途,因为您正在测试不等于 0 的数字。在上述IF()测试中,Excel 查看 A1 并logical仅执行测试:0 是FALSE,任何其他数值都是,TRUE这与您的 A1>0 测试相同。因此,如果它不是 0,您将获得“真值”,如果是 0,您将获得“假值”……但总的来说,可以说,#VALUE!如果位数不是数字,逻辑测试会产生错误,因此您使用 将所有字符串分开IFERROR()

相关内容