vba excel vlookup:在存储的数组中查找值,在excel中查找table,输出值到数组

vba excel vlookup: lookup value in stored array, lookup table in excel, output value to array

我正在使用 vlookup 填充 vba 中的数组。

数组 (InfArray) 是一个约 100 行乘 3 列的数组。数组的第一列已经填充了整数值。这些整数值对应于一个名称。在我的一个 excel sheet 中,我有一个 table,其中列出了每个整数 ID 及其相应的名称。所以我想使用 vlookup 函数来检查 id 整数并用实际名称填充数组的第二列。

这是我必须分配第二列的代码语句(原始错误代码):

For y = 1 To UBound(InfArray,1)
    Set InfArray(y,2) = Application.WorksheetFunction.VLookup(InfArray(y,1), NameSheet.Range("B2:C244"), 2, False).Value
Next y

它给我一个对象变量或 With 块变量未设置错误。

当我将光标移到 运行 之后的代码文本上时,我看到

NameSheet.Range("B2:C244")

是对象变量或块变量未设置错误所在的位置。这真是令人困惑。我放了一个

Debug.Print NameSheet.Name

在错误之前的代码中,它为我提供了相关 excel sheet 的正确名称。所以代码一定是在寻找正确的工作sheet,但不知何故它没有得到范围...?

我迷路了,求助

编辑:错误是代码中的拼写错误

NameSheet.Range("B2:C244")

应该是

NamesSheet.Range("B2:C244")

注意NameS

末尾的's'

它现在适用于建议的编辑

工作代码行:

For y = 1 To UBound(InfArray,1)
    InfArray(y,2) = Application.WorksheetFunction.VLookup(InfArray(y,1), NamesSheet.Range("B2:C244"), 2, False)
Next y

对愚蠢的错误表示歉意。

谢谢你的帮助。

VLOOKUP function. The Range.Value property 中删除 .Value 不是 VLOOKUP 的一部分。

For y = 1 To UBound(InfArray,1)
    InfArray(y,2) = Application.VLookup(InfArray(y,1), NameSheet.Range("B2:C244"), 2, False)
Next y

我也减少到 Application.VLookup 这就是所有必要的。

去掉 Set 语句。它应该只与对象变量一起使用。

而且...

在循环中穿刺 VBA 和 Excel 之间的边界 100 次并不是一个有效的设计。最好抓取 table 一次,将其放在 VBA 数组中,然后旋转这个附加数组以查找查找值。