여러 행을 하나의 열로 통합하는 방법

여러 행을 하나의 열로 통합하는 방법

내 상황은 다음과 같습니다. 38,000개의 고객 계정 목록을 가져와 새 웹사이트로 가져올 수 있는 특정 템플릿으로 정보를 정렬해야 합니다. 그러나 데이터가 표시되는 방식은 이를 어렵게 만듭니다.

고객 1명에 대해 저장된 모든 주소는 별도의 줄입니다. 따라서 청구서 수신 주소나 배송 주소가 다른 경우에는 2행이 됩니다. 때로는 3줄. 해당 행을 1행 아래의 열(주소 1, 주소 2 등)로 이동해야 합니다. 따라서 CustomerA가 3개의 주소를 저장했다면 이 3개 행을 가져와서 1개 행의 3개 열로 이동해야 합니다. 그게 말이 되기를 바랍니다.

수식, 피벗 테이블 또는 VBA(이 분야에서는 Jon Snow만큼 잘 알고 있습니다)가 최선의 경로가 될지 전혀 모르겠습니다. 피벗 테이블을 사용해 보았지만 제대로 작동하지 않습니다. 저는 Index/Match가 최선의 솔루션이라고 생각했습니다. 각 주소 열에 대한 수식을 복제하면 되지만 그렇게 하면 작업이 완료됩니다. 그러나 여러 행을 어떻게 수용할 수 있는지 모르겠습니다.

아래는 제가 받은 데이터의 예입니다. 20번째 줄은 행을 이동하는 데 필요한 템플릿입니다. g_user ID 열은 고객별로 고유하지만 단일 고객에 대한 여러 행의 주소가 있으면 해당 값이 스프레드시트에서 중복됩니다. customer_no와 동일합니다.

http://www.filedropper.com/excelhelp

아니면 이 이미지를 보세요

더 많은 정보가 필요하시면 알려주시면 더 자세히 설명해 드리겠습니다.

편집 - 제가 게시한 스프레드시트에서 2행과 3행을 가져와서 주소 정보를 행 1의 새 열로 이동해야 합니다. 따라서 주소는 2열, 도시는 1, 주가 1, 우편번호는 1, 국가입니다. 1이면 해당 2개 행에서 총 12개의 데이터 열이 생성됩니다.

답변1

  1. 결합된 내용을 넣을 빈 셀을 선택하고 수식 입력줄에 =CONCATENATE(TRANSPOSE(B2:B19)) 수식을 입력한 다음 수식 중 TRANSPOSE(B2:B19) 부분을 선택한 다음 F9 키를 눌러야 합니다. 아래 스크린샷과 같이 수식이 변경된 것을 확인할 수 있습니다.

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

  1. 수식 입력줄의 수식에서 중괄호를 제거한 다음 Enter 키를 누릅니다.

답변2

저는 이와 같은 작업에 VBA를 사용하는 것을 좋아합니다. 샘플 테이블에 표시된 대로 고유한 사용자 ID가 있다고 가정하면 다음과 같이 할 수 있습니다.

Sub Addresses_To_Columns()

    Dim lastRow As Long
    Dim addressCount As Integer: addressCount = 0

    lastRow = Range("A" & Rows.Count).End(xlUp).Row

    For i = lastRow To 3 Step -1
        If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
            addressCount = addressCount + 1
            Range(Cells(i - 1, 10), Cells(i - 1, (addressCount * 6) + 10)) = Range(Cells(i, 4), Cells(i, (addressCount * 6) + 4)).Value
            Rows(i).Delete
        Else
            addressCount = 0
        End If
    Next i

End Sub

그러면 다음과 같이 됩니다. 여기에 이미지 설명을 입력하세요

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

이 코드는 특정 형식에 맞게 사용자 정의해야 합니다. 또한 이는 개념 증명으로 신속하게 수행되었으며 몇 가지 일반적인 모범 사례가 누락되었을 수 있습니다. 이 코드에는 중복 행을 제거하는 삭제 명령이 포함되어 있으므로 이 코드를 시도하기 전에 데이터를 백업하십시오.

답변3

도움과 제안을 보내주신 모든 분들께 감사드립니다. 하지만 다른 방법을 사용하여 이 문제를 해결했습니다.

저는 단순히 '고유한' 고객 ID에 '-1','-2','-3'을 연결했습니다. 그런 다음 추가해야 하는 각 새 열의 고유한-1,-2,-3 값에 대해 VLOOKUP을 수행했습니다.

이 시련을 통해 얻은 명성만큼 이 모든 시간과 노력이 그만한 가치가 있었기를 바랍니다.

답변4

귀하의 질문을 올바르게 이해했다면 매우 간단한 해결책입니다. 당연히 스프레드시트를 먼저 백업하세요.

1) 올바른 위치에 필요한 수의 새 열을 추가하십시오. 새 열이 N이라고 가정해 보겠습니다.

2) 고객 ID가 A 열에 있고 동일한 고객에 대한 새 주소가 있는 줄의 해당 행 A 열에 동일한 번호가 있다고 가정합니다. 그리고 마지막으로 각 고객의 첫 번째 행에 주소, 즉 이름 전화번호 등을 제외하고 가장 완전한 세부 정보가 있다고 가정합니다(그렇지 않은 경우 정렬을 사용하여 먼저 고객 번호를 기준으로 정렬한 다음 이름을 기준으로 정렬).

3) N2 셀에 다음 수식을 입력합니다.

=if(and(a3=a2,a1<>a2),h3,"")

여기서 H는 주소가 있는 열입니다. 다음 행에 동일한 고객 번호가 있는 경우 (a3=a2), 그리고 이 행은 신규 고객입니다. 즉, 이전 행(a1<>a2)과 다른 고객 번호인 경우 다음 행에서 주소를 가져와 해당 고객의 기본 행에 배치합니다. 모든 정보가 이동되도록 해당 주소의 다른 모든 부분에 대해 반복합니다. 즉, 동일한 공식이지만 N2 대신 O2를 사용하고 h3 대신 i3을 참조하는 식입니다.

4) 세 번째 주소에도 비슷한 수식을 적용합니다. 즉, X2 유형에서 X 열이 세 번째 주소의 새 열이라고 가정하면 다음과 같습니다.

=if(and(a4=a2,a1<>a2),h4,"")

기본적으로 동일하며 대신 두 행 아래의 정보만 가져옵니다.

5) 이제 모든 주소는 각 고객의 "기본" 행에 있어야 합니다. 이제 해당 주소를 모두 복사하고 특수 값 붙여넣기를 사용하여 동일한 위치에 붙여넣어야 합니다. 이렇게 하면 수식이 제거되고 주소를 입력한 것처럼 데이터로 갖게 됩니다.

6) 이제 고객 이름별 정렬을 사용하여 이름이 비어 있는 모든 행(단지 추가 주소이기 때문에)을 한 곳에 가져옵니다. 그런 다음 필요한 모든 데이터가 이제 올바른 행에 있는지 확인한 후 해당 행을 모두 삭제합니다. 짜잔

관련 정보