如何在VBA中结合通配符与单元格范围变量执行XLOOKUP?
解决VBA中XLOOKUP通配符与Range变量拼接的问题
你的问题出在直接将Range对象与字符串通配符拼接——Mod_SelectColumns.PnPRefRange是Range对象,不是字符串值,VBA无法直接把对象和"*"拼接成有效的查找通配符字符串。当你用字符串占位符时,本质是直接传入了文本值,所以能正常工作。
修复方案:
直接提取Range对象的单元格文本值,再和通配符拼接:
如果
PnPRefRange是单个单元格的Range:Application.XLOOKUP("*" & Mod_SelectColumns.PnPRefRange.Value & "*", _ Worksheets("Worksheetname").Range("C3:C119"), _ Worksheets("Worksheetname").Range("B3:B119"), _ "NOT FOUND", 2)这里用
.Value获取单元格的内容,也可以用.Text(如果需要匹配单元格显示的文本格式)。如果
PnPRefRange是多单元格Range:
你需要循环遍历每个单元格,逐个执行XLOOKUP,或者先把Range的值转成数组再处理,比如:Dim cell As Range For Each cell In Mod_SelectColumns.PnPRefRange Dim result As Variant result = Application.XLOOKUP("*" & cell.Value & "*", _ Worksheets("Worksheetname").Range("C3:C119"), _ Worksheets("Worksheetname").Range("B3:B119"), _ "NOT FOUND", 2) ' 处理每个result的逻辑 Next cell
补充说明:
XLOOKUP的第5个参数设为2(通配符匹配模式)是正确的,只要查找值是带*的字符串就能生效,关键是要确保拼接后的是字符串类型,而不是Range对象。
内容的提问来源于stack exchange,提问作者DanielvL
相关产品推荐
相关产品推荐

