【问题标题】:Convert visible cells in a range to merged cells with possible With Statement. Excel VBA使用可能的 With 语句将范围中的可见单元格转换为合并单元格。 Excel VBA
【发布时间】:2020-12-01 14:49:45
【问题描述】:

有没有一种方法可以用以下内容制作 with 语句?

If ActiveSheet.Range("B17").EntireRow.Hidden = False Then
    If Range("C17").Value = "" Then
        With Range("C17:E17")
            .Locked = False
            .Merge
            .HorizontalAlignment = xlCenterAcrossSelection
            .VerticalAlignment = xlCenter
        End With
        With Range("F17:G17")
            .Locked = False
            .Merge
            .HorizontalAlignment = xlCenterAcrossSelection
            .VerticalAlignment = xlCenter
        End With
        With Range("H17:J17")
            .Locked = False
            .Merge
            .HorizontalAlignment = xlCenterAcrossSelection
            .VerticalAlignment = xlCenter
        End With
    End If
End If
If ActiveSheet.Range("B18").EntireRow.Hidden = False Then
    If Range("C18").Value = "" Then
        With Range("C18:E18")
            .Locked = False
            .Merge
            .HorizontalAlignment = xlCenterAcrossSelection
            .VerticalAlignment = xlCenter
        End With
        With Range("F18:G18")
            .Locked = False
            .Merge
            .HorizontalAlignment = xlCenterAcrossSelection
            .VerticalAlignment = xlCenter
        End With
        With Range("H18:J18")
            .Locked = False
            .Merge
            .HorizontalAlignment = xlCenterAcrossSelection
            .VerticalAlignment = xlCenter
        End With
    End If
End If

工作表上的范围从 B17 到 B31,上面的代码对于整个范围都是相同的。

感谢您的宝贵时间。

【问题讨论】:

    标签: excel vba range with-statement


    【解决方案1】:

    你的意思是这样的吗?

    dim i as int
    
    for i= 17 to 31
      If ActiveSheet.Range("B" & i).EntireRow.Hidden = False Then
        If Range("C" & i).Value = "" Then
            With Range("C" & i & ":E" & i)
                .Locked = False
                .Merge
                .HorizontalAlignment = xlCenterAcrossSelection
                .VerticalAlignment = xlCenter
            End With
            With Range("F" & i & ":G" & i)
                .Locked = False
                .Merge
                .HorizontalAlignment = xlCenterAcrossSelection
                .VerticalAlignment = xlCenter
            End With
            With Range("H" & i & ":J" & i)
                .Locked = False
                .Merge
                .HorizontalAlignment = xlCenterAcrossSelection
                .VerticalAlignment = xlCenter
            End With
        End If
      End If
    next i
    

    (您可以为列合并执行另一个嵌套 for 循环以提高效率,但只有 3 个块,将它们保留原样并不会太烦人)

    【讨论】:

      猜你喜欢
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2014-12-08
      相关资源
      最近更新 更多