為什麼我的 IFNA(或 ISNA)無法在 VBA 模組中運作?

為什麼我的 IFNA(或 ISNA)無法在 VBA 模組中運作?

我有以下程式碼:

Sub TestNA2()
IsThisNA = Sheets("sheet1").Range("D:D").Select
'Sheets("sheet1").Range("E:E").Select
Range("E2").Formula = "=IF(ISNA(D1),""Delete"","""")"
Range("E2").AutoFill Destination:=Range("E:E"), Type:=xlFillDefault
'ActiveCell.Value = "=IF(ISNA(D:D), ""Delete"","""")"
'ActiveCell.Value = IsThisNA
'MsgBox IsNA
End Sub

但在這一行出錯: ActiveCell.Value = IfNa(D6, "Delete")

我想要發生的事情是,如果 D6 是#NA,則將“刪除”一詞放入單元格 E6 中。

有人可以幫我解決這個代碼嗎?

答案1

錯誤在這一行:

ActiveCell.Value = IfNa(D6, "Delete")

改用:

Set IsThisNA = Sheets("items-1").Range("D6")
If Application.WorksheetFunction.IsNA(IsThisNA.Value) Then 
  ActiveCell.Value = "Delete"
End If

或者,更簡潔地說:

If Application.WorksheetFunction.IsNA(Sheets("items-1").Range("D6").Value) Then 
  ActiveCell.Value = "Delete"
End If

答案2

您應該從公式中建立一個字串。你有:

ActiveCell.Value = IfNa(D6, "Delete")

但這應該是:

ActiveCell.Formula = "=IF(ISNA(D6), ""Delete"","""")"

請注意,我將 的第二個參數新增IF為空字串,但您可能想要變更它。

注意:您可以使用IFNA自 Excel 2011 起取代IF(ISNA(..),..).

編輯:基於這個答案您可以將其擴展到整個列:

Range("E1").Formula = "=IF(ISNA(D1),""Delete"","""")"
Range("E1").AutoFill Destination:=Range("E:E"), Type:=xlFillDefault

您也可以設定固定範圍,例如E1:E6,如中所示這裡

編輯2:如果要填入整列,則應將公式放在第 1 行(例如E1),然後對整列進行自動填入(例如E:E)。如果您想要更少的行,您應該在自動填充目標中指出,例如:

Range("E2").Formula = "=IF(ISNA(D6),""Delete"","""")"
Range("E2").AutoFill Destination:=Range("E2:E10"), Type:=xlFillDefault

因此,自動填充範圍的起始位置與公式相同(E2在本例中)。

相關內容