Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3533|回复: 2

[已解决]部分匹配求解

[复制链接]
发表于 2014-8-19 15:07 | 显示全部楼层 |阅读模式
这几天在函数社区上发了一个有关于部分匹配的问题,但一直没有得到满意的解答,经过咨询多位高手的建议后,决定求助VBA的力量。
题目如下:
已知:A列为 - 编号 、 B列为纪录(字符串) 、 D、E、F列 - 需要查询的字符串
求解:在B列的字符串中查找同时包含D、E、F列字符串的单元格, 并在 H 列返回查找结果中最高匹配度的单元格的相应A列编号,在 I 列返回其匹配精确度。
特例情况:
特例1:
         倘若符合最高匹配值的单元格有多个, 请返回多个(不超过3个)符合最高匹配值的单元格的对应A列编号.
         (最好可以在一个单元格内把符合最高匹配值的多个对应编号用逗号分开显示,实在不行,显示在同一行的几个单元格也行)
         举例: D15:E15 在 B19 和 B27 中都能找到100% 的比配, 当有多个匹配都能达到最高匹配值max(), 请返回多个匹配位置编号00015,00023 。
特例2:  
         D17:E17在所有记录中都找不到任何比配 0%,  请返回 n/a.
烦劳能人指点帮忙,谢谢
2014-08-18_224753.jpg
部分匹配b.zip (8.02 KB, 下载次数: 5)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-8-19 18:44 | 显示全部楼层    本楼为最佳答案   
H5 =SUBSTITUTE(TEXT(SUMPRODUCT(LARGE((MMULT(ISNUMBER(SEARCH(D5:F5,B$5:B$31))*(D5:F5<>""),{1;1;1})=MAX(1,MMULT(ISNUMBER(SEARCH(D5:F5,B$5:B$31))*(D5:F5<>""),{1;1;1})))*(ROW($5:$31)-4),{1,2,3})*10^{0,5,10}),"00000!, 00000!, 00000"&";;!n!/!a;"),"00000, ",)

I5 =IF(H5="n/a","",MAX(MMULT(ISNUMBER(SEARCH(D5:F5,B$5:B$31))*(D5:F5<>""),{1;1;1}))/COUNTA(D5:F5))
回复

使用道具 举报

 楼主| 发表于 2014-8-20 04:19 | 显示全部楼层
本帖最后由 glhfgtd 于 2014-8-20 05:13 编辑
AmoKat 发表于 2014-8-19 18:44
H5 =SUBSTITUTE(TEXT(SUMPRODUCT(LARGE((MMULT(ISNUMBER(SEARCH(D5:F5,B$5:B$31))*(D5:F5""),{1;1;1})=MAX( ...
牛人啊!!!!!,没想到您真的只用函数公式就把这难题解答出来了,除了在text公式的格式上有点小疏忽外,其它的全部到位。厉害,向您的excel水平学习和致敬!
再次谢谢您的解答。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 19:38 , Processed in 0.307568 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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