目录
1.使用vba的方式
1.1合并相同相邻单元格
1.2拆分单元格
2.使用分类汇总+定位ctrl+G的手工方法
1.使用vba的方式
1.1合并相同相邻单元格
代码如下:
Sub RngMergeCondition() '批量合并单元格Dim rngUser As RangeDim rngMerge As RangeDim rngSelect As RangeDim i As Long, j As LongDim lngRowFirst As LongDim lngClnFirst As LongDim arr As VariantDim brr As VariantDim strTemp As StringDim lngBK As LongDim shtUser As WorksheetOn Error Resume NextSet rngSelect = SelectionSet rngUser = Application.InputBox("请选择需要合并的单元格区域!", Default:=rngSelect.Address, Type:=8)Set rngUser = Intersect(rngUser.Parent.UsedRange, rngUser)'使用Intersect规避用户选择整列数据If rngUser Is Nothing Then MsgBox "选择的单元格区域不能为空白": Exit Subarr = rngUser.ValueReDim brr(1 To UBound(arr), 1 To 2)'结果数组,第一列保存值,第二列保存合并行数For i = 1 To UBound(arr)strTemp = ""For j = 1 To UBound(arr, 2)strTemp = strTemp & "@@" & arr(i, j)'合并多列字符串为单个字符串Nextbrr(i, 1) = strTemp'字符串装入结果数组If i > 1 Then'如果不是第一行If brr(i - 1, 1) = strTemp ThenIf lngBK = 0 Then lngBK = i - 1'lngBK变量赋值结果数组用于存放合并行数的位置brr(lngBK, 2) = brr(lngBK, 2) + 1'累计相同值的行数ElselngBK = iEnd IfEnd IfNextApplication.ScreenUpdating = FalseApplication.DisplayAlerts = FalselngRowFirst = rngUser.Row'用户选择单元格区域的开始行lngClnFirst = rngUser.Column'用户选择单元格区域的开始列Set shtUser = rngUser.ParentFor i = 1 To UBound(brr)If brr(i, 2) > 0 ThenFor j = 1 To UBound(arr, 2)Set rngMerge = shtUser.Cells(i + lngRowFirst - 1, lngClnFirst + j - 1)rngMerge.Resize(brr(i, 2) + 1, 1).MergeNextEnd IfNextApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueEnd Sub
1.2拆分单元格
代码如下:
Sub unMergeRng() '撤销合并单元格Dim rngUser As RangeDim rngMerge As RangeDim lngRowFirst As LongDim lngRowEnd As LongDim lngClnFirst As LongDim lngColEnd As LongDim lngRowMerge As LongDim i As LongDim j As LongDim rngSelect As RangeOn Error Resume NextSet rngSelect = Selection'用户初始选择的单元格Set rngUser = Application.InputBox("请选择需要撤销合并的单元格区域!", Default:=rngSelect.Address, Type:=8)'用户选择需要撤销合并的单元格区域Set rngUser = Intersect(rngUser.Parent.UsedRange, rngUser)'Intersect避免用户选择整列等单元格范围时,程序运算数据虚大,运算效率低下If rngUser Is Nothing Then MsgBox "选择的单元格区域不能为空白": Exit SublngRowFirst = rngUser.Row'运算范围的初始行lngRowEnd = lngRowFirst + rngUser.Rows.Count - 1'运算范围的结束行lngClnFirst = rngUser.Column'运算范围的开始列lngColEnd = lngClnFirst + rngUser.Columns.Count - 1'运算范围的结束列Application.ScreenUpdating = FalseFor i = lngRowFirst To lngRowEnd'遍历行For j = lngClnFirst To lngColEnd'遍历列lngRowMerge = Cells(i, j).MergeArea.Rows.Count'合并单元格的行数If lngRowMerge > 1 ThenWith Cells(i, j).Resize(lngRowMerge, 1).Select.UnMerge'撤销合并.Value = Cells(i, j)'填充数据End WithEnd IfNexti = i + lngRowMerge - 1'跳过已处理完的合并行NextrngSelect.SelectApplication.ScreenUpdating = TrueEnd Sub
拆分前:
拆分后:
以上摘自
/tags/Ntzakg4sNDMxMjUtYmxvZwO0O0OO0O0O.html
2.使用分类汇总+定位ctrl+G的手工方法
前提条件是向下有相同的单元格 如果向下是空的单元格需要先搞成相同单元格:
然后复制粘贴A列为值,然后就可以用一下的分类汇总了
以下摘自百度
百度安全验证/s?id=1716740632111022951&wfr=spider&for=pc
这个方法是小编知道最早流传的经典操作技巧之一,我们先选中需要合并单元格字段列的单元格区域,在数据选项卡中的分级显示找到分类汇总,选择后会弹出一个提示,我们确定后会按照部门列字段进行分类汇总,接着对左边多出来的汇总列区域选中,按快捷键Ctrl+G或者F5定位空值,然后在开始选项卡中将定位的空单元格合并。
继续选中D列部门字段单元格区域,再次打开分类汇总对话框,然后点击全部删除,把多余的C列删除。这样操作下来,部门字段中相同内容的单元格就全部被合并了。