vba excel vlookup:存储数组中的查找值,excel中的查找表,数组的输出值
我使用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
它给我一个对象variables或块variables没有设置错误。
当我运行后在代码文本上移动时,我看到了
NameSheet.Range("B2:C244")
是对象variables或块variables未设置错误所在的位置。 这真是令人困惑。 我把一个
Debug.Print NameSheet.Name
在错误之前的代码中,它给了我正确的Excel表单的名称。 所以代码必须在正确的工作表中查找,但不知何故,它没有得到范围…?
我迷路了,请帮忙
编辑:错误是在代码中的错字
NameSheet.Range("B2:C244")
本来应该
NamesSheet.Range("B2:C244")
请注意名称末尾的's'
它现在与编辑build议
工作代码行:
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错误。
感谢您的帮助。
摆脱Set语句。 它只能用于对象variables。
但也…
在循环中穿越VBA和Excel之间的边界100次并不是有效的devise。 抓住你的表一次,把它放在一个VBA数组中,然后通过这个额外的数组来查找查找值会更好。
从VLOOKUP函数中删除.Value
。 Range.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
我也已经减less到Application.VLookup
这是所有必要的。