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 数组中,然后旋转这个附加数组以查找查找值。
我正在使用 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 数组中,然后旋转这个附加数组以查找查找值。