vba字典合并单元格为空_VBA简单入门42:字典合并所有内容在一个单元格内

该博客详细介绍了如何在Excel中通过编程方式合并同一关键字的多条内容,并进行去重处理。以程咬金和小乔为例,展示了如何使用exists方法、instr函数以及自定义txtjoin函数来实现这一目标。内容包括对字典操作的解释、数据合并的步骤以及去重的实现方法。同时,文章提及了Excel2016及更高版本的textjoin函数,作为实现相同功能的内置工具。
摘要由CSDN通过智能技术生成

要求:将英雄对应的所有内容都合并在一个单元格内显示。

参考代码:

代码解释:以程咬金为例子。

第1个程咬金的时候,因为字典里没有程咬金这个关键字(exists方法检测),所以将其第1条数据放进字典,此时: d('程咬金')='坦克';

第2个程咬金的时候,exists方法检测到程咬金在字典里。此时,读取程咬金的item:d('程咬金'),为 '坦克',并将'坦克'和此时的'肉盾'用逗号合并起来:'坦克,肉盾',

也就是执行此语句 d(arr(i, 1)) = d(arr(i, 1)) & ',' & arr(i, 2),右边的d(arr(i, 1))为第1条数据的item '坦克';arr(i, 2)为'肉盾';

左边的d(arr(i, 1))将新的item:d(arr(i, 1)) & ',' & arr(i, 2)放到字典里。此时关键字'程咬金'对应的item为'坦克,肉盾'。

第3个程咬金同样操作。

上述代码,有一个疏忽的地方就是,没有对合并的数据去重复。比如,小乔,对应的两个内容都是法师,应该去重复处理。参考代码:

使用instr函数,从每个关键字的第2条数据开始检查item是否已经包含了所要合并的内容。

如小乔,第1条数据时,item为'法师',第2条数据时,d('小乔')返回其item'法师',

instr(d('小乔'),'法师') -->instr('法师','法师'),显然包含了'法师'这个字符,返回的结果>0;如果不包含'法师',则返回的结果=0;

instr函数相当于工作表函数find,返回查找的字符串在另一个字符串中的位置。

如程咬金,第2条数据的时候item为'坦克,肉盾',当遍历到第3条数据时

instr(d('程咬金'),'消耗')--->instr('坦克,肉盾','消耗'),'坦克,肉盾'这个字符串不包含'消耗'这个字符串,则返回0.

我们知道,excel2016或365都有textjoin这个函数。

利用上面的知识,我们也可以写一个自定义函数。

使用方法:txtjoin(参数1,参数2,参数3,参数4)

1、参数1:条件,为一个单元格;

2、参数2:条件所在的单元格区域;

3、参数3:合并内容所在的单元格区域;

参数2和参数3的单元格区域,必须大小一致。

4、参数4:合并内容的分隔符号;

5、如果参数2的单元格区域有空格,则默认将空格按其上面的非空处理,如图中的A7空格,其条件是程咬金;

6、如果条件(关键字不在字典中)不存在,则返回空白;

7、对合并的内容执行去重复处理。

文件链接如下:

链接: https://pan.baidu.com/s/1Bbt3RW2U3oibvomU3GOeKA 密码: uw76

点击扩展链接或下拉链接查看上一篇文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值