Excel中的合并单元格一直为很多人所吐槽,虽然形式上比较美观些,但在数据的计算、统计时成了很多人的恶梦,当然这是题外话。好在Excel中还可以通过VBA宏代码来解决问题的途径。曾有人问:Excel如此强大,为什么还要用VBA?我说是:当在进行Excel操作时,如果你觉得这活真不是人干的时,可以考虑用VBA,当然也可以用Python。
这里我们用VBA宏来演示实现自动合并单元格。假设有如下图所示的Excel工作表:
现在要将A列中相同的单元格合并为一个单元格。在VBA中有一个合并单元格的Merge方法可以实现合并指定的单元格区域,当被合并的单元格不空时,系统会给出警告,我们可以用代码关闭系统警告。按Alt+F11组合键进入到VBA宏代码编写窗口,单击【插入\模块】菜单进入到通用模块窗口,然后输入相应的宏代码,这里将宏名命名为“合并相同单元格”,下面给出相应的代码,如下图所示:
代码行Application.DisplayAlerts = False用于关闭系统警告信息;用For each-Next循环遍历选定单元格区域(用Selection对象表示),获取值相同的单元格区域的起始单元格地址firstCellAddress与结束单元格地址lastCellAddress,然后用代码行Range(firstCellAddress & ":" & cellAddress).Merge合并该区域的单元格。上述宏实现了对选定的单元格区域中上下相同的单元格合并成一个单元格,同时保留相应的数值。
下面给出宏的文本代码如下:
Sub 合并相同单元格() Application.DisplayAlerts = False firstCellAddress = Selection.Cells(1, 1).Address cellValue = Selection.Cells(1, 1).Value For Each x In Selection If x.Value = cellValue Then cellAddress = x.Address Else Range(firstCellAddress & ":" & cellAddress).Merge firstCellAddress = x.Address cellValue = x.Value End If Next r = Selection.Rows.Count c = Selection.Columns.Count lastCellAddress = Selection.Cells(r, c).Address If firstCellAddress <> lastCellAddress Then Range(firstCellAddress & ":" & lastCellAddress).Merge End If Application.DisplayAlerts = TrueEnd Sub代码编写完成后,返回到工作表窗口,选中A列第2行开始的单元格区域,然后单击【开发工具】选项卡中【代码】组中的【宏】命令,在弹出的【宏】窗口中选择“合并相同单元格”宏,然后单击【执行】按钮,即可得到运行结果。
我是老师,关注我,持续分享更多的Excel知识与操作技巧。