关于vba:根据单元格范围内列中的值合并单元格

Merge cells depending on a value in column for a range of cells

如果行E具有相同的字符串,我需要在行G中添加数据,并在行A中合并日期。我发现Excel VBA-在一个单元格中合并具有重复值的行并在另一个单元格中合并值,这非常有帮助,但是我需要对G7:G65536范围进行此操作,因为我的行从1到6被合并了。

有没有一种方法可以修改此代码?

我正在尝试使用它,但是它没有给我任何结果。


我已根据您的评论提出了以下示例数据。

Row data merge before

我怀疑这种想法是将E列用作唯一键列,并在建立A列的日期的串联列表时汇总(aka SUM)G列的数量。Worksheet.UsedRange属性的前6行将被忽略,因为在前六行中至少有一些Range.MergeCells属性具有连接的Areas属性。 TBH,我发现您的原始叙述与您最近的评论相矛盾,因此我将后者作为"发现"。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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

如果您出于自身超级机密的目的而完全转录此框架时遇到麻烦,请随时使用经过编辑的样本数据以及预期的结果和此代码中您无法适应的部分来修改原始问题。