有这样一个表格,想达到图2那种样子。
原表
想实现的效果
三种方法:1是直接选中,然后点击“合并后居中”按钮;2是录制一段宏,然后挨个运行;3是编写一段VBA代码实现。
数据量一大,还是第三种方法省时省力。好了开始。
点击“开发工具”里的“Visual Basic"按钮
插入一个模块
然后敲入下面的代码
Sub 合并单元格() Application.DisplayAlerts = False '关闭系统提醒 For i = 16 To 2 Step -1 If Cells(i, 1) = Cells(i - 1, 1) Then Range(Cells(i - 1, 1), Cells(i, 1)).Merge Next i Application.DisplayAlerts = True '记得在程序结尾打开系统提醒End Sub然后,关闭编辑器,点击开发工具里的”宏“。
选择列表里的”合并单元格“,点击右边的”执行“
是不是变成我们想要的效果了?
知识点:range(),表示单元格区域。可以是一片,也可以是一个。如:
range("A1") ‘表示单元格A1
range("A1:B10") ’表示区域A1:B10
range("A1:A3","C1:C3") '表示A1:C3
range("A5:E5 B1:B12") '表示A5:E5和B1:B12的交叉部分单元格
cells(),表示一个单元格。 就一个单元格。如:
cells(8,2) cells(8,"B") cells(2)
那么问题又来了,假如现在行数增加了,需要合并的也不一定是第一列?如何让程序有通用性?
设置一些变量,来代替经常改变的系数,如行,列。改变后如下:
Sub 合并单元格() Application.DisplayAlerts = False lie = "A" '设置第几列需要合并单元格,填写列号或列的子母 r = Cells(65535, lie).End(3).Row For i = r To 2 Step -1 If Cells(i, lie) = Cells(i - 1, lie) Then Range(Cells(i - 1, lie), Cells(i, lie)).Merge Next i Application.DisplayAlerts = TrueEnd Sub好了,这样的话,如果实际数据改了,我们只需改变一下斜体部分就可以合并单元格了。