在excel中合并重复的行而不丢失顺序或序列

时间:2019-06-22 09:25:23

标签: excel vba excel-formula

我有类似这样的数据

-Name       Duration
-Session 1  00:00:30
-Session 1  00:01:30
-Session 1  01:00:30
-Session 2  00:00:30
-Session 2  00:00:30
-Session 2  01:00:30
-Session 1  00:00:45
-Session 1  00:01:30
-Session 1  01:00:45
-Session 2  00:00:20
-Session 2  00:00:20
-Session 2  01:00:20

我希望在合并后输出如下所示的内容

-Name        Duration
-Session 1   01:02:30
-Session 2   01:01:30
-Session 1   01:03:00
-Session 2   01:01:00

3 个答案:

答案 0 :(得分:0)

此宏将为您提供相同的答案:

根据屏幕截图更改范围。

Sub Macro2()

Dim val As Double: val = 0

For Each cel In ActiveSheet.Range("K5:K16") 'Change the Range to which cells Contains Session Text , Not the Time

    If cel.Value = cel.Offset(1, 0).Value Then

        val = val + cel.Offset(0, 1).Value

    Else

        MsgBox cel.Value & " - " & Format(val + cel.Offset(0, 1).Value, "hh:mm:ss")
        val = 0

    End If

Next

End Sub

enter image description here

答案 1 :(得分:0)

您可以使用索引列+ Power Query (MS自2010年以来在Excel版本中免费提供的加载项),包含在2016+版本中,称为Get&Transform。 / p>

  • 在原始表中添加索引列

  =IF(A2=A1,N(C1),N(C1)+1)

然后,在Power Query编辑器中

  • 将“持续时间”列的数据类型更改为Duration
  • Index列和-Name列的顺序分组
    • 选择Sum作为聚合类型,并为新列命名(例如Total Duration

enter image description here

  • 删除Index列。
  • Close and LoadLoad To

来源和结果

enter image description here

M代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"-Name", type text}, {"Duration", type duration}, {"Index", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Index", "-Name"}, {{"Total Duration", each List.Sum([Duration]), type duration}}),
    #"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"Index"})
in
    #"Removed Columns"

注意: 可以在Power Query中设置“索引”列,但在Excel工作表上进行设置要简单得多。

答案 2 :(得分:0)

使用Excel公式,应该是

=IFERROR(INDEX(A:A,SMALL(IF(A$2:A$13<>A$1:A$12,ROW(A$2:A$13)),ROW(1:1))),"")

参加会议

=IFERROR(SUM(INDEX(B:B,SMALL(IF(A$2:A$13<>A$1:A$12,ROW(A$2:A$13)),ROW(1:1))):
INDEX(A:A,SMALL(IF(A$2:A$13<>A$3:A$14,ROW(A$2:A$13)),ROW(1:1)))),"")

以获取会话中的总和。

两个公式都必须使用 Ctrl Shift Enter

输入

enter image description here