将 B 列的行与已合并的行 A 的计数合并

Posted

技术标签:

【中文标题】将 B 列的行与已合并的行 A 的计数合并【英文标题】:Merging Rows of column B with the count of already merged rows A 【发布时间】:2016-10-10 11:31:22 【问题描述】:

我想将一行中的单元格(属于 B 列)与已合并的不同单元格(属于 A 列)的计数合并。我该如何开始编码?

这是我想要的截图

【问题讨论】:

你试过什么?首先使用宏记录器手动执行此操作。然后看看代码和remove the .Select,你应该开始到达那里。至于计算合并单元格的数量,您需要查找various ways 来完成。 欢迎来到 SO。请阅读[如何提问](***.com/help/how-to-ask),在这里获得最有效的帮助。因为这是你的第一天,我不想让你气馁,我通过提供一些示例和相关代码来帮助你开始。请理解 SO 不是我服务的代码。你必须研究你的主题。如果您在 SO 的 Questions 部分中输入搜索词 ~[excel-vba] Merge Cells~,则有 721 个结果,其中包含丰富的信息,涵盖各种情况。希望大家努力,成为重要的贡献者。 感谢您的建议。问其他问题我会注意的。 【参考方案1】:
    合并电子表格中的单元格意味着获取两个或更多单元格并 用它们构建一个单元格。当你合并两个或更多 相邻的水平或垂直单元格,单元格变大 跨多列或多行显示的单元格。当你 合并多个单元格,只有一个单元格的内容(左上角 单元格用于从左到右的语言,或右上角的单元格用于 从右到左的语言)出现在合并的单元格中。的内容 您合并的其他单元格将被删除。更多详情请 浏览这篇 MSDN 文章Merge and unmerge cells

用于合并单元格的简单 VBA 代码

Sub merg_exp_1()
    ActiveSheet.Range("A1:C10").Merge
End Sub

显示了运行程序之前和之后的示例数据。

    现在让我们看看,如果我们合并一行会发生什么。示例代码 锻炼虽然一般只针对一种情况进行测试,并且 如下:

    Sub Merge_Rows()
        Dim rng As Range
        Dim rrow As Range
        Dim rCL As Range
        Dim out As String
        Dim dlmt As String
        dlmt = ","
        Set rng = ActiveSheet.Range("A1:C5")
        For Each rrow In rng.Rows
        out = ""
        For Each rCL In rrow.Cells
            If rCL.Value <> "" Then
                out = out & rCL.Value & dlmt
            End If
        Next rCL
        Application.DisplayAlerts = False
        rrow.Merge
        Application.DisplayAlerts = True
        If Len(rrow.Cells(1).Value) > 0 Then
            rrow.Cells(1).Value = Left(out, Len(out) - 1)
        End If
        Next rrow
    End Sub
    

显示了运行程序之前和之后的示例数据。你可以看到这不会达到你的目标。

    接下来我们可以尝试按列合并。这里我们也在尝试 对于一列,即 B 列以查看效果。示例代码为 跟随。

    Sub Merge_col_exp()
    
        Dim cnum As Integer
        Dim rng As Range
        Dim str As String
    
        For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
        cnum = Cells(i, 1).MergeArea.Count
        Set rng = Range(Cells(i, 2), Cells(i - cnum + 1, 2)) ' only to demonstrate working in 2nd column
    
        For Each cl In rng
        If Not IsEmpty(cl) Then str = str + "," + cl
        Next
        If str <> "" Then str = Right(str, Len(str) - 1)
    
        Application.DisplayAlerts = False
        rng.Merge
        rng = str
        Application.DisplayAlerts = True
    
        str = ""
        i = i - cnum + 1
        Next i
    
    End Sub
    

显示了运行程序之前和之后的示例数据。您可以看到这更接近您的要求。您可以通过在 Actively used 范围中查找 Last Column 来扩展该程序的功能。将程序功能扩展到最后一列。

【讨论】:

这项工作非常接近我的要求。我只是问我如何开始编码。你给了我很多。感谢您的关注,@skkakkar @Ylmz_eng 很高兴我的帖子对您​​有所帮助。不要因反对票而灰心。当我从这里开始时,我也遇到过类似的情况,并且一直在努力达到现在的水平。

以上是关于将 B 列的行与已合并的行 A 的计数合并的主要内容,如果未能解决你的问题,请参考以下文章

Python合并无空白换行的行

将向量合并为 df,并将向量名称转换为新列的行

Pandas 将具有多个值的行数据合并到列的 Python 列表中

Oracle SQL 选择具有开始和结束日期的行,如果某些重叠合并行

动态列的 datatable 中 相同行的数据合并,求代码方法

如何组合 pandas df 以便可以合并具有置换 col1 和 col2 值的行,其中仅包含一个组合并汇总计数列