使用A1参考将R1C1中记录的VLookUp公式转换为VBA公式

时间:2017-02-15 10:42:46

标签: excel vba excel-vba excel-formula

我有这个记录的宏,我想转换为普通的VBA宏代码,并将公式从AE2复制到lastrow。

"=VLOOKUP(RC[-22],'[test.xlsx]Sheet3'!C5:C6,2,0)" ' this is from another workbook

尝试转换为VBA。

dim wbSLW as workbook
dim wbSLWDir as String

wbSLWDir = "C\Documents\test.xlsx" 'this is not the constant directory or file name
set wbSLW  = workbooks.open(wbSLWDir)

ThisWorkbook.Activate
With Thisworkbook.Sheets(1)
   .Range("AE2") = "=VLOOKUP(I2," & wbSLW & "!E:F,2,0)" ' error line
end with

当我转换它时,它会返回Object does not support this property or method

4 个答案:

答案 0 :(得分:2)

更改您的设置,使其不使用R1C1格式,方法是转到(Excel 2010)设置/公式,然后取消选中R1C1参考样式。重新录制您的宏,然后进行编辑。您不应该有任何“RC”引用,但是如果您这样做,则将其中包含“RC”的所有引用更改为与“I2”中相同的样式。

答案 1 :(得分:0)

清理录制的代码:

With ActiveSheet.Range("AE2")
    .FormulaR1C1 = "=VLOOKUP(RC[-22],Temp!C[-30]:C[-29],2,0)"
    .AutoFill Destination:=Range("AE2:AE182"), Type:=xlFillDefault
End With 'ActiveSheet

RC[-22]是指在您拥有公式的单元格前22列的单元格。此处AE2是初始单元格,因此RC[-22] = {{1 }}

I2C[-30]分别指的是在您拥有公式的单元格之前的30和29列的列 这里C[-29]AE2 = C[-30]A = C[-29]

更改了公式:

B

或不转换公式:

Sheets(1).Range(perNum & 2).Formula = "=VLOOKUP(I2,Temp!A:B,2,0)"

答案 2 :(得分:0)

假设活动工作表名称为Sheet1

ActiveCell.Value = Application.WorksheetFunction.VLookup(Sheets("Sheet1").Range("I2"), Sheets("Temp").Range("A:B"), 2, 0)

答案 3 :(得分:0)

如果我理解正确,您想用vba代码替换下面一行中的工作簿名称:

=VLOOKUP(RC[-22],'[**test.xlsx**]Sheet3'!C5:C6,2,0)

不更改任何其他代码的最简单方法是:

=VLOOKUP(RC[-22],'[**" & wbSLW.Name & "**]Sheet3'!C5:C6,2,0)