我需要在行G中添加数据,如果行E具有相同的字符串,则在行A中合并Date。我找到Excel VBA - Combine rows with duplicate values in one cell and merge values in other cell,这非常有帮助,但我需要为G7:G65536范围进行此操作,因为我的1到6行已合并。
我有没有办法调整这段代码?
我试图玩它,但它没有给我任何结果。
答案 0 :(得分:0)
我已使用您的评论来提供以下示例数据。
我怀疑这个想法是使用列 E 作为唯一键列,并在构建连接的日期列表时聚合(又称SUM)来自 G 列的数量从A列开始。Worksheet.UsedRange property的前6行将被忽略,因为前六行中至少有一些Range.MergeCells property加入了Areas property。 TBH,我发现你原来的叙述与你最近的评论相矛盾,所以我用后者作为'发现'。
Sub merge_some_row_data()
Dim rw As Long, lr As Long, s As Long, str As String
Application.ScreenUpdating = False
With ActiveSheet.Cells(1, 1).CurrentRegion
With .Cells(7, 1).Resize(.Rows.Count - 6, .Columns.Count)
.Cells.Sort Key1:=.Columns(5), Order1:=xlAscending, _
Key2:=.Columns(1), Order2:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlNo
End With
lr = .Rows.Count
For rw = .Rows.Count To 7 Step -1
If .Cells(rw, "E").Value2 <> .Cells(rw - 1, "E").Value2 And rw < lr Then
.Cells(rw, "G") = Application.Sum(.Range(.Cells(rw, "G"), .Cells(lr, "G")))
str = vbNullString
For s = rw To lr
str = str & Chr(59) & .Cells(s, "A").Text 'Chr(59) is the ASCII code for a semi-colon
Next s
.Cells(rw, "A") = Mid(str, 2) 'truncate off the firsty semi-colon
.Cells(rw + 1, 1).Resize(lr - rw, 1).EntireRow.Delete
lr = rw - 1
End If
Next rw
End With
Application.ScreenUpdating = True
End Sub
运行代码后,结果类似于以下内容。
如果您为了自己的超级秘密目的而抄袭此框架时遇到任何问题,请随时修改您的原始问题,包括编辑的示例数据以及预期结果以及您无法适应自己情况的此代码部分