0

我有一个需要修改的预先录制的宏。它使用IF语句来检查值是否N/A为 0 并将其更改为 0,除非它以 开头,否则它将CN单元格设置为该CN*值。我需要该IF语句来检查CN*orV*并返回其中之一的值。

IF语句需要检查该值是否为N/A并将单元格更改为 0,否则该值是否以该值开头CNV需要返回该值。

基础声明:

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*。修改后的语句返回#VALUE!

4

2 回答 2

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))"
于 2013-05-24T23:22:40.597 回答
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

于 2013-05-25T05:33:05.117 回答