2011-05-09 7 views
3

제품 ID 및 주문 번호 목록이 있습니다. 각 주문 번호는 여러 제품 ID를 가질 수 있습니다 (사람이 둘 이상의 품목을 구입할 수 있기 때문에). 내 목표는 각 주문 번호와 연관된 제품 ID를 하나의 행에 결합하는 것입니다. 각 주문에 대해 하나 이상의 제품 ID가있는 경우 쉼표로 구분하십시오. 아래 그림을 참조하십시오. 나는 약 13000 개의 행을 가지고 있기 때문에 수동 접근법을 사용하지 않기를 바란다. 제발 조언. 감사.동일한 값을 가진 여러 행을 하나 이상의 더하기로 결합 ... Excel에서

 
Covert this: 
order product 
158 866 
161 960 
163 976 
163 884 
164 1010 
173 834 
174 981 
177 935 
177 832 
177 934 

to this: 
order product 
158 866 
161 960 
163 976,884 
164 1010 
173 834 
174 981 
177 935,832,934 
+0

이 페이지를보십시오 : http://www.sqldrill.com/excel/programming-vba-vb-c-etc/344793-concatenate-group-rows.html –

+0

나는 그것을 시도하고 잘 작동합니다. 그러나 작업의 마지막 단계에서 vlookup을 적용하는 방법을 이해하지 못합니다. 누군가 그것을 설명 할 수 있을까요? –

+0

@nick : 'VLOOKUP (...)'은 오프라인 및 [온라인 설명서] (http://office.microsoft.com/en-us/excel-help/vlookup-HP005209335.aspx)에서 설명하지만 [이 이미지 ] (http://i.stack.imgur.com/X86UF.png)도 도움이 될 수 있습니다. – mousio

답변

1

@Nick에서 제공하는 링크는 원래 데이터를 그대로 유지하려는 경우 비 VBA 솔루션을 제공합니다.

병합 된 행만 남기도록 데이터를 수정하려면 VBA 솔루션이 필요합니다.

다음은 병합을 수행 할 매크로입니다.

참고 : 그것은 시트에 다른 유용한 데이터가없는 가정

  1. . 그럴 경우 삭제되거나 덮어 쓰기됩니다.

  2. 이 활성 시트

  3. 그것은 메모리 변형 배열의 합병이 resonable 속도를 제공하기 위해 않습니다에서 작동합니다. 셀/행을 반복하면 간단한 코드가 생성되지만 훨씬 느리게 실행됩니다.

원본 데이터를 보관하고 다른 곳을 요약하려면

Sub MergeRows() 
    Dim rng As Range 
    Dim vSrc As Variant 
    Dim vDst() As Variant 
    Dim i As Long, j As Long 

    ' Assumes data starts at cell A2 and extends down with no empty cells 
    Set rng = Range([A2], [A2].End(xlDown)) 

    ' Count unique values in column A 
    j = Application.Evaluate("SUM(IF(FREQUENCY(" _ 
     & rng.Address & "," & rng.Address & ")>0,1))") 
    ReDim vDst(1 To j, 1 To 2) 
    j = 1 

    ' Get original data into an array 
    vSrc = rng.Resize(, 2) 

    ' Create new array, one row for each unique value in column A 
    vDst(1, 1) = vSrc(1, 1) 
    vDst(1, 2) = "'" & vSrc(1, 2) 
    For i = 2 To UBound(vSrc, 1) 
     If vSrc(i - 1, 1) = vSrc(i, 1) Then 
      vDst(j, 2) = vDst(j, 2) & "," & vSrc(i, 2) 
     Else 
      j = j + 1 
      vDst(j, 1) = vSrc(i, 1) 
      vDst(j, 2) = "'" & vSrc(i, 2) 
     End If 

    Next 

    ' Remove old data 
    rng.EntireRow.Delete 

    ' Put new data in sheet 
    Set rng = [A2].Resize(j, 2) 
    rng = vDst 

End Sub 
0

, 당신은 내가 previous post에서 설명하는 방법을 사용할 수 있습니다. 이렇게하려면 모든 주문 번호 목록을 어딘가에 작성한 다음 인접한 열에서 CCARRAY UDF를 사용해야합니다. 원본 데이터가 Sheet1의에, 새로운 요약 목록 시트 2에있는 경우, 당신은 시트 2에서 A2에서 주문 번호에 대한 제품 정보를 얻기 위해 다음과 같은 공식을 사용합니다 :

{=CCARRAY(IF(Sheet1!$A$1:$A$13000=$A2,Sheet1!$B$1:$B$13000),",")} 

그냥 아래 공식을 작성 너 끝났어.

Sheet2의 고유 한 주문 번호 목록을 가져 오려면 Sheet1에서 Sheet2로 주문 목록을 복사 한 다음 Sheet2에서 중복 제거를 수행하십시오.

관련 문제