我正在通过使用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")
这总是导致值"Missing“。当我在工作表中编辑公式并从查找范围中的B中删除括号时,通过在控件工作表中找到值来正确解析公式。
我已经尝试将查找范围从A:B更改为A1:B500、$A$1:$B$500和$A:$B,还尝试将其拆分并使用各种连接。
我的问题是。如何让VBA不在查找范围内添加B周围的括号。
发布于 2021-03-06 16:22:53
您的问题源于您将常规地址(A:B
)放入R1C1公式中。即使您的查找范围在另一个工作表中,Excel也希望地址采用R1C1表示法。你的公式应该是这样的
dim formula as string
formula = "=IFERROR(VLOOKUP(RC1,Controls!C[-14]:C[-13],2,FALSE),""Missing"")"
Range("O2:o" & LastRow).FormulaR1C1 = formula
由于这非常难看,我建议您为range Controls!A:B
定义一个名称。然后,您可以简单地将公式更改为
formula = "=IFERROR(VLOOKUP(RC1,MyControls,FALSE),""Missing"")"
发布于 2021-03-06 16:26:57
我认为您需要使用.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
https://stackoverflow.com/questions/66507680
复制