2013-05-24 4 views
0

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

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

Base заявление:

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

Модифицированный satement:

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!

ответ

1

Добавление ответа 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.

+0

Спасибо Джерри, Этот код работает безупречно в моем распространении. – user2419115

+0

@ user2419115 Awesome! : D – Jerry

1

Я думаю, вам нужно заменить ваш первый 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))" 

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

Это может быть более ясным, если вы затем инвертировать условия и перейти остальные if аргументы:

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))" 
+0

+1 Yup, вложенное может быть самым простым решением здесь. – Jerry

Смежные вопросы