Можно ли в Excel свернуть и переместить данные из нескольких ячеек, используя ссылочный столбец, который имеет то же значение?

Можно ли в Excel свернуть и переместить данные из нескольких ячеек, используя ссылочный столбец, который имеет то же значение?

У меня есть рабочий лист с данными в нескольких строках, и мне нужно свернуть и переместить эту информацию вверх, а также удалить пустые пробелы, используя один столбец в качестве ключевой точки отсчета.

Например, у меня есть таблица, в которой столбец A содержит значения a и CB. В столбцах B, C и D также есть данные, но мои строки содержат данные только для 2 столбцов, оставляя остальные столбцы пустыми. Мне нужно переместить все значения в строках вверх, заполнив пробелы, если первый столбец совпадает. После перемещения столбцов вверх, последние строки могут содержать нулевые данные, мне просто нужно переместить данные вверх.

Вот что я пытаюсь сделать. У меня нет перечисленных заголовков столбцов и строк

a  1      null      null
a  2      null      null
a null     1        null
a null     2        null    
a null    null        1
a null    null        2     
a null    null        3
B  1      null      null
B  2      null      null
B null     1        null
B null     2        null    
B null    null        1
B null    null        2     
B null    null        3
C  1      null      null
C  2      null      null
C null     1        null
C null     2        null    
C null     3        null
C null    null        1     
C null    null        2

Мне нужно объединить и переместить данные, чтобы сделать это

a  1        1      1
a  2        2      2
a null   null     3
B  1        1      1
B  2        2      2
B  null   null     3
C  1        1      1
C  2        2      2
C  null    3     null

Кто-нибудь может помочь?

решение1

Начиная с:

введите описание изображения здесь

Запуск макроса MAIN():

Dim DidSomething As Boolean

Sub MAIN()
    DidSomething = True
    While DidSomething
        Call KompactData
    Wend
    Call RowKiller
End Sub

Sub KompactData()
    Dim N As Long, i As Long
    Dim j As Long, v As Variant

    N = Cells(Rows.Count, "A").End(xlUp).Row
    DidSomething = False

    For j = 2 To 4
        For i = 2 To N
            v = Cells(i, j).Value
            If (v <> "") And (Cells(i - 1, j) = "") And (Cells(i, 1) = Cells(i - 1, 1)) Then
                Cells(i - 1, j) = v
                Cells(i, j).ClearContents
                DidSomething = True
            End If
        Next i
    Next j
End Sub


Sub RowKiller()
    Dim N As Long, i As Long, r As Range
    N = Cells(Rows.Count, "A").End(xlUp).Row
    With Application.WorksheetFunction
        For i = N To 1 Step -1
            Set r = Range(Cells(i, 1), Cells(i, 4))
            If .CountBlank(r) = 3 Then
                r.Delete Shift:=xlUp
            End If
        Next i
    End With
End Sub

будет производить:

введите описание изображения здесь

Связанный контент