失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【Excel VBA】如何批量合并相同值单元格?

【Excel VBA】如何批量合并相同值单元格?

时间:2021-07-01 21:56:51

相关推荐

【Excel VBA】如何批量合并相同值单元格?

批量合并相同值单元格

很久以前,我们和大家分享过一段类似功能的代码,链接:【Excel VBA】批量合并相同值单元格

但那段代码只支持单列数据合并……

另外,在那段推文的结尾,我们也留了一个尾巴。尾巴里说使用数组的方法,批量合并效率会高于遍历单元格两两合并……

打个响指,欠揍脸,我们今天和大家分享的方法就是数组法的啦。

效果动画如下:

小贴士:

1,该段代码支持用户选择单列或多列数据,选择区域的整行数据相同则进行合并。

2,代码照例允许用户选择整列数据,也不用担心运算量过大,系统假死的情况。

3,代码使用了一个数组brr用于存放数据以及合并单元格的行数。VBA在使用数组处理数据时,这个方法是经常使用到的。如果你函数还可以,那么你可以把这样的数组理解为辅助列。对于函数大神,比如曾经的我,可能相当讨厌辅助列,认为不够表现高超的水平;但是,在VBA中,善于使用辅助列性质的数组不但是个好习惯,而且经常是解决问题的最好方法,任性的不加之一。

4,事实上这段代码也可以不使用数组brr,而只使用变量……

5,我们下期再分享如何批量撤销合并单元格。

晚安,晚安,晚安……

代码如下:

Sub RngMergeCondition() "批量合并单元格

Dim rngUser As Range

Dim rngMerge As Range

Dim rngSelect As Range

Dim i As Long, j As Long

Dim lngRowFirst As Long

Dim lngClnFirst As Long

Dim arr As Variant

Dim brr As Variant

Dim strTemp As String

Dim lngBK As Long

Dim shtUser As Worksheet

On Error Resume Next

Set 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 Sub

arr = rngUser.Value

ReDim 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)

"合并多列字符串为单个字符串

Next

brr(i, 1) = strTemp

"字符串装入结果数组

If i > 1 Then

"如果不是第一行

If brr(i - 1, 1) = strTemp Then

If lngBK = 0 Then lngBK = i - 1

"lngBK变量赋值结果数组用于存放合并行数的位置

brr(lngBK, 2) = brr(lngBK, 2) + 1

"累计相同值的行数

Else

lngBK = i

End If

End If

Next

Application.ScreenUpdating = False

Application.DisplayAlerts = False

lngRowFirst = rngUser.Row

"用户选择单元格区域的开始行

lngClnFirst = rngUser.Column

"用户选择单元格区域的开始列

Set shtUser = rngUser.Parent

For i = 1 To UBound(brr)

If brr(i, 2) > 0 Then

For j = 1 To UBound(arr, 2)

Set rngMerge = shtUser.Cells(i + lngRowFirst - 1, lngClnFirst + j - 1)

rngMerge.Resize(brr(i, 2) + 1, 1).Merge

Next

End If

Next

Application.ScreenUpdating = True

Application.DisplayAlerts = True

End Sub

淘宝、当当、京东各大网店均有销售

如果觉得《【Excel VBA】如何批量合并相同值单元格?》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。