Excel 嵌套IF语句返回#值
我有一个需要修改的预录宏。它使用Excel 嵌套IF语句返回#值,excel,if-statement,vba,Excel,If Statement,Vba,我有一个需要修改的预录宏。它使用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[
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))"
当前,base语句通常返回0,但不检查以
V*
开头的值。修改后的语句返回#值代码>我认为您需要用新的支票替换第一个0
结果,即在以下情况下替换此:
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,
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))=TRUE,
0,
VLOOKUP(""CN*"",RC[1]:RC[2],2,FALSE))"
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))"
除了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