큰 값 열에 대해 Excel의 전치 도구 사용

큰 값 열에 대해 Excel의 전치 도구 사용

내가 가지고 있는 것은 이름과 주소 데이터로 구성된 매우 큰 워크시트입니다. 지금은 다음과 유사해 보입니다.

               Name   Number       Address
                                   Address
                                   Address
                                  (Address)

이와 같은 그룹은 수백, 수백 개가 있으며 모두 하나 이상의 빈 행으로 구분됩니다. 이제 손으로 조옮김 도구를 사용할 수 있지만 시간이 꽤 걸립니다. 매크로를 작성하여 이를 수행하려고 생각했지만 일부 주소는 3줄이고 일부 주소는 4줄이므로 이것이 가능한지 혼란스럽습니다.

모든 작업을 수동으로 수행하지 않고도 이 작업을 수행할 수 있는 간단한 방법이 있습니까?

답변1

이제 개인 사이에 줄이 없고 한 셀에 한 줄에 전체 주소가 있는 최종 결과가 아래와 유사하게 나타나기를 원한다고 가정합니다.

Name    Number  Address
Name    Number  Address
Name    Number  Address
Name    Number  Address
Name    Number  Address
Name    Number  Address

또한 데이터가 A1 셀에서 시작하고 모든 이름이 고유하다고 가정하겠습니다. 그렇지 않은 경우 매크로에 약간의 조정이 필요합니다. Stopper = 50000마지막 데이터 세트 다음 행으로 설정하십시오 . 그렇지 않으면 필요한 것보다 훨씬 오래 지속될 수 있습니다(또는 충분히 길지 않을 수도 있습니다).

Sub CollectThem()
    Dim All As New Collection
    Dim One As Variant
    Dim Addy As Variant, Stopper As Long, L1 As Integer

    Stopper = 645

    Cells(1, 1).Select
    Do Until ActiveCell.Row >= Stopper
        ReDim One(0 To 2)
        One(0) = ActiveCell.Offset(0, 0).Value
        One(1) = ActiveCell.Offset(0, 1).Value
        Addy = ""
        Do Until ActiveCell.Row >= Stopper Or (ActiveCell.Value <> "" And ActiveCell.Value <> One(0))
            Addy = Addy & ActiveCell.Offset(0, 2).Value & "|"
            ActiveCell.Offset(1, 0).Select
        Loop
        One(2) = Trim(Addy)
        All.Add One
        Erase One
    Loop

    Sheets.Add after:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Select

    Cells(1, 1).Select
    For Stopper = 1 To All.Count
        One = All(Stopper)
        ActiveCell.Offset(0, 0).Value = One(0)
        ActiveCell.Offset(0, 1).Value = One(1)
        Addy = Split(One(2), "|")
        If IsArray(Addy) Then
            For L1 = 0 To UBound(Addy)
                ActiveCell.Offset(0, 2 + L1).Value = Addy(L1)
            Next L1
            Erase Addy
        Else
            ActiveCell.Offset(0, 2).Value = One(2)
        End If
        ActiveCell.Offset(1, 0).Select
        Erase One
    Next Stopper
End Sub

관련 정보