Почему моя 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.

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

26
задан DanM
16.04.2023 14:19 Количество просмотров материала 3473
Распечатать страницу

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 2023-04-17 22:07

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

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 2023-04-18 00:24

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх