ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > 函数与公式 > 如何将内容相同且挨着数据合并?

如何将内容相同且挨着数据合并?

作者:绿色风 分类: 时间:2022-08-17 浏览:137
楼主
悟空师弟
Q:如下图:在A列中如果相同,且挨着的就合并起来,合并后如C列状态,怎么用函数来解决?

 

A:数组公式:
  1. =IFERROR(SUM(SMALL(IF($A$1:$A$17<>$A$2:$A$18,ROW($1:$17),18),ROW(1:2))*{-1;1})&INDEX(A$2:A$18,SMALL(IF(A$1:A$17<>A$2:A$18,ROW($1:$17),18),ROW(A1))),"")
详见附件:

如何合并相同内容.rar



解题思路:
“相同,且挨着的”即“与上一单元格数据相同”,C列的结果是提取这些“相同,且挨着的”但要去掉重复数据并计算出有多少个“挨着的”进行组合。
1、首先计算数量:不难看出,每一个“相同,且挨着的”数量刚好等于下一个“挨着的且不同”的行号减去上一个“挨着的且不同”的行号,比如A2、A3是连续两个A,用第3行的行号减第1行的行号可以得到,(或用第4行的行号减第2行的行号),算法为:将“挨着的且不同”和行号取出,公式:IF($A$1:$A$17<>$A$2:$A$18,ROW($1:$17),18)可得到一个数组{1;18;3;18;5;18;18;8;18;18;18;18;13;18;15;18;18},此数组中
3-1=2
5-3=2
8-5=3
13-8=5
15-13=2
18-15=3
这6个结果正好是所需要的6个数量,可用SMALL函数逐个取出。
如下图解析:

 


2、再取文本:同理,按“挨着的且不同”的规律,用SMALL函数依次取出{1;18;3;18;5;18;18;8;18;18;18;18;13;18;15;18;18}中所需行号(1,3,5,8,13,15,18 ……)作为INDEX第二个参数,当取到第7个以后的最小值皆为18,而INDEX第一个参数中的区域A$2:A$18只有17行,出现错误值,可用IFERROR函数纠错。
如下图解析:

 

说明:公式通过简化,公式中 SUM(SMALL(IF($A$1:$A$17<>$A$2:$A$18,ROW($1:$17),18),ROW(1:2))*{-1;1})
改为以下公式(即直观算法,以第2个最小值减第1个最小值类推)较易懂:
SMALL(IF($A$1:$A$17<>$A$2:$A$18,ROW($1:$17),18),ROW(A2))-SMALL(IF($A$1:$A$17<>$A$2:$A$18,ROW($1:$17),18),ROW(A1))


公式解析详见下面附件:

如何合并相同内容-公式解析.rar
2楼
無心
来学习一下,

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap