매크로를 사용하여 테이블의 내용을 동일한 테이블에 복사하고 AdminTime 열을 무시하면서 중복 값을 필터링 한 다음 원래 테이블을 반복하여 동일한 값을 찾고 모든 AdminTime 값을 단일로 결합하는 것이 좋습니다 끈. 아래 코드에서, 특히 테이블을 정의하고 고유 값으로 필터링하는 경우 필요에 따라 약간 조정해야합니다. 또한 AdminTime이 테이블의 마지막 열이며 그렇지 않을 수도 있다고 가정했습니다.
Option Explicit
Sub combineAdminTimes()
'Declarations
Dim tbl1 As ListObject 'Original table
Dim tbl2 As ListObject 'Abbreviated table
Dim arrColumns() 'Array of column numbers in which to search for duplicate values
Dim rcd1 As ListRow 'Generic list row in original table
Dim rcd2 As ListRow 'Generic list row in abbreviated table
Dim i As Long 'Generic counter
Dim blnMatch As Boolean 'Whether or not the two records match and should be combined
Dim s As String 'String in which to store the combined result
'Initialize
Set tbl1 = Sheet1.ListObjects(1)
Set tbl2 = Sheet2.ListObjects(1)
'Clear the old filtered list
If Not tbl2.DataBodyRange Is Nothing Then tbl2.DataBodyRange.Rows.Delete
'Copy the unfiltered list
tbl1.DataBodyRange.Copy tbl2.Range(2, 1)
'Remove all duplicate values
tbl2.Range.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7), Header:=xlYes
'Loop through records in abbreviated table
For Each rcd2 In tbl2.ListRows
s = ""
'Loop through records in original table
For Each rcd1 In tbl1.ListRows
'Check if any fields in the two records do not match
blnMatch = True
For i = 1 To tbl1.ListColumns.Count - 1
If rcd1.Range(1, i).Value <> rcd2.Range(1, i).Value Then blnMatch = False
Next
'If all matched, then add the time value to the string
If blnMatch Then
If LenB(s) > 0 Then s = s & ", " 'Separate each entry by a comma
s = s & tbl1.ListColumns("AdminTime").Range(rcd1.Range.Row, 1).Value
End If
Next
'Finally, store the combined string in the abbreviated table
tbl2.ListColumns("AdminTime").Range(rcd2.Range.Row, 1).Value = s
Next
End Sub