大家好,Excel合併單元格,是一個讓人又愛又恨的東西!強烈建議,儘量不要把單元格合併在一起,因為合併單元格會給以後的數據處理帶來很多的麻煩!但合併單元格的功能,在套打或設定版面時,又有其不可替代的作用,因此讓人又愛又恨!
我們在工作中經常會遇到需要合併相同值的單元格,但是對於Excel有大量需要合併單元格的時候,你真確定要一個一個的合併嗎?其實你大可不必慌忙,我們今天分享的VBA小代碼內容是批量合併相同值的單列單元格。您只需將以下代碼複製到VBE窗口中,執行代碼即可。
照例舉個例子,如下圖所示,C列是部門欄位,需要將相同的部門單元格修改為合併單元格。
源數據:
我們看看執行的效果:
看了上面的動畫,是不是感覺非常適合合併大量的單元格。其實上述的代碼也是非常簡單.
附上Excel VBA代碼
Sub MergeRange()
Dim rngData As RangeDim i&, lngCol&, lngFirst, lngLast On Error Resume Next
Set rngData = Application.InputBox("請選擇單列數據列!", Default:=Selection.Address, Type:=8)
Set rngData = Intersect(rngData.Parent.UsedRange, rngData) 'intersect語句避免用戶選擇整列造成低效運算
lngCol = rngData.Column 'rngData所在列 lngFirst = rngData.Row '用戶選擇的區域並不是一定從第一行開始,使用此句讀取開始行
lngLast = lngFirst + rngData.Rows.Count - 1 'rngData結束行 Application.ScreenUpdating = False '取消屏幕刷新 Application.DisplayAlerts = False '取消消息提醒。 rngData.Parent.Select
'激活rngData對象所在的工作表,避免跨工作表操作問題 For i = lngLast To lngFirst + 1 Step -1 '對rngData進行從尾向前遍歷 If Cells(i, lngCol) = Cells(i - 1, lngCol) Then Cells(i - 1, lngCol).Resize(2, 1).Merge End If Next
rngData.VerticalAlignment = xlCenter '單元格格式上下居中 Application.ScreenUpdating = True Application.DisplayAlerts = True MsgBox "合併完成!"End Sub
PS:
1,該段代碼只支持單列單元格區域,即按照相同的列進行合併。例如A10:A20,B2:B500等。
2,由於merge合併後的單元格區域只保留右上角首個單元格的值,因此該段代碼遍歷單元格區域的順序是從後向前,而不是從前向後,後者是新人常出錯之處,注意for-next循環是從Step -1開始的。
3,當然也可以採用從前向後的遍歷順序,先將Rng裝入數組,對數組中的數據進行遍歷判斷是否等同,標記頭尾行號,再批量合併單元格。該方法的效率也會高於遍歷單元格兩兩合併的方法。
其實合併單元格,對我處理數據的時候,造成非常大的麻煩,我們最好還是少合併單元格。
以上就是今天要和大家分享的技巧,希望對大家有所幫助,祝各位一天好心情!
Excel中的每一個函數都有特定的用途,不是他們沒有用處,而是你不了解他們或者用不著,建議同學們收藏起來,萬一要用著呢!
唯有不斷學習,才能不被淘汰!