ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1870|回复: 5

[分享] vlookup的加强版函数,实现近似匹配或模糊匹配

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-21 17:21 | 显示全部楼层 |阅读模式
分享一段自定义函数,可理解为vlookup的加强版,可实现功能:

1、根据关键字模糊匹配
2、根据关键字近似匹配

如图所示
image.jpg

希望感兴趣的大佬可再完善下分享,谢谢!

  1. '    '自定义函数,有4个参数。

  2. '    '第1个是查找值

  3. '    '第2个是查找范围

  4. '    '第3个是查找结果在查找范围的第几列

  5. '    '第4个是匹配是否区分字母大小写,True区分,False不区分,默认不区分



  6. Function VlookupMe(ByVal strKey As String, _

  7. ByVal rngData As Range, _

  8. ByVal y As Long, _

  9. Optional ByVal m As Boolean = False) As String

  10.     Dim i As Long, x As Long, aData

  11.     Dim b As Boolean, intInstr As Long

  12.     Dim strM, strRes

  13.     Dim strMatches As String

  14.    

  15.     Set rngData = Intersect(rngData, rngData.Parent.UsedRange)

  16.     aData = rngData.Value

  17.     '判断是否区分字母大小写▼

  18.     If m Then strM = vbBinaryCompare Else strM = vbTextCompare

  19.     strRes = "#N/A" '初始值为错误值

  20.     strMatches = "" '用于存储匹配的结果

  21.    

  22.     For i = 1 To UBound(aData) '循环遍历数据源每行记录

  23.         b = True '逻辑标记初始化

  24.         For x = 1 To Len(strKey) '遍历每个字符是否都存在

  25.             intInstr = InStr(1, aData(i, 1), Mid(strKey, x, 1), strM)

  26.             If intInstr = 0 Then

  27.                 '判断关键值在查询字符串中是否存在

  28.                 b = False '如果不存在,则标记值改为false,同时退出该层循环

  29.                 Exit For '没必要找下去了,退出该层循环

  30.             End If

  31.         Next x

  32.         If b Then '如果逻辑标记仍然为true,说明全字匹配

  33.             '将匹配的结果添加到字符串中,用逗号分隔

  34.             strMatches = strMatches & "," & aData(i, y)

  35.         End If

  36.     Next i

  37.    

  38.     If Len(strMatches) > 0 Then

  39.         '去除开头多余的逗号,返回多个匹配结果

  40.         VlookupMe = Mid(strMatches, 2)

  41.     Else

  42.         '返回错误值

  43.         VlookupMe = strRes

  44.     End If

  45.    

  46.     Set rngData = Nothing: Erase aData

  47. End Function
复制代码


自定义函数-VLOOKUPME模糊匹配.zip

16.06 KB, 下载次数: 82

TA的精华主题

TA的得分主题

发表于 2023-6-21 18:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
现在有xlookup函数了。

TA的精华主题

TA的得分主题

发表于 2023-6-21 18:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
群文件或百度搜索“微软函数 for vba”,加载后你就有微软工程师(GG)的函数了

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-21 20:41 | 显示全部楼层
GG函数 发表于 2023-6-21 18:47
群文件或百度搜索“微软函数 for vba”,加载后你就有微软工程师(GG)的函数了

谢谢!

TA的精华主题

TA的得分主题

发表于 2023-6-21 20:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
点赞  鼓励支持下

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-21 20:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 15:29 , Processed in 0.034457 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表