Range.Merge 方法:由指定的Range对象创建合并单元格
(一)对选择的区域进行合并
Sub 合并单元格()
Selection.Merge '对选中的单元格区域执行此段代码,进行合并,仅保留左上角值
End Sub
**********************
(二)对相同相邻单元格进行合并
原料如下:
部门职工职级1部门张小跳51部门李大刀71部门王老虎81部门陈麻子62部门董小花92部门马大海102部门胡斑马82部门赵小鱼43部门魏小跑93部门于大脑103部门罗青蛙83部门刘兔子4Sub 合并单元格实例()
Dim er%, rng%, rg As Range '定义变量
Application.DisplayAlerts = False '关掉提示窗口,其内容是“仅保留左上角单元格值”
er = Application.CountA([a:a]) '数出A列的非空单元格,我们这里是14个
For rng = er To 2 Step -1 '执行从第14行到第2行,以-1为步长的循环
Set rg = Range("a" & rng) 'a14单元格对象赋给rg,那rg就变成了单元格对象
If rg = rg.Offset(-1) Then rg.Offset(-1).Resize(2).Merge
'判断a14单元格,如果该单元格=向上偏移一格的值,那么扩展最后一个单元格的尺寸为2,也就是a13到a14的合并。
'在下一个循环里,判断a13单元格是否等于向上偏移一格的值(a12),逐一合并单元格,这里a13(连着a14)要和a12合并。
Next
Application.DisplayAlerts = True
End Sub
执行代码后的效果如下:
部门职工职级1部门张小跳5李大刀7王老虎8陈麻子62部门董小花9马大海10胡斑马8赵小鱼43部门魏小跑9于大脑10罗青蛙8刘兔子4VBA也太好用了叭!
(三)取消合并单元格并保留原来的数据
与合并单元格有关的属性
Range.MergeArea 属性:返回的是一个Range对象,该对象代表包含指定单元格的合并区域。
Range.UnMerge 方法:取消合并单元格,将合并区域分解为独立的单元格
Sub test()
a = Range("a1").MergeArea.Count '与a1单元格合并在一起的单元格个数,包括 a1 在内哦。
[a1].UnMerge '取消合并a1单元格
End Sub
举个小栗子叭,如下表所示,原始表格里a1、a2、a3单元格都合并在一起了,所以这里的 a = 3.
AB1122232Sub 取消单元格合并后保留原来的数据()
Dim b%, ad$, rng As Range '声明变量
For Each rng In Selection '对于选中的每一个单元格范围进行一个循环
ad = rng.Address '循环的第一个单元格地址是a2
b = rng.MergeArea.Count '计算出来与a2合并在一起的单元格一共有4个
rng.UnMerge '取消与a2单元格合并的区域
rng.Resize(b) = rng '取出取消合并后单元格行数,此处为5,将变量rng的值全部赋给这5行
Next
End Sub
把这段代码执行到【部门-职工-职级】的工作表内(先选中第一列的这14行单元格再执行代码),运行后效果如下:
部门职工职级1部门张小跳51部门李大刀71部门王老虎81部门陈麻子62部门董小花92部门马大海102部门胡斑马82部门赵小鱼43部门魏小跑93部门于大脑103部门罗青蛙83部门刘兔子4周五快乐朋友们!