次のコードがあります:
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
空の文字列として追加しましたが、これを変更することもできます。
注: 使用できます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
この例では)。