官术网_书友最值得收藏!

第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。

主站蜘蛛池模板: 荔波县| 克山县| 临城县| 华蓥市| 察隅县| 衡山县| 新乡县| 宁武县| 泰安市| 陵川县| 邻水| 邳州市| 镇坪县| 吉安市| 霍城县| 丹阳市| 洛川县| 乐清市| 海口市| 乌兰察布市| 平塘县| 佛坪县| 巴林左旗| 五寨县| 潜山县| 郧西县| 谢通门县| 贞丰县| 谢通门县| 遂宁市| 乐都县| 宜兰县| 东阿县| 屯昌县| 新邵县| 灌云县| 根河市| 大姚县| 阿克陶县| 自治县| 沭阳县|