在VBA中使用VLookup检索公司名称?

时间:2018-12-06 13:35:06

标签: excel vba vlookup

我目前正在设计一个宏,该宏会从下拉列表中自动填充Excel中的表格。基本上,一张表中有200家公司。这有一个名为经理的字段(供管理公司的人员使用),其中包含一个下拉列表,其中列出了所有12位可能的经理姓名。当我选择一个经理时,它将公司名称填充到表的相应部分。

唯一的问题是我试图在VBA中使用VLookup来检索公司名称。因此,例如,如果我从第123行中选择一位经理,我想将“ C”列中的公司名称分配给 companyName 变量(然后将其插入自动填充表中。

到目前为止,这是我的VLookup代码:

companyName = Application.WorksheetFunction.VLookup(ActiveCell.Address, Sheets("Companies").Range("C8:K208"), 1, False)

我已经看到了许多不同的方法来进行VLookups,通常我发现它们很混乱。每当它尝试进行查找时,它只会显示“ 运行时错误1004:无法获取WorksheetFunction类的VLookup属性”。

任何对这里出问题的帮助将不胜感激。自从我上次以任何形式查看Visual Basic以来已经有6年了,而且我没有使用Excel宏已有那么长时间了-非常抱歉,如果我遗漏了一些显而易见的东西!

2 个答案:

答案 0 :(得分:0)

从VBA:Lookup_value是要在数组第一列中找到的值。 Lookup_value可以是值,引用或文本字符串。

请参阅您显然要使用的引用部分:在VBA中,引用为ActiveCell.range("A5").cells(1, 2),而不是类似于Excel A1B7等。

companyName = Application.WorksheetFunction.VLookup(ActiveCell, _
Sheets("Companies").Range("C8:K208"), 1, False)

或(至少在我的2003版本中)

companyName = Application.VLookup(ActiveCell, _
Sheets("Companies").Range("C8:K208"), 1, False)

但是我仍然不会玩ActiveCell

答案 1 :(得分:-1)

我的建议是不要在 VBA 中使用 VLookup。它很慢,但如果你的表只有大约 200 个条目,它应该是可以管理的。我要做的是将表读入以经理姓名为键的字典中,其中包含公司名称的值。

有一个无 VBA 的替代方案:将表格的格式从 |公司|经理| |:-|:-| |公司1|经理1| 等等。 到 |公司|经理|公司| |:-|:-|:-| |公司1|经理1|公司1| 等等。 现在你可以为 VLookup 做一个单元格公式