2012-11-21 60 views
4

爲什麼=FALSE<10000000000評價爲FALSE=FALSE>10000000000評價爲TRUE?我嘗試了一些不同的數字,這似乎總是如此。Excel的FALSE像是無限的嗎?

+1

更準確地說,Excel中似乎會出現「False = Nothing」。 'True> Nothing'和'Nothing> Any value'。問題是True和False不是數值,它們是返回邏輯值的函數,它們的處理方式不同。我還沒有找到任何關於如何處理邏輯值的官方文檔。 –

+0

您實際上也可以看到'TRUE'的相同行爲。我最好的猜測是,既然你處理了兩種固有的不同類型(布爾和數字),你的結果將不會如你所期望的那樣。例如,'FALSE = 0'返回'FALSE',儘管0是數字表示。像@DanielCook我很難找到底層內部的文檔,但我最好的猜測是類型本身使得平等比較無用(順便說一句:)。 – RocketDonkey

回答

4

這是設計。搜索「排序疑難解答」的幫助以查看默認排序順序。

按升序排列,Microsoft Excel使用以下順序。

數字:數字從最小的負數到最大的正數排序。

字母數字排序:當您對字母數字文本進行排序時,Excel會按字符逐字符從左到右排序。例如,如果單元格包含文本「A100」,則Excel將單元格放置在包含條目「A1」的單元格之後,並且包含條目「A11」的單元格之前。

文本和文本,包括數字的排序按以下順序:

0 1 2 3 4 5 6 7 8 9(空格)! 「#$%&()*,。/:;?@ [\]^_`{|}〜+ < => ABCDEFGHIJKLMNOPQRSTU VWXYZ

忽略撇號(')和連字符( - ), :如果兩個文本字符串除了一個連字符相同,用連字符文本最後排序

邏輯值:在邏輯值,FALSE之前TRUE放置

錯誤值:所有錯誤值等於

空白:空白總是放在最後

默認排序順序很重要,因爲這是Excel設計用於比較不同數據類型的方式。邏輯值總是在文本和數字之後。錯誤值總是在那之後。空白總是最後的。當使用比較運算符(<,< =,=等)時,它使用與排序相同的比較算法(或者更可能的是,排序算法使用比較運算符代碼,這使得它們相同)。

TRUE<>1根據排序順序,但--TRUE=1。公式分析器意識到你正試圖否定某件事。如果它是一個布爾值,它將它轉換爲0或1.關於布爾值沒有任何0-ish或1-ish,它只是內部類型強制功能的結果。如果您輸入--"SomeString",它會執行相同的操作。它將字符串發送到Type Coercion函數,該函數報告「無法強制」,並以#VALUE結尾!在細胞中。

這就是'爲什麼這樣表現'的答案。我不知道'他們爲什麼這樣設計'的答案。

+0

+1 - 這就是我至少在尋找的答案:) – RocketDonkey

2

顯然布爾值TRUE/FALSE是不同的數據類型的數字。檢查此(http://msdn.microsoft.com/en-us/library/office/bb687869.aspx)以查看布爾變量以2字節存儲(或者對於特定體系結構而言是一個短整數)。然而,這是存儲數據的內存,因爲excel實際上具有布爾變量的特殊數據類。具體來說:數字的xltypeNum,字符串的xltypeStr和我們討論的xltypeBool。

相同類型之間的關係很清楚,現在真的是< 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輸出一個數值類型的數據,或者通過在函數中提供布爾值或者在表達式中使用布爾值var。

+0

精彩回答謝謝 –

+0

但是......'True = 1'是假的,'False = 0'也是假的。這種感覺好像不是答案。我不是說我可以給一個更好的。 –