2016-06-09 89 views
-7

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

这是屏幕截图,我希望

this is the screenshot that i want

+2

你试过了什么?通过使用宏记录器手动执行此操作。然后看看代码,并[删除'.Select'](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros),以及你应该开始到达那里。至于计算合并单元格的数量,您需要查看[各种方法](http://stackoverflow.com/a/22076713/4650297)。 – BruceWayne

+0

欢迎来到SO。请阅读[如何提问](http://stackoverflow.com/help/how-to-ask)以获得最有效的帮助。既然你是第一天,我不想让你灰心,我会通过提供一些例子和相关的代码来帮助你。请理解,SO不是我的服务代码。你必须研究你的话题。如果您在SO的问题部分提供搜索词〜[excel-vba] Merge Cells〜,那么有721个结果会提供丰富的信息,涵盖各种情况。希望你付出努力,成为重要的贡献成员。 – skkakkar

+0

感谢您的建议。询问其他问题时我会注意。 –

回答

0
  1. 合并单元格在电子表格是指采取两个或更多个细胞和 构建单个细胞了出来。当您合并两个或更多个相邻的水平或垂直单元格时,这些单元格会成为一个跨多列或多行显示的较大的单元格。 合并多个单元格时,合并的单元格中只显示一个单元格的内容(从左到右语言的左上角的 单元格或从右到左的语言的右上单元格的 )。 您合并的其他单元格的内容将被删除。欲了解更多详情请 通过这个MSDN文章Merge and unmerge cells

简单的VBA代码之前合并单元格

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

样本数据和运行程序后显示。 Exhibit-1Exhibit-2

  • 现在让我们来看看,如果我们合并的行会发生什么。之前和运行程序显示后

    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 
    
  • 样本数据:该 锻炼,虽然一般的示例代码被测试只有一个情况, 它如下。你可以看到这不符合你的目标。

    Snapshot-3Snapshot-4

  • 接下来,我们可以尝试通过柱方法合并。在这里,我们也尝试 一列,即列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 
    
  • Snapshot-5Snapshot-6 之前和运行该程序后的样本数据中示出。你可以看到这更接近你的要求。您可以通过在主动使用的范围中查找最后一列来扩展此程序的功能。扩展程序功能以覆盖最后一列。

    +0

    这项工作非常接近我的要求。我刚才问我如何开始编码。你给了我很多。感谢您的关注,@skkakkar –

    +0

    @Ylmz_eng我很高兴我的文章对你有帮助。不要因倒票而心灰意冷。当我来到这里时,我也面临着类似的情况,并努力达到现在的水平。 – skkakkar