當前位置:首頁 > 科技 > 正文

VBA常用小代碼102:批量合并相同值單元格

茫然走在海邊,看那潮來潮去,徒勞無功想把 每朵浪花記起……

諸君好,我們今天分享的VBA小代碼内容是批量合并相同值的單列單元格。

照例舉個例子,如下圖所示,A列是班級字段,需要将相同的班級單元格修改為合并單元格……。

代碼如下:


Sub MergeRange()

'EH技術論壇:VBA編程學習與實踐 看見星光

Dim Rng As Range

Dim i&, Col&, Fist, Last

Set Rng = Application.InputBox('請選擇單列數據列!', Type:=8)

'用戶選擇數據列

Set Rng = Intersect(Rng.Parent.UsedRange, Rng)

'intersect語句避免用戶選擇整列造成無謂運算

Col = Rng.Column 'Rng所在列

Fist = Rng.Row

'Rng開始行,用戶選擇的區域并不是一定從第一行開始,因此需要此句判斷

Last = Fist Rng.Rows.Count - 1 'Rng結束行

Application.ScreenUpdating = False '取消屏幕更新

Application.DisplayAlerts = False

'取消消息提醒。當有值單元格被合并時屏蔽提示信息

Rng.Parent.Select '激活Rng對象所在的工作表,避免跨工作表操作問題

For i = Last To Fist 1 Step -1

'對Rng進行從後向前遍曆

If Cells(i, Col) = Cells(i - 1, Col) Then

Cells(i - 1, Col).Resize(2, 1).Merge

End If

Next

Rng.VerticalAlignment = xlCenter '格式上下居中

Application.ScreenUpdating = True

Application.DisplayAlerts = True

MsgBox '合并完成。'

End Sub


小貼士:

1,該段代碼隻支持單列單元格區域,例如A10:A20,B2:B500等。

2,由于merge合并後的單元格區域隻保留右上角首個單元格的值,因此該段代碼遍曆單元格區域的順序是從後向前,而不是從前向後,後者是新人常出錯之處。

3,當然也可以采用從前向後的遍曆順序,先将Rng裝入數組,對數組中的數據進行遍曆判斷是否等同,标記頭尾行号,再批量合并單元格。該方法的效率也會高于遍曆單元格兩兩合并的方法。

……感冒頭疼……聽完大海,就說晚安~

一碼不掃,
可以掃天下?

ExcelHome

VBA編程學習與實踐

你可能想看:

有話要說...

取消
掃碼支持 支付碼