返回列表 上一主題 發帖

請問如何用VBA.自動合併儲存格"跨列置中"

回復 4# joey3277
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng(1 To 3) As Range, A As Range, C As Range, R As Integer
  4.     On Error Resume Next                                                   '不理會程序上的錯誤,繼續執行程式
  5.     Set Rng(1) = Application.InputBox("選取儲存格(可選多重範圍)", Type:=8) '如沒有選取儲存格:程序上的錯誤
  6.     If Err <> 0 Then Exit Sub                                               '程序上有錯誤
  7.     On Error GoTo 0                                                         '不處裡程序上的錯誤
  8.     For Each A In Rng(1).Areas                                              '物件集合: Areas  (多重範圍)
  9.         For Each C In A.Columns                                             '物件集合: Columns(欗位)
  10.             Set Rng(2) = C.Cells(1)                                         '物件:範圍的,第1個,儲存格開始
  11.             R = C.Cells(C.Cells.Count).Row                                  '數值 :物件範圍最後的儲存格列號
  12.             Do
  13.                 Set Rng(3) = Rng(2).Offset(1)                               '物件 Rng(3): Rng(2)的下一列儲存格
  14.                 Do While Rng(3) = "" And Rng(3).Row <= R                    'While(條件成立,執行迴圈):(物件="" 且須 物件<>物件範圍的最後列號)
  15.                     Set Rng(3) = Rng(3).Offset(1)                           '物件 Rng(3): Rng(3)的下一列儲存格
  16.                 Loop
  17.                 Rng(1).Parent.Range(Rng(2), Rng(3).Offset(-1)).Merge        'Merge(合併儲存格)
  18.                 Set Rng(2) = Rng(3)                                         '物件 Rng(2): 有資料數值的儲存格
  19.             Loop Until Rng(3).Row > R                                       'Until(條件不成立,執行迴圈)
  20.         Next
  21.     Next
  22. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 7# joey3277
修改如下
  1. Option Explicit
  2. Sub test()
  3.     Dim lngRowCount As Long, Rng As Range, R As Range
  4.     Dim lngRowCounter As Long
  5.     Dim lngRowCountLast As Long
  6.     On Error Resume Next                                                    '不理會程序上的錯誤,繼續執行程式
  7.     Set Rng = Application.InputBox("選取儲存格(可選多重範圍)", Type:=8)     '如沒有選取儲存格:程序上的錯誤
  8.     If Err <> 0 Then Exit Sub                                               '程序上有錯誤
  9.     For Each R In Rng.Areas
  10.         lngRowCount = R.Rows.Count                                          '範圍的總列數
  11.         lngRowCountLast = 1
  12.         For lngRowCounter = 2 To lngRowCount
  13.             With R.Range("A1")
  14.                 If .Offset(lngRowCounter) <> "" Or lngRowCounter = lngRowCount Then
  15.                     If Not (lngRowCountLast = lngRowCounter - 1) Then
  16.                         .Parent.Range(.Offset(lngRowCountLast), .Offset(lngRowCounter - 1)).Merge
  17.                     End If
  18.                     lngRowCountLast = lngRowCounter
  19.                 End If
  20.             End With
  21.         Next
  22.     Next
  23. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題