[没有的知识]Excel批量向下合并相同单元格(VBA宏)
- 2026-10-26 06:07:15
[没有的知识]Excel批量向下合并相同单元格(VBA宏)步骤: 例如:你想合并 A、B、C 三列,就选中 A:C 整列区域(或选中包含数据的行范围,如 A1:C100)。 5 运行宏 按 Alt + F8 打开宏对话框 选择 MergeSameCellsInSelectedColumns 点击「运行」 6 结果 每一列中,相邻且内容相同的单元格会被自动合并(垂直方向)。 代码:
按 Alt + F11 打开VBA编辑器 点击菜单栏「插入」→「模块」,在空白处粘贴下文代码 关闭VBA编辑器,返回Excel界面 选中需要合并的列区域
Sub MergeSameCellsInSelectedColumns()' 关闭警告和屏幕刷新以提升速度Application.DisplayAlerts = FalseApplication.ScreenUpdating = FalseDim rng As RangeDim col As RangeDim i As LongDim startRow As LongDim endRow As LongDim lastRowInCol As LongDim currentVal As Variant' 获取用户选中的区域Set rng = SelectionIf rng Is Nothing ThenMsgBox "请先选中需要合并的列区域(例如 A:D)", vbExclamationExit SubEnd If' 遍历选中区域中的每一列(不一定是整列,只遍历选中的部分)For Each col In rng.Columns' 获取该列在选中范围内的实际使用行数(从选中区域的第一行到最后一行)startRow = rng.Rows(1).RowendRow = rng.Rows(rng.Rows.Count).Row' 如果选中的是整个列,自动定位到该列最后非空行If endRow > startRow And Application.CountA(col) > 0 ThenlastRowInCol = col.Cells(col.Cells.Count).End(xlUp).RowIf lastRowInCol < endRow Then endRow = lastRowInColEnd If' 从下往上扫描,合并相邻相同内容的单元格i = endRowDo While i > startRowcurrentVal = col.Cells(i, 1).ValueIf currentVal = col.Cells(i - 1, 1).Value Then' 找到起始行Dim j As Longj = i - 1Do While j > startRow And col.Cells(j, 1).Value = currentValj = j - 1Loopj = j + 1 ' 相同的起始行' 合并从 j 到 i 的单元格If j < i ThenRange(col.Cells(j, 1), col.Cells(i, 1)).Merge' 合并后内容保留在第一个单元格(j行),不影响其他列End Ifi = j - 1Elsei = i - 1End IfLoopNext col' 恢复设置Application.DisplayAlerts = TrueApplication.ScreenUpdating = TrueMsgBox "合并完成!"End Sub
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。