2016-10-14 4 views
0

ID와 날짜를 기반으로 Cmnts를 연결해야합니다. 나는Excel VBA를 사용하여 ID와 날짜를 기준으로 열을 연결합니다.

id  Sno Date  Cnt Comnts 

1299 001 4/08/2016 1 A 
1302 001 4/08/2016 1 B 
1642 001 10/08/2015 1 C. 
1642 001 14/08/2015 1 D 
1642 001 21/12/2015 1 1. 
1642 001 21/12/2015 2 2. 
1642 001 16/02/2016 1 3. 
1642 001 8/04/2016 1 T 
1644 001 25/09/2015 1 M 
1747 001 13/09/2016 1 J 
1748 001 13/09/2016 1 O 
1751 001 3/03/2015 1 P 

O/P, 연결하여 아래

id  Sno Date  Cnt Comnts 

1299 001 4/08/2016 1 A 
1302 001 4/08/2016 1 B 
1642 001 10/08/2015 1 C. 
1642 001 14/08/2015 1 D 
1642 001 21/12/2015 1 1. 2. 
1642 001 16/02/2016 1 3. 
1642 001 8/04/2016 1 T 
1644 001 25/09/2015 1 M 
1747 001 13/09/2016 1 J 
1748 001 13/09/2016 1 O 
1751 001 3/03/2015 1 P 

내 매크로 유일한 ID를 기반으로 의견을 매크로를 작성하지만 내 매크로 CONCATENATE의 cmnts은 ID를 기반으로했습니다. 내가 ID와

매크로 날짜를 기준으로 주석을 연결하는 수정할 수있는 방법 :

Private Sub CommandButton1_Click() 

    Dim a, c, i As Long, n As Long 
    With Range("a1").CurrentRegion 
     a = .Value 
     c = .Value2 
     With CreateObject("Scripting.Dictionary") 
      For i = 1 To UBound(a, 1) And UBound(c, 1) 
       If Not .exists(a(i, 1)) And Not .exists(c(i, 1)) Then 
        n = n + 1 
        a(n, 1) = a(i, 1) 
        c(n, 1) = c(i, 1) 
        a(n, 2) = a(i, 2) 
        c(n, 2) = c(i, 2) 
        a(n, 3) = a(i, 3) 
        c(n, 3) = c(i, 3) 
        a(n, 4) = a(i, 4) 
         c(n, 4) = c(i, 4) 
         a(n, 5) = a(i, 5) 
         c(n, 5) = c(i, 5) 
        .Item(a(i, 1)) = n 
        .Item(c(i, 1)) = n 
       Else 
        a(.Item(a(i, 1)), 5) = a(.Item(a(i, 1)), 5) & " " & a(i, 5) 
       End If 
      Next 
     End With 
     .Offset(, .Columns.Count + 1).Resize(n).Value = a 
    End With 
End Sub 
+0

조금 더 자세히 설명해 주실 수 있습니까? 즉, 무엇과 댓글을 연결 하시겠습니까? 조건이 있습니다. 즉, id = something이고 date = something이 id와 연결된 주석 인 경우 ... 간단한 워크 시트 함수로이 문제를 해결할 수 있습니다. 코드가 상당히 혼란 스럽습니다. 다른 접근 방식을 제안하십시오 – lllpratll

+0

당신은 또한 라인을 삭제하는 것처럼 보입니까? 두 번째 '1642 12/12/15' 라인은 어디에 있습니까? 줄은 항상 ID와 날짜별로 정렬되어 있습니까? –

+0

안녕하세요, 나는 ID와 날짜를 기반으로 comnts를 연결해야합니다. 즉 동일한 ID와 날짜에 여러 행이있는 경우 comnts는 단일 행의 결과로 연결되어야합니다 –

답변

1

매크로 아래 일부 (동일한 조건 2) secords 및 특정 값 (코멘트)을 연결하여 하나의 그룹에 편리한 방법이다.

Sub Concatenate() 
Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
Dim lrw As Integer 
Dim rgn As Range 

lrw = ActiveSheet().Range("A1").End(xlDown).Row          'last row of your table 
Set rgn = Range("A1:E" & lrw) 
rgn.Select 
ActiveWorkbook.Worksheets("Foglio1").Sort.SortFields.Clear 
ActiveWorkbook.Worksheets("Foglio1").Sort.SortFields.Add Key:=Range("A2:A13") _ 
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers '1th order by ID 
ActiveWorkbook.Worksheets("Foglio1").Sort.SortFields.Add Key:=Range("C2:C13") _ 
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal   '2th order by date 
ActiveWorkbook.Worksheets("Foglio1").Sort.SortFields.Add Key:=Range("D2:D13") _ 
    , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal   '3th order by cnt 
With ActiveWorkbook.Worksheets("Foglio1").Sort 
    .SetRange rgn 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 
    For i = 2 To lrw 
     x = Application.WorksheetFunction.CountIfs(Worksheets("Foglio1").Range("E2:E" & lrw), "*", Worksheets("Foglio1").Range("A2:A" & lrw), Cells(i, 1), Worksheets("Foglio1").Range("C2:C" & lrw), Cells(i, 3)) 
     If x > 1 Then 
      cmnts = Cells(i, 5) 
      For J = 1 To x - 1 
      cmnts = cmnts & " " & Cells(i + J, 5) 
      Rows(i + J).Select 
      Selection.ClearContents 
      Next J 
      Cells(i, 5) = cmnts 
     End If 
    Next i 
With ActiveWorkbook.Worksheets("Foglio1").Sort 
    .SetRange rgn 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 
Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 

End Sub 
+0

마법처럼 작동합니다. :) 고맙습니다. :) –

+0

고마워요. 충분히. 감사합니다. –

+0

@AnnieJeba 당신을 환영합니다. – Fabrizio

1

(당신이 2016 Excel을 사용하는 경우) G2의 배열 수식 아래에 입력

{=CONCAT(IF($A$3:$A$14&$C$3:$C$14=G3&H3,$E$3:$E$14&" ","")} 

당신 것 당신의 결과를 얻으십시오.

이전 버전을 위해, 우리는 아래 UDF

Function ConcatUDF(rng() As Variant, ByVal delim As String) As String 
Dim a, i As Long 
For i = 1 To UBound(rng, 1) 
    If rng(i, 1) <> "" Then 
    ConcatUDF = ConcatUDF & _ 
     IIf(ConcatUDF = "", "", delim) & rng(i, 1) 
    End If 
Next 
End Function 

의 코드이며, 우리는 결과를 얻을 것이다 UDF

{=ConcatUDF(IF($C$3:$C$14&$A$3:$A$14=H3&G3,$E$3:$E$14,"")," ")} 

을 작성해야합니다.

enter image description here

+0

#VALUE를 얻고 있습니다! 오류. 나는 초보자를 능가한다. : –

+0

범위 및 구분 기호를 선택하면 –

+0

임 Excel 2010을 사용하여 –

관련 문제