【发布时间】:2021-05-17 01:26:38
【问题描述】:
我正在尝试合并具有相同 ID 的行。我已经让它工作了,但是合并的顺序没有得到尊重。它将相同 ID 的最后一个值放在首位,而不是尊重行顺序。有谁知道如何实现这一目标?
输入:
| ID | Value |
|---|---|
| 101 | |
| 101 | 325grams |
| 101 | 500grams |
| 100 | |
| 100 | 200 grams |
| 100 | 1 kilo |
| 100 | 3 kilo |
现状:
| ID | Value |
|---|---|
| 101 | 500 grams, 325grams |
| 100 | 3 kilo, 200 grams, 1 kilo |
所需的解决方案:
| ID | Value |
|---|---|
| 101 | 325 grams, 500 grams |
| 100 | 200 grams, 1 kilo, 3 kilo |
代码:
Sub Consolidate_Rows()
Dim xRg As Range
Dim xRows As Long
Dim i As Long, J As Long, K As Long
On Error Resume Next
Set xRg = Application.InputBox("Select Range:", "Consolidate selection", Selection.Address, , , , , 8)
Set xRg = Range(Intersect(xRg, ActiveSheet.UsedRange).Address)
If xRg Is Nothing Then Exit Sub
xRows = xRg.Rows.Count
For i = xRows To 2 Step -1
For J = 1 To i - 1
If xRg(i, 1).Value = xRg(J, 1).Value And J <> i Then
For K = 2 To xRg.Columns.Count
If xRg(J, K).Value <> "" Then
If xRg(i, K).Value = "" Then
xRg(i, K) = xRg(J, K).Value
Else
xRg(i, K) = xRg(i, K).Value & "," & xRg(J, K).Value
End If
End If
Next
xRg(J, 1).EntireRow.Delete
i = i - 1
J = J - 1
End If
Next
Next
ActiveSheet.UsedRange.Columns.AutoFit
End Sub
非常感谢!
编辑: 更改表格以更类似于我的数据。合并单元格的排序应不按字母顺序排列,而应按行顺序排列。
【问题讨论】: