Por que meu IFNA (ou ISNA) não funciona em um módulo VBA?

Por que meu IFNA (ou ISNA) não funciona em um módulo VBA?

eu tenho o seguinte código:

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

mas ocorre um erro nesta linha: ActiveCell.Value = IfNa(D6, "Delete")

o que eu quero que aconteça é colocar a palavra “delete” na célula E6 se D6 for #NA.

alguém pode me ajudar com esse código?

Responder1

O erro está nesta linha:

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

Use em vez disso:

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

ou, mais sucintamente:

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

Responder2

Você deve fazer uma string com a fórmula. Você tem:

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

Mas isso deveria ser:

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

Observe que adicionei o segundo parâmetro para IFser a string vazia, mas você pode querer alterar isso.

Nota: você pode usarIFNAdesde o Excel 2011 em vez de IF(ISNA(..),..).

Editar:baseado emesta respostavocê pode estendê-lo para toda a coluna:

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

Você também pode colocar um intervalo fixo, por exemplo E1:E6, conforme indicado emaqui.

Editar 2:se quiser preencher a coluna inteira, você deve colocar a fórmula na linha 1 (por exemplo E1), e fazer o preenchimento automático em toda a coluna (por exemplo E:E). Se você quiser menos linhas você deve indicar isso no destino de preenchimento automático, por exemplo:

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

Portanto, o intervalo de preenchimento automático começa no mesmo local da fórmula ( E2neste exemplo).

informação relacionada