У меня есть следующий тип таблицы

Current table                                                   
P.no.   P.Line  ian feb mar apr mai iun iul aug sept    oct nov dec
100001  Line1   100                                         
100001  Line1                   100                         
100001  Line1                               300             
100001  Line2       200                                     
100002  Line2               100                             
100003  Line3   100                                         
100003  Line3       100                                     
100003  Line3           100                                 
100003  Line3                           300                 
100003  Line3                                   200         
100003  Line3                                               100

Мне нужно, чтобы это выглядело так:

Needed result                                                   
P. no.  P.line  ian feb mar apr mai iun iul aug sept    oct nov dec
100001  Line1   100             100         300             
100001  Line2       200                                     
100002  Line2               100                             
100003  Line3   100 100 100             300     200         100

Заранее спасибо.

2 ответа2

0

Вы можете создать отдельную сводную таблицу и использовать SUMIFS. Я создал схему таблицы, которая выглядела так:

P.no.   P.Line  ian feb mar apr mai iun iul aug sept    oct nov dec
100001 Line 1
100001 Line 2
100002 Line 2
100003 Line 3

Я сделал это путем копирования A & B и удаления дубликатов в Excel. Эта формула может использоваться для суммирования для каждого столбца (при условии, что ваши данные начинаются в столбце A, а ian находится в C):

=SUMIFS(C$2:C$12, $A$2:$A$12, $A15, $B$2:$B$12, $B15)

Это будет суммировать столбец C, где столбец A такой же, как A15, а столбец B такой же, как B15. Вы можете перетащить эту формулу вправо и вниз, и она должна быть динамичной.

В вашем примере вы вернули пустое значение, если нет данных, это также может быть сделано, но вам нужно обернуть вышеупомянутое во что-то вроде этого:

=IF(SUMIFS(C$2:C$12, $A$2:$A$12, $A15, $B$2:$B$12, $B15) = 0, "", SUMIFS(C$2:C$12, $A$2:$A$12, $A15, $B$2:$B$12, $B15)) 

Это просто означает, что если сумма равна 0, то вернуть пустое значение, в противном случае дать мне сумму.

Скриншот

0

С s в качестве исходного диапазона и t в качестве целевого диапазона, я бы сделал что-то вроде этого:

' loop through the rows
for i=1 to s.rows.count
    ' check if the sum code is changed
    if s(i,1) & s(i,2) <> prev_id then trow = trow +1
    ' fill the target row with the source values
    for j=1 to s.columns.count
        if not isempty(s(i,j)) then t(trow, j) = s(i,j)
    next
    ' save the sum code (for the next loop)
    prev_id = s(i,1) & s(i,2)
next

Редакция: Хорошо, основываясь на вашей ссылке, я сделал это:

Sub CombineRows()
    Dim rw As Long
    Dim col As Long
    Dim rng As Range

    ' make sure the cursor is somewhere in the left columns
    Set rng = Selection.CurrentRegion
    For rw = rng.Rows.Count To 2 Step -1
        If rng(rw, 2) = rng(rw - 1, 2) And rng(rw, 3) = rng(rw - 1, 3) Then
            For col = 4 To rng.Columns.Count
                If Not IsEmpty(rng(rw, col).Value2) Then
                    rng(rw - 1, col).Value2 = rng(rw, col).Value2
                End If
            Next
            rng.Rows(rw).EntireRow.Delete
        End If
    Next
End Sub

Просто встаньте где-то слева в три колонки и запустите макрос.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .