2012-01-23 197 views
1

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

回答

2

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

步骤1)将列A中的所有唯一名称分隔到新工作表中,再次放入新工作表的A列中 - 如果您使用的是Excel 2007或更高版本您可以复制整个列然后使用删除重复工具

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

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

步骤3)添加以下到C3。这将找到名称第一次出现的行号。 (重要提示:这意味着你的原始数据将需要应用,以确保所有出现组合在一起的名称的排序)

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

步骤4)在列d至J你需要添加下面的数组公式。 (i)选择单元格D2:J2(ii)确保D2是活动单元格(iii)在公式栏中输入以下公式(iv)按ctrl + shift +输入

这需要数据列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解决方案。

+0

步骤1,2及3工作的罚款(第3步我投入C2),但第4步只是返回0。更糟糕的是,我肯定会需要超过7个数量是无限的。所以,我将添加VBA到标签,并希望有人能让我走上正轨。 – user745778

+0

@ user745778你的权利我的意思是C2的第3步。我找到了另一个使用公式的解决方案,它有点简单。我已经发布了它作为另一个答案 – Skytunnel

3

我发现了另一个不需要使用数组公式的解决方案,并且应该能够遍历所有可能性。再次,它会要求你的原始数据通过名称进行排序(以便所有的名称组合在一起),然后后直接原始数据添加此公式列(我假设C2)

=IF(A1<>A2,B2,C1&","&B2) 

这将用逗号加入它上面的所有内容,并在名称更改时重置加入。通过这个庄园,你想要的数据将永远与名称的最后一个实例相对。我们可以使用前面答案中步骤2 & 3的结果找到最后一个实例,然后将其与上述公式的结果进行索引,所以..

=INDEX(Sheet1!$C:$C,COUNTIF(Sheet1!$A:$A,$A2)+MATCH($A2,Sheet1!$A:$A,0) -1) 

在上面我假设你想在最终答案的名字是在单元格A2

+0

在玩完所有的优秀建议之后,上面的短IF陈述接近我需要的全部内容。如果记录是针对同一个人的,则“= IF(A1 <> A2,B2,C1&”,“&B2)”将在第二天添加,但会将第二天添加到第二个人(第三等)。我知道这是循环播放时的样子,但是有没有办法让第一张唱片能够获得额外的时间。原因:读取此数据的工作表使用= MATCH和OFFSET执行更多操作,并且需要此信息的单元必须读取第一条记录。 – user745778

+0

我一直在试图调整你的脚本以显示第一条记录上的多个日子,但你的脚本非常简单,而且我看不到方法。可能吗? – user745778

+0

是的,你可以。如果将简短的“IF”语句保留在原来的位置(如果您不希望看到它,则隐藏该列),然后在列上添加第二个公式(以'= INDEX ...'开头的公式)在它旁边,这将使全部结果出现在每条记录上。您可以通过在INDEX语句前添加followng来将其限制在第一位IF(A1 = A2,“”,INDEX ...“ – Skytunnel

相关问题