2

我希望定义一些变量并将它们放在一个 vlookup 公式中。我在下面概述了我要实现的目标的简单示例。但是我不断收到“438”错误消息。

我已经放入了没有变量的原始 vlookup 和带有变量的 vlookup 不起作用。任何输入将不胜感激。我相信我已经正确定义了变量,但我认为这与我在公式中调用它们的方式有关。

Sub Macro1()

Dim Lookupcolumn As Range

Dim columnletter_start As String

Dim columnletter_End As String

columnletter_start = ActiveCell.offfet(0, 1).Value

columnletter_End = ActiveCell.offfet(0, 2).Value

Set Lookupcolumn = Sheets("Pricing Analysis").Cells.Find(What:="Cusip", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)

'ActiveCell.FormulaR1C1 = "=VLOOKUP(R[1]C[-8],'CS Primeview'!C[-6]:C[-4],3,FALSE)"

ActiveCell.FormulaR1C1 = "=VLOOKUP(Lookupcolumn,'CS Primeview'columnletter_start:columnletter_End,3,FALSE)"


End Sub
4

2 回答 2

3

问题是您确实可以通过Excel.WorksheetFunction.结构在 VBA 代码中使用任何 Excel 函数,并使用变量获得正确的结果。但是,对于您的代码,ActiveCell.FormulaR1C1 = "=VLOOKUP(Lookupcolumn,'CS Primeview'columnletter_start:columnletter_End,3,FALSE)"您尝试使用Range对象作为参考VLOOKUP,但 Excel 将参数理解为仅作为A1或命名区域的有效参考。

作为一种解决方案,尝试A1在您的代码中生成 -similar 参数。对于整个列A:A将去。祝你好运!

PS我注意到的另一件事:'CS Primeview'columnletter_start:columnletter_End-对于这一部分,您似乎错过了参考前的感叹号,以及连接部分的双引号,即"'CS Primeview'!" & columnletter_start & ":" & columnletter_End应该是正确的。

于 2013-01-15T12:56:22.090 回答
0

下面允许您定义变量单元格引用,然后将其转换为以 .formula 方式可读的格式。这是使用变量进行 vlookup 的一种简单方法,因为您可以在 excel 中编写公式,然后将它们复制/粘贴到代码中并更改查找值。这也适用于索引/匹配。

lookup_value = Cells(defined_row,defined_column).Address(False,False)
lookup_value = Replace(lookup_value, "", "")

ActiveCell.Formula = "VLOOKUP($" & lookup_value & ",'Sheet1'!$A:$B,2,0)"
于 2017-06-02T12:16:56.887 回答