
私たちの目標は、A のデータが等しい場合に名前 (B) を結合することです。以下の数式は次の行 (A) を見て、同じ場合は B のデータ (名前) を結合します。数式は C にあるため、結合された名前の結果は C に表示されます。
=IF(A2<>A3,B2, B2&" , "&B3)
例:もし A2:XYZ
そして A3:XYZ
それからをマージしB2:Sam
、B3:Dan
に入力しますC = "Sam, Dan"
。
問題: 重複をスキップして、一致する A を持つすべての名前を 1 つのセル (C) に結合して表示する必要があります。
もし A1:A4 = XYZ,
そしてB1:サム B2=ダン B3=ダン B4=ジョー`それからC の結果は「Sam、Dan、Joe」と表示されます。
ご提案があればぜひお願いします。
答え1
このVBAは昇順で並べ替え、重複を削除し、出力リストを表示します。
Sub test()
Application.ScreenUpdating = False
' Sort Ascending
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A:B")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Remove Duplicates
ActiveSheet.Range("A:B").RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo
'concatenate
Dim data, numrows As Long, result, i As Long, n As Long
If Range("a1") = "" Then Exit Sub
With Range("a1", Cells(Rows.Count, "a").End(xlUp)).Resize(, 2)
.Sort key1:=Range("a1"), Header:=xlNo
data = .Value
numrows = UBound(data)
ReDim result(1 To numrows, 1 To 1)
For i = 1 To numrows
temp = data(i, 1)
result(i, 1) = result(i, 1) & data(i, 2)
For n = i + 1 To numrows
If data(n, 1) = temp Then result(i, 1) = result(i, 1) & ", " & data(n, 2) Else Exit For
Next
i = n - 1
Next
.Offset(, 2).resize(,1) = result
End With
Application.ScreenUpdating = True
End Sub