Вложенный оператор IF возвращает значение #VALUE

У меня есть предварительно записанный макрос, который необходимо изменить. Он использует оператор IF для проверки, является ли это значение N/A и изменяет его на 0, если только он не начинается с CN , а затем устанавливает ячейку в значение CN* . Мне нужен оператор IF для проверки CN* или V* и возврата значения.

Оператор IF должен проверить, является ли это значение N/A и изменить ячейку на 0, иначе, если значение начинается с CN или V оно должно вернуть это значение.

Базовый оператор:

 ActiveCell.FormulaR1C1 = _ "=IF(ISNA(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))=TRUE,0,VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))" 

Модифицированный материал:

 ActiveCell.FormulaR1C1 = _ "=IF(ISNA(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))=TRUE,0,VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE)) ORIF(ISNA(VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE))=TRUE,0,VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE))" 

В настоящее время базовый оператор возвращает 0 нормально, но не проверяет значения, начинающиеся с V* . Измененный оператор возвращает #VALUE!

Добавляя к ответу mousio, вы можете также использовать IFERROR вместо простого IF , так как вы пересчитываете значение, полученное из условия. Для первого это будет:

 ActiveCell.FormulaR1C1 = _ "=IFERROR(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE),0)" 

Это означает, что если VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE) возвращает ошибку, вместо этого вы получаете 0 , а если нет, вы получаете значение VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE) .

И измененный:

 ActiveCell.FormulaR1C1 = _ "=IFERROR(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE), IFERROR(VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE), 0))" 

В этом случае, если VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE) возвращает ошибку, он проверяет наличие VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE) , и если это также возвращает ошибку, оно возвращает 0 .

Я бы подумал, что вам нужно заменить свой первый результат на новую проверку, то есть заменить этот сингл, if :

 ActiveCell.FormulaR1C1 = _ "=IF(ISNA(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))=TRUE, 0, VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))" 

по этому вложенному, if :

 ActiveCell.FormulaR1C1 = _ "=IF(ISNA(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))=TRUE, IF(ISNA(VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE))=TRUE, 0, VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE)), VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))" 

(с учетом удобочитаемости)

Может быть, более понятно, если вы затем инвертируете условия и выключаете оставшиеся аргументы:

 ActiveCell.FormulaR1C1 = _ "=IF(ISNA(VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))=FALSE, VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE), IF(ISNA(VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE))=FALSE, VLOOKUP(""V*"",RC[1]:RC[2],2,FALSE), 0))" 
  • определение приложения или объектная ошибка с выражением if
  • Запрос Excel относительно операторов IF
  • Различия между двумя столбцами
  • Excel IF Дата меньше, чем Дата не работает
  • VBA Actuarial Triangle Код If-Then-Else
  • excel - расписание, если день и день после отдыха
  • Excel VBA: Single Loop + If-Statement; Ошибка времени выполнения 1004
  • Обработка ошибок Excel - поиск и возврат идентификатора сотрудника
  • Формула Excel для If
  • Excel - найти значение и скопировать в разные листы
  • Макро (VBA) в Excel для добавления границ и слияния ячеек, если ячейки не пусты
  • Interesting Posts

    Автоматизировать текст в объекте таблицы сводной таблицы в PowerPoint с помощью VBa

    Метод вызова диапазона внутри ошибки MsgBox

    Пакетное создание текстовых файлов, каждый новый файл с разным текстом, извлеченным из excel

    VBA: изменить и сохранить в формате .dat, не изменяя его в формате .txt?

    Создание новых рабочих листов на основе значений данных строки

    До тех пор, пока IsEmpty не пройдет через пользовательские диапазоны

    SSIS, интегрированный с SQL-агентом

    Как запустить функцию, которая находится над надстройкой в ​​Excel

    index-small-if с несколькими критериями из одного столбца

    Ограничение доступа к исходным данным Excel

    Выключить «все», пока работает макрос VBA

    Экспорт KendoUI для превосходного выравнивания нижнего колонтитула

    SQL Server: получить последние записи строки (более одного) с помощью sql-запроса

    Запись Excel в Java с анализируемой информацией

    Как я могу удалить соединение с книгой, сделанное с помощью Workbook.caller ()

    Давайте будем гением компьютера.