MS Excel公式根据字符串内容进行连接

时间:2015-08-26 14:23:44

标签: excel

如何编写以下示例问题陈述的公式 -

Jack1
Jill1
Mike1
Mike2
Mike3
Dave1
Dave2
Max1

这应该写成 -

Jack1
Jill1
Mike1,2,3
Dave1,2
Max1

1 个答案:

答案 0 :(得分:0)

为了操纵数据,这些数据需要相对统一(它越不均匀,在操作它之前,需要做更多的工作才能统一。

在这种情况下,我将对此数据的一致性做出以下假设:

(1)数值始终存在; (2)数字值始终位于每个名称的末尾; (3)数值总是一位数; (4)数值总是从1开始;和 (5)名称将始终按顺序排列。

如果这些假设中的任何一个是错误的,则需要VBA解决方案。如果它们是准确的,那么一些辅助列将允许Excel公式解决方案。

假设您的数据位于A列,从A1开始,首先在B列中使用此公式,从B1开始并向下拖动:

=right(A1)

这将从A列中的每个单元格中拉出最右侧的字符。然后将以下公式放在C列中,从C2开始并向下拖动[C1将需要更改为“= A1”]:

=IF(B2=1, A2, C1&","&B2)

这将创建一个排列的列表,在每行计数,直到有一个新名称。要使用它来创建一个只显示所需数据的列表,有更短的方法,但我会展示一种更简单(但更长)的方法:

在D1中拖拽,放入以下公式:

=IF(B2=1,COUNTIF($B$1:B1,1),"")

这将创建一个列,每当新名称结束其迭代时,该列增加1.

然后在E栏中(或在新的工作表上,或者您想要最终列表的任何位置),将其从第1行开始并向下拖动:

=IF(ROW()<=MAX(D:D),INDEX(C:C,MATCH(ROW(),D:D,0)),"")

这将检查D列中达到的最高数字(即:到目前为止的名称数量),并提取列C中的索引(格式化名称),该列与当前行号的D列相匹配。即:如果此公式在ROW 5中,并且列D中至少列出了5个名称,那么它将匹配D列中的数字5,并从该行匹配的C列中提取信息。