使用可能的with语句将区域中的可见单元格转换为合并单元格.Excel VBA



有没有一种方法可以用以下内容生成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,上面的代码对整个范围都是相同的。

谢谢你抽出时间。

你的意思是这样的吗?

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个块,把它们留在现有的块中并不太烦人(

最新更新