VBA宏,替换和公式

时间:2017-11-13 20:50:02

标签: excel vba excel-formula vlookup

我正在尝试用vlookup函数替换某些单元格。

Columns("R").Select
Columns("R").Replace What:="N/A", _
                        Replacement:="=VLOOKUP(RC[-15], [test.xls]test_data'!$C:$R , 16, FALSE)", _
                        LookAt:=xlPart, _
                        SearchOrder:=xlByRows, _
                        MatchCase:=False, _
                        SearchFormat:=False, _
                        ReplaceFormat:=False

上面的当前代码不会用vlookup替换N / A.它只是保持细胞不变。

如果我删除了" ="在括号中,所以它看起来像这样:

Replacement:="VLOOKUP(RC[-15], [test.xls]test_data'!$C:$R , 16, FALSE)"

这确实取代了我的细胞,但不会采用公式格式。

有人可以帮忙吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

您的公式存在一些问题,导致Excel无法实际接受它。您正在尝试使用

=VLOOKUP(RC[-15], [test.xls]test_data'!$C:$R , 16, FALSE)

但那

  • 由于缺少引号而存在语法错误,即[test.xls]test_data'应为'[test.xls]test_data'
  • 混合使用R1C1表示法(RC[-15])和A1表示法($C:$R

您打算使用的公式可能是

=VLOOKUP(RC[-15], '[test.xls]test_data'!C3:C18 , 16, FALSE)

所以你可能意味着你的代码要说

Columns("R").Select
Columns("R").Replace What:="N/A", _
                     Replacement:="=VLOOKUP(RC[-15], '[test.xls]test_data'!C3:C18, 16, FALSE)", _
                     LookAt:=xlPart, _
                     SearchOrder:=xlByRows, _
                     MatchCase:=False, _
                     SearchFormat:=False, _
                     ReplaceFormat:=False

现在,如果设置了Excel设置以便使用R1C1表示法作为默认设置,那么对公式的更正可能就是您必须更改的所有内容。

但是,如果您使用A1表示法作为默认值,则由于C3:C18对使用的表示法不明确,该公式将无法正确解释。

因此,您可能需要暂时将Excel设置为使用R1C1表示法:

Application.ReferenceStyle = xlR1C1
Columns("R").Select
Columns("R").Replace What:="N/A", _
                     Replacement:="=VLOOKUP(RC[-15], '[test.xls]test_data'!C3:C18, 16, FALSE)", _
                     LookAt:=xlPart, _
                     SearchOrder:=xlByRows, _
                     MatchCase:=False, _
                     SearchFormat:=False, _
                     ReplaceFormat:=False
Application.ReferenceStyle = xlA1