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