xlwings 合并单元格 读取_【Excel VBA】批量合并单元格

诸君好,我们今天分享的VBA小代码内容是批量合并单元格。

照例举个例子,如下图所示,A列是班级字段,需要将相同的班级单元格修改为合并单元格……

775400c659f39b0ea4525e8bae7a8837.gif

代码如下:

Sub MergeRange()
    'EH技术论坛:VBA编程学习与实践 看见星光
    Dim rngData As Range
    Dim i&, lngCol&, lngFirst, lngLast
    On Error Resume Next
    Set rngData = Application.InputBox("请选择单列数据列!", Default:=Selection.Address, Type:=8)
    '用户选择数据列
    Set rngData = Intersect(rngData.Parent.UsedRange, rngData)
    'intersect语句避免用户选择整列造成低效运算
    lngCol = rngData.Column 'rngData所在列
    lngFirst = rngData.Row
    '用户选择的区域并不是一定从第一行开始,使用此句读取开始行
    lngLast = lngFirst + rngData.Rows.Count - 1
    'rngData结束行
    Application.ScreenUpdating = False
    '取消屏幕刷新
    Application.DisplayAlerts = False
    '取消消息提醒。
    rngData.Parent.Select
    '激活rngData对象所在的工作表,避免跨工作表操作问题
    For i = lngLast To lngFirst + 1 Step -1
    '对rngData进行从尾向前遍历
        If Cells(i, lngCol) = Cells(i - 1, lngCol) Then
            Cells(i - 1, lngCol).Resize(2, 1).Merge
        End If
    Next
    rngData.VerticalAlignment = xlCenter
    '单元格格式上下居中
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    MsgBox "合并完成。"
End Sub

小贴士:

1,该段代码只支持单列单元格区域,例如A10:A20,B2:B500等。

2,由于merge合并后的单元格区域只保留右上角首个单元格的值,因此该段代码遍历单元格区域的顺序是从后向前,而不是从前向后,后者是新人常出错之处。

3,当然也可以采用从前向后的遍历顺序,先将Rng装入数组,对数组中的数据进行遍历判断是否等同,标记头尾行号,再批量合并单元格。该方法的效率也会高于遍历单元格两两合并的方法。

如果你使用的是WPS表格,那就简单了:

2e5c1b10577fe55c8ebe4b0f1315c512.gif

图文作者:看见星光

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值