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 に「delete」という単語を入力することです。

誰かこのコードについて助けてくれませんか?

答え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"","""")"

2 番目のパラメータをIF空の文字列として追加しましたが、これを変更することもできます。

注: 使用できますIFNAExcel 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この例では)。

関連情報