VBA将函数VLOOKUP插入范围,在另一个工作簿中查找范围

时间:2013-11-22 22:49:58

标签: excel-vba vlookup vba excel

VBA将函数VLOOKUP插入范围,查找其他工作簿中的范围。使用filename_AcctMgr = Application.GetOpenFilename(, , "Select Acct Mgr File", "Select")实现包含查找表的文件,然后打开文件。我们称之为工作簿2.

在workbook1中,我将VLOOKUP公式添加到“F2”中,并在工作簿2,列A:C中查找列“A”值。我然后将公式复制到“F”列的所有行。

我找不到在A:C列中正确引用workbook2范围所需的语法。

ActiveCell.Formula = _
    "=VLOOKUP(activecell.offset(0,-5).address,'ws.name'!A:C,3,FALSE)"

有人能建议正确的语法吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

Range("F2").Resize(10).Formula = "=VLOOKUP(A2,[Book2]Sheet1!$A:$C,3,FALSE)"

或者

Range("F2:F10").Formula = "=VLOOKUP(A2,[Book2]Sheet1!$A:$C,3,FALSE)"

编辑:抱歉,我忘了关于文件名的文章作为变量:

Dim MyFile As String
Dim vSplit As Variant
Dim iCnt As Integer

MyFile = Application.GetOpenFilename(, , "Select Acct Mgr File", "Select")

vSplit = Split(MyFile, "\")
iCnt = UBound(vSplit)
vSplit(iCnt) = "[" & vSplit(iCnt) & "]"
MyFile = Join(vSplit, "\")

Range("F2:F10").Formula = "=VLOOKUP(A2,'" & MyFile & "Sheet1'!$A:$C,3,FALSE)"    

如果有人点击取消,您需要添加错误处理。此外,我怀疑您是否要将公式添加到列f中的所有行,因此只需定义所需的范围即可。我的例子是第2到第10行。

答案 1 :(得分:0)

我假设您希望工作表/范围的名称位于变量中,而不是硬编码。就这样,你在字符串中间有变量的名称,但它将被视为一个字符串,而不是一个包含字符串的变量。

我建议您执行以下操作:

Dim sheetName, lookupFrom, myRange           ' always declare your variables
sheetName = "This is the sheet name"         ' note I added some spaces to make it challenging
lookupFrom = ActiveCell.Offset(0, -5).address
myRange = "'" & sheetName & "'!A:C"          ' putting quotes around the string so it's always valid
ActiveCell.Formula = "=VLOOKUP(" & lookupFrom & "," & myRange & ", 3, FALSE)"

你当然可以同时做到这一点 - 看起来很麻烦:

ActiveCell.Formula = "=VLOOKUP(" & ActiveCell.Offset(0, -5).Address & ", '" & sheetName & "'!A:C, 3, TRUE)"

进一步说明 - sheetName当然可以包含其他工作簿的名称 - 但是您需要工作簿和工作表的名称......所以

sheetName = "[Book2]Sheet1"

没关系。

在您的示例中,您使用了ws.name(没有正确引用) - 但由于您需要工作簿和工作表名称以确保引用正确的数据,因此不会为您提供完整路径。最好是明确的 - 如果Excel可以对你想要的东西做出错误的假设,它会 - 并且你将会留下挠头......

由于您实际上已经显示您已打开该书,因此您在变量filename_AcctMgr中拥有该文件的名称(工作簿)。然后你应该可以使用:

sheetName = "[" & filename_acctMgr & "]Sheet1"

从那里拿走。