Объединение дублирующихся строк в Excel без потери порядка или последовательности - PullRequest
0 голосов
/ 22 июня 2019

У меня есть данные, которые выглядят так

-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 голосов
/ 22 июня 2019

Вы можете использовать столбец индекса + Power Query (бесплатная надстройка от MS в версиях Excel с 2010 года) , включенная в 2016+, известная как Get&Transform.

  • Добавление столбца индекса в исходную таблицу

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

Затем в редакторе Power Query

  • Измените тип данных столбца Длительность на Duration
  • Группировка по столбцу Index и столбцу -Name в указанном порядке.
    • Выберите Sum в качестве типа агрегации и присвойте новому столбцу имя (например, Total Duration

enter image description here

  • Удалить столбец Index.
  • Close and Load или Load 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.

0 голосов
/ 22 июня 2019

Используя формулы 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 image description here

0 голосов
/ 22 июня 2019

Этот макрос даст вам тот же ответ:

Изменение диапазона в соответствии со снимком экрана.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...