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

时间:2015-07-12 01:41:05

标签: excel vba vlookup

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

数组(InfArray)是一个~100行×3列数组。数组的第一列已填充整数值。这些整数值对应于名称。在我的一个Excel工作表中,我有一个表,其中列出了每个整数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

它给了我一个Object变量或With block变量没有设置错误。

当我在运行后光标移动代码文本时,我看到了

NameSheet.Range("B2:C244")

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

Debug.Print NameSheet.Name

在错误之前的代码中,它为我提供了相关Excel工作表的正确名称。所以代码必须在正确的工作表中查找,但不知何故它没有得到范围......?

我迷路了,请帮忙

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

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

stoopid错误道歉。

谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

摆脱Set语句。它只应与对象变量一起使用。

但也......

在循环中将VBA和Excel之间的边界穿孔100次并不是一种有效的设计。抓住你的表一次,将它放在一个VBA数组中,然后只需旋转这个额外的数组来查找查找值会好得多。

答案 1 :(得分:1)

VLOOKUP function删除.ValueRange.Value property不属于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,这就是必要的。