Excel에서는 동일한 값인 참조 열을 사용하여 여러 셀의 데이터를 축소하고 이동할 수 있습니까?

Excel에서는 동일한 값인 참조 열을 사용하여 여러 셀의 데이터를 축소하고 이동할 수 있습니까?

여러 행에 데이터가 있는 워크시트가 있는데 이 정보를 축소하여 위로 이동하고 단일 열을 주요 참조 지점으로 사용하여 null 공백을 제거해야 합니다.

예를 들어 A 열에 a와 CB 값이 포함된 테이블이 있습니다. B, C, D 열에도 데이터가 있지만 내 행에는 2개의 열에 대한 데이터만 포함되고 다른 열은 비어 있습니다. 첫 번째 열이 일치하면 공백을 채워 행의 모든 ​​값을 위쪽으로 이동해야 합니다. 열을 위로 이동한 후 마지막 행에 null 데이터가 있을 수 있으므로 데이터를 위로 이동하면 됩니다.

내가하려는 일은 다음과 같습니다. 나열된 열 및 행 머리글이 없습니다.

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

생산할 것입니다:

여기에 이미지 설명을 입력하세요

관련 정보