为什么=FALSE<10000000000
评估为FALSE
,=FALSE>10000000000
评估为TRUE
?我尝试了一些不同的数字,这似乎总是如此。
答案 0 :(得分:4)
这是设计的。搜索“排序排除故障”的帮助以查看默认排序顺序。
在升序排序中,Microsoft Excel使用以下顺序。
数字:数字从最小的负数到最大的正数排序。
字母数字排序:当您对字母数字文本进行排序时,Excel会逐个字符地从左到右排序。例如,如果单元格包含文本“A100”,则Excel将单元格放置在包含条目“A1”的单元格之后,并且在包含条目“A11”的单元格之前。
包含数字的文字和文字按以下顺序排序:
0 1 2 3 4 5 6 7 8 9(空间)! “#$%&amp;()*,。/:;?@ [\ _] ^ _` {|}〜+&lt; =&gt; A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
忽略撇号(')和连字符( - ),但有一个例外:如果除连字符外两个文本字符串相同,则带连字符的文本最后排序。
逻辑值:在逻辑值中,FALSE位于TRUE之前。
错误值:所有错误值均相等。
空白:空白总是排在最后。
默认排序顺序很重要,因为这是Excel设计用于比较不同数据类型的方式。逻辑值始终在文本和数字之后。错误值总是在此之后。空白永远是最后的。当你使用比较运算符(&lt;,&lt; =,=等)时,它使用与排序相同的比较算法(或者更有可能的是,排序算法使用比较运算符代码,这使得它们相同)。
TRUE<>1
根据排序顺序,但--TRUE=1
。公式解析器认识到你试图否定某些东西。如果它是布尔值,则将其转换为0或1.布尔值没有0-ish或1-ish,它只是内部类型强制函数的结果。如果您键入--"SomeString"
,它会执行相同的操作。它将字符串发送到Type Coercion函数,该函数报告“Unable to coerce”并最终为#VALUE!在牢房里。
这就是'为什么它表现得那么'的答案。我不知道'为什么他们这样设计'答案。
答案 1 :(得分:2)
显然,布尔值TRUE / FALSE是数字的不同数据类型。检查这个(http://msdn.microsoft.com/en-us/library/office/bb687869.aspx)以查看布尔变量是以2字节存储的(或者对于某个体系结构而言,是一个短整数)。然而,这是存储数据的内存,因为excel实际上有一个特殊的布尔变量数据类。具体来说:xltypeNum表示数字,xltypeStr表示字符串,xltypeBool表示我们讨论的内容。
相同类型之间的关系是明确的,现在是什么TRUE&lt; 1000呢?可能没有任何意义 - 有用。
克服这个问题的方法:
=ABS(BOOLEAN_VAR), i.e. =ABS(FALSE) --> 0 and =ABS(TRUE) --> 1
或
=INT(BOOLEAN_VAR), i.e. =INT(FALSE) --> 0 and =INT(TRUE) --> 1
或
=BOOLEAN_VAR*1, i.e. =FALSE*1 --> 0 and =TRUE*1 --> 1
或
=+BOOLEAN_VAR, i.e. =+FALSE --> 0 and =+TRUE --> 1
正如您在这些方面看到的那样,您可以强制excel输出数值类型的数据,方法是将boolean提供给函数或使用表达式中的boolean var。