- Excel VBA范例大全
- 羅剛君編著
- 4720字
- 2018-12-29 15:15:29
第10章 合并單元格相關操作
在處理表格標題時,為了美觀,一般都將上標題或者左側標題合并居中。當需要合并或者取消合并的單元格較多時,手工操作無疑事倍功半。本章通過12個實例講解單元格合并、取消合并及對具有合并屬性區域進行相關操作的技巧。
● 實例73全選合并單元格
● 實例74將所有合并單元格加上背景
● 實例75取消所有合并單元格之合并屬性
● 實例76取得合并單元格的首個和末尾地址
● 實例77合并數據并居中
● 實例78合并數據并粘貼
● 實例79批量合并單元格
● 實例80指定列取消合并同時恢復數據
● 實例81取得合并單元格數目
● 實例82報告合并單元格地址
● 實例83對所有合并單元格添加批注并標示序數
● 實例84將已用區域合并取消且填充空白單元格
實例73 全選合并單元格
【技巧說明】 全選合并單元格。
【案例實現】 參見以下步驟:
【案例介紹】 如圖2.81所示。郵編列表中有4個合并單元格,現需將之全部選中。
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub全選合并單元格() Dim arr(), rng As Range, i As Byte, indexx As String, n As String For Each rng In ActiveSheet.UsedRange If rng.MergeCells Then '如果具有合并屬性 If Split(rng.MergeArea.Address, ":")(0) <> indexx Then '如果地址為合并單元格中第一個單元格地址 ReDim Preserve arr(i) '重定義數組 arr(i)=rng.Address '對數組賦值 i=i+1 '循環/重復 indexx=rng.Address End If End If Next n=Join(arr, ",") Range(n).Select '選擇合并單元格 End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,可以看到所有具有合并屬性的單元格已被選中,如圖2.82所示。

圖2.81 郵編列表

圖2.82 已選中合并單元格
提示
本實例參見光盤樣本:..\第2部分\實例73.xlsm。
【相關知識說明】
(1)MergeCells:如果區域包含合并單元格,則為True。Variant型,可讀寫。本例用于檢測單元格是否合并。
(2)Split:返回一個下標從零開始的一維數組,它包含指定數目的子字符串。語法為:
Split(expression[, delimiter[, limit[, compare]]])
(3)Join:返回一個字符串,該字符串是通過連接某個數組中的多個子字符串而創建的。語法為:
Join(sourcearray[, delimiter])
實例74 將所有合并單元格加上背景
【技巧說明】 將所有合并單元格加上顏色背景。
【案例介紹】 以實例73數據為例,將合并單元格標示為黃色。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub將所有合并單元格添加紅色背景() Dim rng As Range For Each rng In ActiveSheet.UsedRange If rng.MergeCells Then If rng.Address=Split(rng.MergeArea.Address, ":")(0) Then rng. Interior.Color=65535 End If Next End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,可以看到所有具有合并屬性的單元格已被添加上黃色背景,如圖2.83所示。

圖2.83 給合并單元格添加背景
提示
本實例參見光盤樣本:..\第2部分\實例74.xlsm。
實例75 取消所有合并單元格之合并屬性
【技巧說明】 取消所有合并單元格之合并屬性。
【案例介紹】 以實例73數據為例,將合并單元格取消合并。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub取消合并() ActiveSheet.UsedRange.MergeCells=False End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,可以看到所有具有合并屬性的單元格已被取消合并,如圖2.84所示。

圖2.84 已取消合并單元格
提示
本實例參見光盤樣本:..\第2部分\實例75.xlsm。
【相關知識說明】
MergeCells=False:取消合并。
實例76 取得合并單元格的首個和末尾地址
【技巧說明】 取得合并單元格的首個和末尾地址。
【案例介紹】 以實例73數據為例,取得單元格A1所在合并區域的首個和末端單元格地址。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub取得合并單元格的首個和末尾地址() MsgBox "單元格A1所在合并區域中" & Chr(10) & _ "第一個單元格為:" & Split(Range("a1").MergeArea.Address, ":")(0) & Chr(10) _ & "最末端單元格為:" & Split(Range("a1").MergeArea.Address, ":")(1), 64, "提示" End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 選中A1,利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,程序將彈出提示框,顯示合并單元格地址,如圖2.85所示。

圖2.85 顯示合并單元格地址
提示
本實例參見光盤樣本:..\第2部分\實例76.xlsm。
【相關知識說明】
MergeArea.Address:多個單元格合并后的區域。本例中A1∶A3三個單元格合并后的合并區域即為A1∶A3。
實例77 合并數據并居中
【技巧說明】 多單元格數據合并并將數據居中顯示。
【案例介紹】 Excel 2007本身的“合并居中”只能留下區域左上角數據,本例合并單元格時將數據也同時合并。如圖2.86所示,A2:C2存放日期,現在對它們做合并處理。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub合并居中() Dim i%, counts%, sTem$ Application.ScreenUpdating=False Application.DisplayAlerts=False Rng_count=Selection.Count For i=1 To Rng_count sTem=sTem & Selection.Cells(i) Next With Selection .MergeCells=True .HorizontalAlignment=xlCenter .VerticalAlignment=xlCenter .NumberFormatLocal="@" .Value=sTem End With Application.DisplayAlerts=True Application.ScreenUpdating=True End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 選中有數據的單元格A2∶C2,利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,則單元格及數據均被合并,如圖2.87所示。

圖2.86 合并日期前的財務表

圖2.87 合并后的日期
提示
本實例參見光盤樣本:..\第2部分\實例77.xlsm。
【相關知識說明】
(1)HorizontalAlignment:代表指定對象的水平對齊方式。
(2)VerticalAlignment:代表指定對象的垂直對齊方式。
實例78 合并數據并粘貼
【技巧說明】 合并數據并粘貼。
【案例介紹】 Excel 2007在粘貼單元格數據時是將復制區域的所有信息都粘貼過來,包括單元格個數。若復制區域有三個單元格,則粘貼后的目標區域也將有三個單元格,這有時無法滿足用戶需求。本例中將多單元格數據粘貼到單個單元格中,待合并的數據如圖2.88所示。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。

圖2.88 待合并的數據
[3] 在右邊代碼窗口輸入以下代碼:
Sub合并后粘貼() Dim temp As String, TD As New DataObject, rng As Range On Error GoTo err For Each rng In Selection temp=temp & rng.Value '合并區域中的數據 Next rng TD.SetText temp '將合并的文本復制到DataObject TD.PutInClipboard '將DataObject中的文本移到剪貼板上 End err: MsgBox "對不起,您選擇的不是單元格!", 64, "提示" End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 單擊【工具】\【引用】菜單,打開“引用”對話框,將里面的Miscrosoft Forms 2.0 Object Library控件打上鉤,如圖2.89所示。
[6] 選中有數據的單元格A1∶C3,利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕。
[7] 選中單元格A4,單擊鼠標右鍵,從彈出的快捷菜單中選擇“粘貼”菜單,結果如圖2.90所示。

圖2.89 “引用”控件對話框

圖2.90 合并并粘貼后的數據
提示
本實例參見光盤樣本:..\第2部分\實例78.xlsm。
【相關知識說明】
(1)SetText:用特定的格式復制文本串到DataObject。
(2)PutInClipboard:將數據從DataObject移到剪貼板上。
實例79 批量合并單元格
【技巧說明】 批量合并單元格。
【案例介紹】 如圖2.91所示的數據,A列有很多相同的數據,顯示不太簡潔?,F需要將相同內容的單元格合并居中。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub批量合并單元格() Application.DisplayAlerts=False '禁止提示 For i=3 To Range("b65536").End(xlUp).Row Step 3'為變量i賦值,步長為3 Range(Cells(i, 1), Cells(i+2, 1)).Merge '合并 Range(Cells(i, 1), Cells(i+2, 1)).HorizontalAlignment=xlCenter '居中 Next Application.DisplayAlerts=True End Sub
[4] 關閉VBE窗口返回到工作表;
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,發現A列相同姓名已合并,如圖2.92所示。

圖2.91 成績表

圖2.92 合并姓名后的成績表
提示
本實例參見光盤樣本:..\第2部分\實例79.xlsm。
實例80 指定列取消合并同時恢復數據
【技巧說明】 將合并后的單元格取消合并,同時給空白單元格填充數據。
【案例介紹】 以實例79中合并后的數據為例,將之恢復至合并前的狀態(本例代碼僅適合單元格縱向合并之狀況)。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub取消合并() On Error GoTo err '出錯時運行“err”標簽處的語句 With Range(Cells(2, 1), Cells(Range("b65536").End(xlUp).Row, 1)) .UnMerge '將A列數據取消合并 .SpecialCells(xlCellTypeBlanks).Select '選擇空白單元格 Selection.FormulaR1C1="=R[-1]C" '輸入公式 .Value=.Value '將公式轉為值 End With [a1].Select: Exit Sub '退出程序,不運行下面的語句 err: MsgBox "區域中沒有合并單元格!", 64, "提示" End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,A列合并單元格全部取消合并,同時填充單元格數據。
提示
本實例參見光盤樣本:..\第2部分\實例80.xlsm。
【相關知識說明】
(1): Exit Sub:語句前加冒號可以將兩行代碼合并為一行。執行時等同于兩行。
(2)本例中取消合并時借用了公式,這使得程序運行速度相對慢一些??梢岳锰畛涔δ軄砘謴蛿祿?,效率將大大提高。代碼如下:
Sub取消合并方法二() For i=3 To Range("b65536").End(xlUp).Row Step 3 Range(Cells(i, 1), Cells(i+2, 1)).UnMerge Range(Cells(i, 1), Cells(i+2, 1)).FillDown Next End Sub
實例81 取得合并單元格數目
【技巧說明】 取得合并單元格數目。
【案例介紹】 以實例79中合并后的數據為例,統計其合并單元格數目。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub取得合并單元格數目() Dim rng As Range, i As Byte Application.DisplayAlerts=False For Each rng In ActiveSheet.UsedRange '遍歷本表已用區域 If rng.MergeCells Then '如果單元格已合并 If rng.Address=Split(rng.MergeArea.Address, ":")(0) Then i=i+1 '如果單元格是合并區域中第一個單元格,則累加計數器 End If Next MsgBox "本表共有" & i & "個合并單元格!", 64, "單元格記數" End Sub
[4] 關閉VBE窗口返回到工作表;
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,將彈出對話框顯示合并單元格的數目,如圖2.93所示。

圖2.93 合并單元格記數
提示
1.本實例參見光盤樣本:..\第2部分\實例81.xlsm。
2.本例中一個合并區域算一個,即A1∶A3合并算1個合并單元格而非3個。
實例82 報告合并單元格地址
【技巧說明】 報告合并單元格地址(合并區域左上角單元格地址)。
【案例介紹】 以實例79中合并后的數據為例,返回其地址。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub合并單元格地址() Dim rng As Range, rg As Range, i As Byte For Each rng In ActiveSheet.UsedRange If rng.MergeCells Then If rng.Address=Split(rng.MergeArea.Address, ":")(0) Then If rg Is Nothing Then Set rg=rng Else Set rg=Application.Union(rg, rng) End If i=i+1 End If End If Next MsgBox "合并單元格地址為:" & Chr(10) & rg.Address _ & Chr(10) & "共有合并單元格" & i & "個!", 64, "提示" End Sub
[3] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,將彈出對話框顯示合并單元格地址和數目,如圖2.94所示。

圖2.94 合并單元格地址
提示
本實例參見光盤樣本:..\第2部分\實例82.xlsm。
實例83 對所有合并單元格添加批注并標示序數
【技巧說明】 對所有合并單元格添加批注并標示序數。
【案例介紹】 以實例79中合并后的數據為例,對合并單元格添加批注,批注內容為序號。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub對所有合并單元格添加批注并標示序數() Dim rng As Range, i As Byte Application.DisplayAlerts=False For Each rng In ActiveSheet.UsedRange If rng.MergeCells Then If rng.Address=Split(rng.MergeArea.Address, ":")(0) Then rng.AddComment ("第" & i+1 & "個合并單元格!") rng.Comment.Shape.TextFrame.AutoSize=True rng.Comment.Visible=False i=i+1 End If End If Next End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,為合并單元格添加批注并顯示序號,如圖2.95所示。

圖2.95 顯示合并單元格序號
提示
本實例參見光盤樣本:..\第2部分\實例83.xlsm。
實例84 將已用區域合并取消且填充空白單元格
【技巧說明】 將已用區域合并取消并讓空白單元格等于原合并值。
【案例介紹】 本例作用和實例80一樣,將合并單元格取消合并,并使取消后的單元格都顯示合并狀態下的數據。但實例80只能針對某列數據,且只能是縱向全合并才行。比例程序可以適用于任何狀況的合并方式。
【案例實現】 參見以下步驟:
[1] 使用快捷鍵Alt+F11進入VBE(Visual Basic Editor)環境。
[2] 單擊菜單【插入】\【模塊】,打開模塊代碼窗口。
[3] 在右邊代碼窗口輸入以下代碼:
Sub將已用區域合并取消并讓空白單元格等于原合并值() Dim rng As Range, val, cell As String For Each rng In ActiveSheet.UsedRange If rng.MergeCells Then cell=rng.MergeArea.Address val=rng.Value rng.UnMerge Range(cell).Value=val End If Next End Sub
[4] 關閉VBE窗口返回到工作表。
[5] 利用快捷鍵Alt+F8調出運行宏窗口,然后單擊“執行”按鈕,則所有合并單元格都取消合并,并且將單元格填充合并前的數據。

圖2.96 取消單元格合并并恢復數據
提示
本實例參見光盤樣本:..\第2部分\實例84.xlsm。
- WPS辦公應用四合一:文檔處理+數據分析+文稿演示+移動辦公
- 21天精通 Windows 7+Office 2010電腦辦公
- 高效隨身查:PPT2021必學的美化設計應用技巧(視頻教學版)
- 隨身查:一小時搞定你想要的PPT
- Excel商務圖表應用與技巧108例
- Word/Excel/PPT 2019應用與技巧大全(視頻自學版)
- Word/Excel/PowerPoint三合一辦公應用
- Excel數據透視表應用之道(雙色板)
- 新編PowerPoint 2016從入門到精通
- 電腦急救完全DIY
- Word/Excel/PPT 2016辦公三合一傻瓜書
- Excel 2021辦公應用實戰從入門到精通
- Excel 2003辦公應用實戰從入門到精通
- Word/Excel/PPT 2019完全自學教程(視頻講解版)
- Excel 2013會計與財務管理日常工作應用超級手冊