Excel 使用with语句将区域中的可见单元格转换为合并单元格。自学资料

Excel 使用with语句将区域中的可见单元格转换为合并单元格。自学资料,excel,vba,range,with-statement,Excel,Vba,Range,With Statement,有没有一种方法可以让我用下面的话来陈述 If ActiveSheet.Range("B17").EntireRow.Hidden = False Then If Range("C17").Value = "" Then With Range("C17:E17") .Locked = False .Merge .Horizo

有没有一种方法可以让我用下面的话来陈述

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,以上代码与整个范围相同


谢谢你的时间。

你是说这样的事吗

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个块,只保留它们并不太烦人)

你的意思是这样的吗

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个块,将它们保留为现有块并不太烦人)