Excel 动态合并&;使用VBA按可变值将单元格居中
我正在尝试使用VBA的静态起点合并&CenterExcel 动态合并&;使用VBA按可变值将单元格居中,excel,vba,Excel,Vba,我正在尝试使用VBA的静态起点合并&Centerx单元格数 我的起点始终是单元格D69,我将始终从第69行开始合并列D-I,然后将文本向左对齐 我的当前宏如下所示: Range("D69:I69").Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .Orientation = 0
x
单元格数
我的起点始终是单元格D69,我将始终从第69行开始合并列D-I
,然后将文本向左对齐
我的当前宏如下所示:
Range("D69:I69").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.merge
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
End With
我需要对第69行之后的行继续此过程x
次数。我很难实现一个循环,它使用x
作为我的迭代次数,并且起点是第69行+迭代次数作为行参考点
D合并到I的每一行(从69开始)
选项显式
_客户端()的子合并_
将ws设置为工作表:设置ws=ThisWorkbook.Sheets(“Sheet1”)’=69,然后
对于i=69至LR
ws.Range(ws.Cells(i,“D”)、ws.Cells(i,“i”)).Merge
接下来我
使用ws.Range(ws.Cells(69,“D”)、ws.Cells(LR,“I”))
.HorizontalAlignment=xlLeft
'添加要在此With块中应用的任何其他格式
以
如果结束
Application.DisplayAlerts=True
Application.ScreenUpdating=True
端接头
查看这是否有帮助,更多详细信息请参见代码注释:
子合并此()
将ws设置为工作表:Set ws=ThisWorkbook.Sheets(“SheetName”)'声明并设置工作表,设置工作表名称。
Dim X As Long,howManyTimes As Long'声明要使用的变量
howManyTimes=100'在此处设置次数。请参阅其他代码,了解如何将其移到最后一行
对于X=0到howManyTimes的循环,从0到如此多次
使用ws.Range(“D69:I69”).Offset(X)使用Offset from Range来获得要处理的新范围
.MergeCells=True
.HorizontalAlignment=xlLeft
以
下一个X
端接头
我已经从merge/format中删除了所有默认值,如果它们没有设置为不同的值,则没有任何区别
现在有很多方法可以得到最后一行,如果你需要的话。只需添加:
Dim lRow As Long:lRow=ws.Cells(Rows.Count,4).End(xlUp).Row
howManyTimes=lRow
我会停下来问问自己是否真的需要合并这些单元格?有时这会增加价值,但这往往是一个糟糕设计的标志。这里的弊大于利。在VBA和excel公式中使用合并单元格是一件痛苦的事情。我完全同意“糟糕的设计”这个问题。这是最明确的情况,但它也是来自客户的文档,他们希望保持设计不变。
Option Explicit
Sub Merge_For_Client()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- Update Sheet
Dim LR As Long, i As Long
LR = ws.Range("D" & ws.Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If LR >= 69 Then
For i = 69 To LR
ws.Range(ws.Cells(i, "D"), ws.Cells(i, "I")).Merge
Next i
With ws.Range(ws.Cells(69, "D"), ws.Cells(LR, "I"))
.HorizontalAlignment = xlLeft
'Add any other formats you want to apply in this With Block
End With
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub