我有一个需要修改的预先录制的宏。它使用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!
答案 0 :(得分: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))"
答案 1 :(得分: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
。