如果其他单元格匹配,则Excel合并单元格

时间:2012-01-23 20:11:58

标签: excel excel-vba worksheet-function vba

如果另一个单元格具有两个或更多相同值,则合并单元格:我的数据具有两个或多个除一个单元格以外的相同记录:示例A1名称= Joe,A2 = Joe但B1 =星期二,B2 =星期三。我需要显示一行A1 = Joe和B1 =星期二,星期三。我可以创建另一行,如C1 = B1& B2,但是如何让它循环通过A,如果有匹配的记录,则合并B中的两个值。我认为它会像放入C1,C2一样,C3 ... = IF(A1 = A2 ......,B1& B2,“”)但是,如果不是A2,它如何循环所有A然后合并B的结果以匹配记录?

1 个答案:

答案 0 :(得分:2)

这是一个可能的解决方案。 (我希望我能理解你的设置)

步骤1)将A列中的所有唯一名称分离到新工作表中,再次分成新工作表中的A列 - 如果您使用excel 2007或更高版本,则只需复制整个列,然后使用“删除重复项”工具

步骤2)在新工作表上,将以下内容添加到B2列中。这将计算每个名称的出现次数。 (注意:我假设您的Raw数据在Sheet1中,而新的副本在Sheet2中处理)

=COUNTIF(Sheet1!$A$1:$A$5,$A2)

步骤3)将以下内容添加到C3。这将找到第一次出现名称的行号。 (重要提示:这意味着您的原始数据需要应用排序以确保名称全部显示在一起)

=MATCH($A2,Sheet1!$A$1:$A$5,0)

步骤4)在列D到J上,您需要添加以下数组公式。如果您之前没有使用过Array Formula:(i)选择单元格D2:J2(ii)确保D2是活动单元格(iii)在公式栏中输入下面的公式(iv)按ctrl + shift + enter < / p>

这会使B列中的数据偏移第一行(步骤3),按名称计数(步骤2)重新调整大小(转换列的行)

=TRANSPOSE(OFFSET(Sheet1!$B$1:$B$5,C2-1,0,B2))

这可能适合您的需要,但如果您坚持逗号分隔日期,则可以将其添加到K2,并将B列隐藏到J。

=IF(ISNA(D2),"",D2)&IF(ISNA(E2),"",","&E2)&IF(ISNA(F2),"",","&F2)&IF(ISNA(G2),"",","&G2)&IF(ISNA(H2),"",","&H2)&IF(ISNA(I2),"",","&I2)&IF(ISNA(J2),"",","&J2)

我假设您永远不需要加入超过7个值(例如一周中的7天)。但如果你这样做,那么你将不得不将Array公式扩展到更多列。如果您没有设置最大值,则可能值得研究VBA解决方案。