【问题标题】:VBA using if statement and for loop to merge certain cellsVBA使用if语句和for循环合并某些单元格
【发布时间】:2016-10-15 14:05:08
【问题描述】:

我试图让这段代码说“如果第 3 列 (C) 中的单元格 = 单词“高”或“中”,则将第 4 列 (D) 中的匹配单元格合并并居中,只有下面的单元格它。但是,我现在的反应方式是由于 .End(xlDown) 一直合并到底部。我不知道如何解决这个问题。这里是数据示例以及我希望它的外观:

example2

这是我一直在使用的 VBA 代码:

Sub Merge_Priority2()
Dim RgToMerge As String


For i = 1 To ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row
    RgToMerge = ""
    If LCase(Cells(i, 3)) = "high" Or LCase(Cells(i, 3)) = "middle" Then
       RgToMerge = "$D$" & Cells(i, 4).End(xlDown).Row & ":$D$" & i
       With Range(RgToMerge)
           .Merge
           .HorizontalAlignment = xlCenterAcrossSelection
           .VerticalAlignment = xlCenter
       End With

    Else
    End If

Next i

End Sub

【问题讨论】:

  • 我想删除.End(xlDown)
  • 不,它只是将未合并的单元格居中

标签: vba excel merge


【解决方案1】:

我假设您使用 .End(xlDown) 来选择一行,但您可以摆脱它(正如 @MattCremeens 建议的那样)。然后,对于范围的第二部分,将 1 添加到 i 以使其选择仅一个行,如下所示:

RgToMerge = "$D$" & i & ":$D$" & i + 1

对于第 1 行,RgToMerge 将看起来像 $D$1:$D$2。完整的 Sub 如下所示:

Sub Merge_Priority2()
Dim RgToMerge As String


For i = 1 To ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row
    RgToMerge = ""
    If LCase(Cells(i, 3)) = "high" Or LCase(Cells(i, 3)) = "middle" Then
       RgToMerge = "$D$" & i & ":$D$" & i + 1
       With Range(RgToMerge)
           .Merge
           .HorizontalAlignment = xlCenterAcrossSelection
           .VerticalAlignment = xlCenter
       End With

    Else
    End If

Next i

End Sub

【讨论】:

    【解决方案2】:

    尝试根据行变量 (i) 定义范围

    Sub Merge_Priority2()
    Dim RgToMerge As Range
    
    
    For i = 1 To ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
        If LCase(Cells(i, 3)) = "high" Or LCase(Cells(i, 3)) = "middle" Then
        Set RgToMerge = ActiveSheet.Range(Cells(i, 4), Cells(i + 1, 4))
    
           With RgToMerge
               .Merge
               .HorizontalAlignment = xlCenterAcrossSelection
               .VerticalAlignment = xlCenter
           End With
    
        Else
        End If
    
    Next i
    
    End Sub
    

    【讨论】:

      【解决方案3】:

      我稍微修改了您的代码。我不觉得你离得太远了。

      Sub Merge_Priority2() 将 RgToMerge 调暗为范围

      For i = 1 To ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row
          If LCase(Cells(i, 3)) = "high" Or LCase(Cells(i, 3)) = "middle" Then
             Set RgToMerge = Range(Cells(i, 3), Cells(i + 1, 3))
             With RgToMerge
                 .Merge
                 .HorizontalAlignment = xlCenterAcrossSelection
                 .VerticalAlignment = xlCenter
             End With
      
          Else
          End If
      
      Next i
      

      我假设相关数据在 C 列中。 结束子

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 2019-01-07
        • 1970-01-01
        • 2018-05-20
        • 2015-09-30
        • 2013-08-26
        • 1970-01-01
        相关资源
        最近更新 更多