如何根据重复数量连接 - MS Excel

时间:2015-09-16 17:29:07

标签: excel excel-vba excel-formula vba

如果一行重复,有没有办法连接多个列?我有一个电子表格,其中A列有重复的团队,但是区域和LD(列b和c)是不同的值。我希望在E列中有一个表达式,它将用短划线连接B列和C列并附加下一行值。请参阅附加图片突出显示的行E.任何想法如何使用excel公式或可能是VBA。我在E = IF列(A3 = A4,D3&“;”& D4)中尝试了这个公式,但是对于最后一个重复的行,它返回false。

enter image description here

3 个答案:

答案 0 :(得分:1)

配方无法做到这一点。它需要基于VBA的解决方案。

我为你写了一个自定义例程。请将其放在标准代码模块中:

Public Sub ConcatTeamZones()
    Const SOURCE = "A1"
    Const OUTPUT = "E1"
    Dim i&, j&, s$, v, w
    v = Range(SOURCE).CurrentRegion
    ReDim w(1 To UBound(v), 0)
    For i = 2 To UBound(w)
        If v(i, 1) <> v(i - 1, 1) Then
            w(i - 1, 0) = s
            s = s & v(i, 2) & "-" & v(i, 3)
            s = ""
        Else
            s = s & ";"
        End If
        s = s & v(i, 2) & "-" & v(i, 3)
    Next
    w(i - 1, 0) = s
    Range(OUTPUT).Resize(UBound(w)) = w
End Sub

然后从工作表中获取您的团队数据,按ALT-F8以显示宏对话框。运行ConcatTeamZones宏。

注1:这假设列A已排序。

注意2:您可以编辑前两行以指定哪些列包含源(团队数据)以及您希望输出的列。

答案 1 :(得分:0)

可以使用公式来完成,只是透视问题

假设数据按团队

排序

此公式给出了连接结果,顶部有最大组合。在单元格E2中输入此公式并复制到最后一条记录。

=CONCATENATE($D2,IF(EXACT($A2,$A3),";"&$E3,""))

要为每个团队分配最多可能的组合,请在F2中输入此公式并复制到最后一个记录。

=INDEX($E:$E,MATCH($A2,$A:$A,0),0)

enter image description here

答案 2 :(得分:0)

我会怎么做......

单元格“A1”:= COUNTIF(B $ 2:B2,B2)&amp; B2 - 这是创建一个唯一键。复制表格的长度

然后我会使用高级查询(可能使用vba)在“F”列中为团队创建唯一值列表

单元“G2”:= VLOOKUP(“1”和F2,A:D,3,0)&amp;“ - ”&amp; VLOOKUP(“1”和F2,A:D,4,0) &amp; IF(ISERROR(VLOOKUP(“2”&amp; F2,A:D,3,0)),“”,“,”&amp; VLOOKUP(“2”&amp; F2,A:D,3,0) &安培; “ - ” &安培; VLOOKUP( “2” &安培; F2,A:d,4,0))及IF(ISERROR(VLOOKUP( “3” &安培; F2,A:d,3,0)), “”,“,”&amp; VLOOKUP(“3”和F2,A:D,3,0)&amp;“ - ”&amp; VLOOKUP(“3”和F2,A:D,4,0)) &amp; IF(ISERROR(VLOOKUP(“4”&amp; F2,A:D,3,0)),“”,“,”&amp; VLOOKUP(“4”&amp; F2,A:D,3,0) &安培; “ - ” &安培; VLOOKUP( “4” &安培; F2,A:d,4,0))

此功能可创建组合参考。如果你期望超过4次出现的球队,那就更长了。

只需复制“IF(ISERROR(VLOOKUP(”4“&amp; F2,A:D,3,0)),”“,”,“&amp; VLOOKUP(”4“&amp; F2,A:D, 3,0)&amp;“ - ”&amp; VLOOKUP(“4”&amp; F2,A:D,4,0))“并将”4“改为”5“等

你可以隐藏A栏(整理)。

抱歉,我试图加入图片但信誉不足: - )