做excel发现现有的函数功能不够用,就自学了一下VBA写了第一个新函数:根据条件连接字符串
比如count()有countif()和countifs(),sum()有sumif()和sumifs(),但是concatenate()却没有类似concatenateifs()的函数,于是自己写了个替代品
(写的解释比较面向初学者,如果是只需要参考,完全可以跳过直接看代码块)
问题:我需要在选区中找出同时符合两个条件的值,比如
地区 | 鱼 | 调料 |
---|---|---|
沙滩 | 咸鱼 | 盐 |
海沟 | 深海鱼 | 酱油 |
海沟 | 深海鱼 | 芥末 |
火星 | 深海鱼 | 沙子 |
这其中地区和名称同时相同的视为同一种鱼,那么 海沟深海鱼 既可以用酱油也可以用芥末,在新的表中需要将这一项合并,也就是说处理后的新表如下:
地区 | 鱼 | 调料 |
---|---|---|
沙滩 | 咸鱼 | 盐 |
海沟 | 深海鱼 | 酱油芥末 |
火星 | 深海鱼 | 沙子 |
实现:
首先排个序会比较清晰,将要统计的地区和鱼录入新表(我自己的做法是直接复制到新表,再去除重复值),然后对调料使用函数自动填充
自定义的函数concatenate_ifs()仿照countifs()来设定参数,countifs()的语法就不说了
使用参数 | 给它起个名字 |
---|---|
需要合并的字符串所在单元格列,即表1的调料列 | concatenate_range |
范围1,即表1的地区列 | range1 |
条件1,即表2要去匹配的地区单元格 | criteria1 |
范围2,即表1的鱼列 | range2 |
条件2,即表2要去匹配的鱼 | criteria2 |
函数的使用,在表2的调料一格填充:
=concatenate_ifs(表1!调料:调料,表1!地区:地区,表2!地区1,表1!鱼:鱼,表2!鱼1)