【问题标题】:Using IFERROR with VLOOKUP将 IFERROR 与 VLOOKUP 一起使用
【发布时间】:2021-06-05 00:39:36
【问题描述】:

我通过使用 iferror 和 vlookup 的 VBA 将公式添加到电子表格中。以下是来自 VBA 的代码

 LastRow = Cells(Rows.Count, 1).End(xlUp).Row
 Range("O2:o" & LastRow).FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,'Controls'!a:b,2,FALSE),""Missing"")" 

但是当我回顾电子表格时,我在单元格中发现了以下公式

  =IFERROR(VLOOKUP($A2,Controls!A:(B),2,FALSE),"Missing")   

这总是导致“缺失”的值。当我在工作表中编辑公式并从查找范围中的 B 中删除括号时,公式通过在 Controls 工作表中找到值正确解析。

我尝试将查找范围从 A:B 更改为 A1:B500、$A$1:$B$500 和 $A:$B。我还尝试将其分解并使用各种串联。

我的问题是......我怎样才能让 VBA 不在我的查找范围内的 B 周围添加括号。

【问题讨论】:

    标签: excel vba vlookup


    【解决方案1】:

    您的问题来自您将常规地址 (A:B) 放入 R1C1-Formula 的事实。即使您的查找范围在另一个工作表中,Excel 也需要 R1C1 表示法中的地址。你的公式看起来像

    dim formula as string
    formula = "=IFERROR(VLOOKUP(RC1,Controls!C[-14]:C[-13],2,FALSE),""Missing"")"
    Range("O2:o" & LastRow).FormulaR1C1 = formula 
    

    因为这非常丑陋,我建议您为范围Controls!A:B 定义一个名称。然后你可以简单地将公式更改为

    formula = "=IFERROR(VLOOKUP(RC1,MyControls,FALSE),""Missing"")"
    

    【讨论】:

    • 感谢您快速正确的回复。该系列完美无瑕。
    【解决方案2】:

    我认为您需要使用 .Formula(...) 而不是 .FormulaR1C1(...) 并在您的字符串上使用大写字母,例如 ...A:B...

    否则,您可以执行以下操作:

    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Range("O2:o" & LastRow).FormulaR1C1 = "=IFERROR(VLOOKUP(RC1,'Controls'!a:b,2,FALSE),""Missing"")"
    Dim cell As Range
    For Each cell in Range("O2:O" & LastRow)
        cell.Formula = Replace(cell.Formula, "(B)","B")
    Next cell
    

    【讨论】:

    • 这将导致运行时错误,因为Replace 不适用于整个范围。您需要对所有单元格进行循环。您应该将公式写入属性Formula,而不是Value
    • 感谢@FunThomas,我改进了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多