Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 嵌套IF语句返回#值_Excel_If Statement_Vba - Fatal编程技术网

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