2011-01-07 174 views
10

我正在遍歷包含價格列的電子表格,其格式爲double類型。我試圖找到電子表格中顯示的缺失值"n/a",但它不會讓我將其解釋爲string類型。Excel VBA - 解釋「N/A」值

包含"n/a"的單元格似乎是integer類型;我怎麼讀這個?

+0

當你用「n/a」打電話時,你想要做什麼?不知道我明白你的意思是'我怎麼讀這個'?或者你只是試圖檢查單元格是否包含缺失的值? – 2011-01-07 15:03:31

回答

6

的細胞含有#N/A通過VBA檢索作爲包含錯誤碼

一般來說其通常最好Excel單元分配給變體,因爲小區可以包含多個(雙),邏輯的變體,字符串或錯誤,你不能預先告訴單元格將包含什麼。

10

如果你想要做的是檢查是否有誤差值,則:

Application.WorksheetFunction.IsNA(rngToCheck.Value)

其中rngToCheck是要檢查的#N/A誤差值的小區

(有一個可從Excel中調用的工作表函數VBA here

您也可以檢查rngToCheck.Text,因爲它將包含字符串「#N/A 「

相反,如果你想閱讀中產生的#N/A單元格中的公式,然後rngToCheck.Formula會這麼做

+1

`rngToCheck.Text`是我的這個問題的解決方案。 – CarloC 2018-03-02 19:30:11

2

你可以準備你要檢查如下描述和評估包含特殊細胞的電子表格IS功能,很容易在VBA中檢查它們是否爲TrueFalse。或者,您可以編寫自己的VBA函數,如下所示。


Excel函數該檢查小區爲特殊值,例如:

=ISNA(C1) 

(假設C1是檢查的小區)。如果單元格爲#N/A,則返回True,否則返回False

如果你想顯示單元格區域是否(說「C1:C17」)具有包含#N/A或沒有任何細胞,它可能看起來合理使用:

=if(ISNA(C1:C17); "There are #N/A's in one of the cells"; "") 

可悲的是,這是不案件,它不會按預期工作。你只能評估一個單元。

然而,你可以用做間接

=if(COUNTIF(E1:E17;TRUE)>0; "There are #N/A's in one of the cells"; "") 

假設每個單元的E1通過E17包含ISNA公式每個細胞檢查:

=ISNA(C1) 
=ISNA(C2) 
... 
=ISNA(C17) 

你可以通過在列上右鍵單擊並選擇隱藏列E在Excel的上下文中隱藏菜單,因此電子表格的用戶無法看到此列。即使它們被隱藏,它們仍然可以被訪問和評估。


VBA可以傳遞的範圍對象作爲RANGE參數和單獨地通過使用FOR循環評估值:

Public Function checkCells(Rg As Range) As Boolean 
    Dim result As Boolean 
    result = False 
    For Each r In Rg 
     If Application.WorksheetFunction.IsNA(r) Then 
      result = True 
      Exit For 
     End If 
    Next 
    checkCells = result 
End Function 

該函數使用ISNA()函數在內部。它必須被放置在模塊內,然後可以在電子表格內使用,如:

=checkCells(A1:E5) 

它返回True,如果任何小區是#N/A,否則False。您必須將工作簿保存爲啓用宏的工作簿(擴展名XLSM),並確保宏未禁用。


Excel中提供了更多的功能,如以上:

ISERROR(), ISERR(), ISBLANK(), ISEVEN(), ISODD(), ISLOGICAL(), 
ISNONTEXT(), ISNUMBER(), ISREF(), ISTEXT(), ISPMT() 

例如,ISERR()檢查所有單元錯誤除了#N/A和有用的是檢測計算誤差。

所有這些功能在內置的介紹在Excel的幫助(按F1鍵,然後輸入「IS功能」作爲解釋搜索文本)。其中一些可以在VBA中使用,有些只能用作單元宏功能。