Excel VBA hlookup功能

时间:2015-02-25 13:08:21

标签: excel vba excel-vba

我正在尝试使用excel VBA HLookup功能。我尝试过两种方法,都会产生错误。谁能解释一下我做错了什么?

首先尝试:

    lookupValue = Worksheets(1).Name & "!A1"
    tableArray = Worksheets(3).Name & "!$A$1:$" & Col_letter & "$1"
    Worksheets("Comparison").Cells(1, 2).Value = "=HLookup(" & lookupValue _
    & ";" & tableArray & ";1;FALSE)"

第二次尝试:

    tda = Worksheets(1).Cells(1, 1).Value ' I also tried using tda without .Value
    Table = Worksheets(3).Range(Cells(1, 1))
    Worksheets("Comparison").Cells(1, 2).Value = WorksheetFunction. _
    HLookup(tda, Table, 1, False)

2 个答案:

答案 0 :(得分:2)

对于您的第一个,您需要使用美国区域设置,所以使用逗号分隔符,并且您应该将表单名称用单引号括起来,以防它们包含空格或看起来像特殊名称(例如日期):

lookupValue = "'" & Worksheets(1).Name & "'!A1"
tableArray = "'" & Worksheets(3).Name & "'!$A$1:$" & Col_letter & "$1"
Worksheets("Comparison").Cells(1, 2).Formula = "=HLookup(" & lookupValue _
& "," & tableArray & ",1,FALSE)"

,对于第二个,您必须为表参数使用范围对象:

tda = Worksheets(1).Cells(1, 1).Value ' I also tried using tda without .Value
Set Table = Worksheets(3).Range(Worksheets(3).Cells(1, 1), Worksheets(3).Cells(1, Col_letter))
Worksheets("Comparison").Cells(1, 2).Value = WorksheetFunction. _
HLookup(tda, Table, 1, False)

我假设Table被声明为Variant,Object或Range。

请注意,如果查找值不匹配,您仍会收到运行时错误。

答案 1 :(得分:1)

你正在做的事情通常是有效的,即创建一个包含你想要调用和输入它的函数的字符串。

我认为这不是最安全的方法,因为如果从使用不同语言的Excel运行该宏,它将无效。

从VBA调用调用Excel函数的正确方法是:例如:

cells(1,2) = Application.WorksheetFunction.VLookup(123,Range("A1:C100"),3,FALSE)

无论如何,如果您更愿意使用这种字符串方法,那么第一次尝试的问题就是

"=HLookup(" & lookupValue _
    & ";" & tableArray & ";1;FALSE)"

产生字符串:

=HLookup(Sheet1!A1;Sheet3!$A$1:$B$1;1;FALSE)

请注意,您使用的是分号,而您应该使用分号。

第二次尝试中的问题是.Range属性将字符串作为输入,所以你不能Range(Cells(1,1))你应该做.Range("A1:A3")

之类的事情 希望它有所帮助!