首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

批量合并单元格

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

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

代码如下:

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装入数组,对数组中的数据进行遍历判断是否等同,标记头尾行号,再批量合并单元格。该方法的效率也会高于遍历单元格两两合并的方法。

图文作者:看见星光

专业的职场技能充电站

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200112A03ZYU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券