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)"
有人能建议正确的语法吗?
答案 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"
从那里拿走。