Почему моя 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.Значение = IfNa (D6, "Delete")

то, что я хочу, чтобы произошло, - это поместить слово "удалить" в ячейку E6, если D6 - #NA.

кто-нибудь может помочь мне с этим кодом?

5
задан DanM
источник

2 ответов

ошибка в этой строке:

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
1
отвечен duDE 2016-01-28 20:51:03
источник

вы должны сделать строку из Формулы. У вас есть:

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, как указано в здесь.

Edit 2: если вы хотите заполнить его для всего столбца, вы должны поместить формулу в строку 1 (например,E1), и сделайте автоматическое заполнение по всему столбцу (например,E:E). Если вы хотите меньше строк, вы должны указать это в назначении автозаполнения, например:

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

так автоматический ряд заполнения начинает на то же место, что и Формула (E2 в этом примере).

1
отвечен agold 2017-05-23 12:41:46
источник

Другие вопросы microsoft-excel vba