ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 借个问题来拜年之多字符模糊比对求和问题?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-2-2 18:09 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
首先非常干谢谢论坛的各位老师、大侠,祝大家在2017年鸡年大吉、万事如意、心想事成、财源广进!
最近发现由于原始数据出现很多问题,导致无法匹配计算求和。
例如有的客户在2016年输入为永发(美国)制造,但是在2017年却输入为永发(美国)制造,因此想用永发和制造来模糊比对再求和,可是通过SUMPRODUCT和isnumber和find没法实现,希望各位老师能尽快帮助我,谢谢!详细情况见附件!
要求:
1、在2003可以实现;函数越简洁易懂越好,暂不考虑内置函数或自定义函数等;
2、用函数解决。

20170202问题.rar

53.89 KB, 下载次数: 24

TA的精华主题

TA的得分主题

发表于 2017-2-2 20:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. =SUMPRODUCT((MONTH(INDIRECT("'"&B1&"'!C3:C100"))<=$D2)*(MMULT(--ISNUMBER(FIND(MID($A2,COLUMN(INDIRECT("c1:c"&LEN($A2),)),1),INDIRECT("'"&B1&"'!B3:B100"))),1^ROW(INDIRECT("1:"&LEN($A2))))=LEN($A2))*CHOOSE({1,1,1,1,1,1,1,1,1,1,1,1,2},INDIRECT("'"&B1&"'!M3:X100"),INDIRECT("'"&B1&"'!AB3:AB100")))
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2017-2-2 21:10 | 显示全部楼层
2016年输入为永发(美国)制造,但是在2017年却输入为永发(美国)制造

將"全角"括號替換為"半角", 讓索引值"統一", 不要公式繞著玩...楚河漢界>三國>春秋戰國.....亂世不可治!!!

B2:
=SUMPRODUCT(('2016'!B$3:B$99=A2)*(MONTH('2016'!C$3:C$99)<=D$2)*'2016'!M$3:AB$99*LOOKUP(COLUMN(M:AB),{13,25,28},{1,0,1}))

C2.將2016改成2017, 只有兩個年度, 不須再用INDIRECT去套了~~


TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-3 08:48 | 显示全部楼层

sqrall900老师,您的方案很强大就是函数太复杂了,虽然可以实现模糊匹配,但是我无法移植运用,因为看不懂。崩溃中。(MMULT(--ISNUMBER(FIND(MID($A2,COLUMN(INDIRECT("c1:c"&LEN($A2),)),1)是起什么作用呢?是实现模糊比对吗?INDIRECT("'"&B1&"'!B3:B100"))),1^ROW(INDIRECT("1:"&LEN($A2))))=LEN($A2))怎么理解?*CHOOSE({1,1,1,1,1,1,1,1,1,1,1,1,2},INDIRECT("'"&B1&"'!M3:X100"),INDIRECT("'"&B1&"'!AB3:AB100")))是建立数组吗?如果超过100行会否数组建立就没有用呢?期待老师的指导。再次感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-3 08:52 | 显示全部楼层
准提部林 发表于 2017-2-2 21:10
2016年输入为永发(美国)制造,但是在2017年却输入为永发(美国)制造

將"全角"括號替換為"半角", 讓索 ...

准提老师,因为每个月都有几万条数据,其中有部分这样的情况,所以没有办逐一寻找替换,因为不是每个月每个客户都有数据,所以希望能体现出来通过字符模糊比对,谢谢!

TA的精华主题

TA的得分主题

发表于 2017-2-3 08:52 | 显示全部楼层
MMULT(--ISNUMBER(FIND(MID($A2,COLUMN(INDIRECT("c1:c"&LEN($A2),)),1),INDIRECT("'"&B1&"'!B3:B100"))),1^ROW(INDIRECT("1:"&LEN($A2))))=LEN($A2)
这一段是每个字符进行比对,全部匹配到同一字段则为真
choose是把2个区域(数组)合并起来,和行数无关,行数我这里写的都是100,如果要改大,就改这个100

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-3 09:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sqrall900 发表于 2017-2-3 08:52
MMULT(--ISNUMBER(FIND(MID($A2,COLUMN(INDIRECT("c1:c"&LEN($A2),)),1),INDIRECT("'"&B1&"'!B3:B100"))),1 ...

sqrall900老师,正是因为不光是有着符号的区别,还有着缩写、简写、的区别,比如天成商业有限公司和天成公司,只需比对天成;比如上海第一百货公司和第一百货上海等,您这样的比对肯定会出错的呀?我需要的是输入字符比如第一百货和上海等就可以实现模糊匹配得功能,希望老师能完善一下,谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 09:16 , Processed in 0.044353 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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