基于字符串内容连接的MS Excel公式

基于字符串内容连接的MS Excel公式,excel,Excel,如何编写以下示例问题陈述的公式- Jack1 Jill1 Mike1 Mike2 Mike3 Dave1 Dave2 Max1 这应该写为- Jack1 Jill1 Mike1,2,3 Dave1,2 Max1 为了操纵数据,数据需要相对统一(统一程度越低,在操纵数据之前,需要做更多的工作使其统一) 在这种情况下,我将对该数据的一致性做出以下假设: (1) 数值将始终存在; (2) 数值将始终位于每个名称的末尾; (3) 数字值将始终为一位数字; (4) 数值将始终从1开始;并且 (5) 名

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

Jack1
Jill1
Mike1
Mike2
Mike3
Dave1
Dave2
Max1
这应该写为-

Jack1
Jill1
Mike1,2,3
Dave1,2
Max1

为了操纵数据,数据需要相对统一(统一程度越低,在操纵数据之前,需要做更多的工作使其统一)

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

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

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

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

=right(A1)
这将从A列中的每个单元格中提取最右边的字符。然后将以下公式放入C列,从C2开始向下拖动[C1需要更改为“=A1”]:

这将创建一个按行计数的排列列表,直到有一个新名称为止。要使用它创建一个只显示所需数据的列表,有几种较短的方法,但我将展示其中一种较简单(但较长)的方法:

在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)),"")
=IF(第()行)
=IF(ROW()<=MAX(D:D),INDEX(C:C,MATCH(ROW(),D:D,0)),"")