【问题标题】:VBA - Insert Merged Row in between gaps in dataVBA - 在数据间隙之间插入合并行
【发布时间】:2018-12-19 13:10:46
【问题描述】:

我目前有一个宏,当 E 列中的值发生变化时插入 3 行(课程部门)。在 3 行中,我试图合并中间行并将部门添加到该行中。我不知道如何让它合并,任何帮助将不胜感激。

With Range("e" & myHeader + 2, Range("e" & Rows.Count).End(xlUp)).Offset(, 1)
.Formula = _
"=if(and(r[-1]c[-1]<>"""",rc[-1]<>"""",r[-1]c[-1]<>rc[-1])," & _
"if(r[-1]c=1,""a"",1),"""")"
.Value = .Value
On Error Resume Next
For i = 1 To 3
    .SpecialCells(2, 1).EntireRow.Insert
    .SpecialCells(2, 2).EntireRow.Insert
Next

目前是这样的:

这是我想要的:

【问题讨论】:

    标签: excel vba merge cell


    【解决方案1】:

    插入或删除行时,从下往上进行。一些简单的偏移量和调整大小应该足以插入三行、合并单元格并传输值。

    Option Explicit
    
    Sub insertDept3()
    
        Dim i As Long
    
        With Worksheets("sheet10")
            For i = .Cells(.Rows.Count, "E").End(xlUp).Row - 1 To 1 Step -1
                If .Cells(i, "E").Value <> .Cells(i + 1, "E").Value Or i = 1 Then
                    .Cells(i + 1, "A").Resize(3, 5).Insert shift:=xlDown
                    .Cells(i + 2, "A").Resize(1, 5).Merge
                    .Cells(i + 2, "A") = .Cells(i + 4, "E").Value
                End If
            Next i
        End With
    
    End Sub
    

    我会把单元格对齐和字体格式留给你。

    【讨论】:

      【解决方案2】:

      下面的代码循环E列,值变化时导入三行,将A列合并到E列,中间一行导入并格式化值。

      试试:

      Option Explicit
      
      Sub test()
      
          Dim i As Long, Lastrow As Long
          Dim Department  As String, NextDepartment As String
      
          With ThisWorkbook.Worksheets("Sheet1")
              Lastrow = .Cells(.Rows.Count, "E").End(xlUp).Row
      
              For i = Lastrow To 2 Step -1
                  Department = .Range("E" & i).Value
                  NextDepartment = .Range("E" & i).Offset(-1, 0).Value
                  If Department <> NextDepartment Then
                      .Rows(i).EntireRow.Resize(3).Insert
                      .Range("A" & i + 1 & ":E" & i + 1).Merge
                      With .Range("A" & i + 1)
                          .Value = Department
                          .Font.Bold = True
                          .HorizontalAlignment = xlLeft
                          .VerticalAlignment = xlCenter
                      End With
                  End If
              Next i
      
          End With
      

      输出:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 2022-12-05
        • 1970-01-01
        • 2021-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多