2014-03-26 121 views
5

我有以下的功能,在我的查詢創建一個列:IIF(ISERROR())函數返回仍然#ERROR

MTD:IIF(ISERROR(FormatNumber([62XX] [F40])),0! ,FormatNumber([62xx]![F40]))

這與Excel文件相關聯,並且人們將數字和文本放在同一列(本例中爲F40)。我需要知道我正在看的東西是數字還是文字。如果它是文本我想要一個零,如果它是一個數字我想要的數字。我知道當我在文本行上使用FormatNumber([C107_62xx]![F40])時,出現錯誤。我會假設,當我得到一個錯誤,然後我上面的iif公式將它轉換爲零,世界會高興。出於某種原因,即使使用我的iif語句,我仍然得到#error。我究竟做錯了什麼?

我也試過使用IsNumeric函數,但我仍然得到#NUM!通過的錯誤。

回答

5

IsError不會做你認爲的事。從幫助主題,它「返回一個布爾值,指示表達式是否爲錯誤值。」不是表達式是否觸發了有錯誤,而是表達式是錯誤值。

對不起,這種解釋可能不夠清楚,但我不知道如何做得更好。所以我建議你考慮這個IsNumeric()表達式來表達你想要的東西。

IIf(IsNumeric([62xx]![F40]), FormatNumber([62xx]![F40]), 0) 

下面是在與下面的輸出的查詢相同的表達。

SELECT 
    [62xx].F40, 
    IIf(IsNumeric([62xx]![F40]), FormatNumber([62xx]![F40]), 0) AS MTD 
FROM [62xx]; 
F40 MTD 
----- ---- 
foo 0 
1  1.00 
2.345 2.35 
bar 0 
+0

我不明白爲什麼ISERROR沒有做什麼,我想這樣做,但我也嘗試你的建議。由於某種原因IsNumeric不太可靠。我不喜歡從peple做瘋狂的東西的電子表格中提取數據。這似乎工作雖然: 'IIf(IsNumeric(FormatNumber([62xx]![F40])),FormatNumber([62xx]![F40]),0)' – Nigel

+0

有時Excel和Access不會像我希望他們。謝謝@HansUp的幫助。 – Nigel

+0

是的,關於第一部分...... IsError()不能用來捕獲錯誤,只告訴你是否有錯誤值。例如,除以零觸發錯誤#11,「除以零」。但是'IsError(1/0)'不會說真;相反,它會觸發錯誤#11。 「IsError(11)」說錯了。實際的錯誤值是不同類型的生物。而'IsError(CVErr(11))'確實返回True。 – HansUp