根据一列单元格的列值合并单元格

时间:2015-09-13 02:30:59

标签: excel vba excel-vba merge

我需要在行G中添加数据,如果行E具有相同的字符串,则在行A中合并Date。我找到Excel VBA - Combine rows with duplicate values in one cell and merge values in other cell,这非常有帮助,但我需要为G7:G65536范围进行此操作,因为我的1到6行已合并。

我有没有办法调整这段代码?

我试图玩它,但它没有给我任何结果。

1 个答案:

答案 0 :(得分:0)

我已使用您的评论来提供以下示例数据。

Row data merge before

我怀疑这个想法是使用列 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

运行代码后,结果类似于以下内容。

Row data merge after

如果您为了自己的超级秘密目的而抄袭此框架时遇到任何问题,请随时修改您的原始问题,包括编辑的示例数据以及预期结果以及您无法适应自己情况的此代码部分