茫然走在海邊,看那潮來潮去,徒勞無功想把 每朵浪花記起……
諸君好,我們今天分享的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編程學習與實踐
上一篇
通天穴—鼻塞等症狀
有話要說...