一个Excel问题的三种解法,你会哪个?

【一个Excel问题的三种解法,你会哪个?】我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能 , 让职场人士能高效使用office为其服务 。 支持我 , 也为自己加油!
这是今天一位群友的问题:
一个Excel问题的三种解法,你会哪个?

下面例举三种解决办法 , 看看你会哪种呢?
第一种:函数法
一个Excel问题的三种解法,你会哪个?

先简单整理下数据 , 整理出红框部分的数据 。
把原表中A、B两列数据合并 , 去除重复值 , 然后再用countifs函数求出E列中每个单元格出现的次数 , 然后对A列数据进行去重复得到H列数据 , 最后在I列写公式得到想要的结果 。
I2中公式如下:
=H2&TEXTJOIN(",",1,IF(IFERROR(FIND(H2,$E$2:$E$13),0),$G$2:$G$13,""))
公式很好理解:在E列查找一个编号 , 如果E列的文本中包含该编号 , 就显示G列对应的值 , 否则就显示空 。 具体以I2中的公式为例说下 , 选中公式中的IF段 , 按F9 , 即可得到包含编号2245对应的类型及数量:
一个Excel问题的三种解法,你会哪个?

我们只需要合并IF段的结果就可以了 , 所以用TEXTJOIN函数 。
第二种:PQ法
如果你对函数的嵌套用法实在无法理解 , 强烈建议学习下PowerQuery课程 , 先演示下最终效果:
一个Excel问题的三种解法,你会哪个?

原数据更新后 , 在查询表中刷新下 , 结果也会实时更新 。
具体做法步骤如下:
1)、先把数据导入到PQ中
2)、编号和型号合并
一个Excel问题的三种解法,你会哪个?

3)、按编号和型号进行分组
一个Excel问题的三种解法,你会哪个?

4)、添加自定义列把型号、数量合并后再加个“个”字
一个Excel问题的三种解法,你会哪个?

5)、把不需要的列删除 , 只留下下面两列 。
一个Excel问题的三种解法,你会哪个?

6)、按编号进行分组并提取Table中的自定义列 。
一个Excel问题的三种解法,你会哪个?

7)、得到如下结果:
一个Excel问题的三种解法,你会哪个?

8)、提取List中的值 , 用逗号分隔 , 即可得到结果:
一个Excel问题的三种解法,你会哪个?

9)、编号和自定义列合并稍加调整查询即想要的结果:
一个Excel问题的三种解法,你会哪个?

看着步骤很多 , 其实都是基础操作 , 一气呵成的话速度是很快的 。
办法三:VBA
效果如下:
一个Excel问题的三种解法,你会哪个?

代码如下:
SubTQDimdAsObject,i%,arr,brr,crrSetd=CreateObject("scripting.dictionary")Setd1=CreateObject("scripting.dictionary")arr=Range("a2",[b2].End(4))Fori=1ToUBound(arr)Ifd.exists(arr(i,1)&""&arr(i,2))Thend(arr(i,1)&""&arr(i,2))=d(arr(i,1)&""&arr(i,2))+1Elsed(arr(i,1)&""&arr(i,2))=1EndIfNextbrr=d.keyscrr=d.itemsFori=0ToUBound(brr)Ifd1.exists(Split(brr(i),"")(0))Thend1(Split(brr(i),"")(0))=d1(Split(brr(i),"")(0))&","&Split(brr(i),"")(1)&crr(i)&"个"Elsed1(Split(brr(i),"")(0))=Split(brr(i),"")(0)&Split(brr(i),"")(1)&crr(i)&"个"EndIfNext[c2].Resize(d1.Count)=Application.Transpose(d1.items)EndSub