返回列表 上一主題 發帖

[發問] 自動加入母檔

回復 1# adam2010
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng(1 To 2) As Range, M As String, R As Integer
  4.     With ActiveSheet
  5.         Set Rng(1) = .Range("A2")                                               '物件: A2儲存格
  6.         R = .[A1].End(xlToRight).Column                                         '數值: A1往右到最後有數值的欄號
  7.         Do
  8.             If InStrRev(Rng(1), "X") <> Len(Rng(1)) And M = "" Then             '儲存格右邊第一個字串<>"X" 且 M = ""
  9.                 M = Mid(Rng(1), 1, Len(Rng(1)) - 1)                             'M = 去掉儲存格右邊第一個字串的字串
  10.                 Set Rng(2) = Rng(1)                                             '物件 Rng(2) :第1 個子檔位置
  11.             ElseIf M <> "" And Rng(1) = M & "X" Then                            '儲存格右邊第一個字串="X"
  12.                 M = ""                                                          '是母檔 : M=""
  13.             ElseIf M <> "" And M <> Mid(Rng(1), 1, Len(Rng(1)) - 1) Then        '讀完相同的子檔
  14.                 Rng(1).EntireRow.Insert                                         '使用插入方法,Rng(1)會下移
  15.                 Set Rng(1) = Rng(1).Offset(-1)                                  '母檔的位置
  16.                 Set Rng(2) = Range(Rng(1).Offset(-1), Rng(2))                   '所有子檔的範圍
  17.                 With Rng(1)
  18.                     .Cells = M & "X"
  19.                     .Cells(1, "H").Resize(1, R - 8) = "=SUM(R[-1]C:R[-" & Rng(2).Rows.Count & "]C)"
  20.                     ' R - 8 :  H欗到 A1往右到最後有數值的欄號 - 1欗
  21.                     .Cells(1, "H").Resize(1, R - 8) = .Cells(1, "H").Resize(1, R - 8).Value
  22.                     .Cells(1, R) = Application.Sum(.Cells(1, 8).Resize(1, R - 8))
  23.                     .Cells(1, "D") = Application.Sum(Rng(2).Range("D1:F" & Rng(2).Rows.Count))
  24.                     .Cells(1, "G") = .Cells(1, "D") - .Cells(1, R)
  25.                 End With
  26.                 M = ""
  27.             End If
  28.             Set Rng(1) = Rng(1).Offset(1)                                           '物件 Rng(1)移往下一列
  29.         Loop Until Rng(1) = ""
  30.     End With
  31. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 3# adam2010
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Rng(1 To 2) As Range, M As String, R As Integer
  4.     With ActiveSheet
  5.         Set Rng(1) = .Range("A2")                                               '物件: A2儲存格
  6.         R = .[A1].End(xlToRight).Column                                         '數值: A1往右到最後有數值的欄號
  7.         Do
  8.             If InStrRev(Rng(1), "X") <> Len(Rng(1)) And M = "" Then             '儲存格右邊第一個字串<>"X" 且 M = ""
  9.                 M = Mid(Rng(1), 1, Len(Rng(1)) - 1)                             'M = 去掉儲存格右邊第一個字串的字串
  10.                 Set Rng(2) = Rng(1)                                             '物件 Rng(2) :第1 個子檔位置
  11.             ElseIf InStrRev(Rng(1), "X") = Len(Rng(1)) Then                     '是母檔
  12.                 Rng(1).Resize(1, R).Interior.Color = vbGreen                    '***加入底色
  13.                 M = ""                                                          '是母檔 : M=""
  14.             ElseIf M <> "" And M <> Mid(Rng(1), 1, Len(Rng(1)) - 1) Then        '讀完相同的子檔
  15.                 Rng(1).EntireRow.Insert                                         '使用插入方法,Rng(1)會下移
  16.                 Set Rng(1) = Rng(1).Offset(-1)                                  '母檔的位置
  17.                 Set Rng(2) = Range(Rng(1).Offset(-1), Rng(2))                   '所有子檔的範圍
  18.                 With Rng(1)
  19.                     .Resize(1, R).Interior.Color = vbGreen                      '***加入底色
  20.                     .Cells = M & "X"
  21.                     .Cells(1, "H").Resize(1, R - 8) = "=SUM(R[-1]C:R[-" & Rng(2).Rows.Count & "]C)"
  22.                     ' R - 8 :  H欗到 A1往右到最後有數值的欄號 - 1欗
  23.                     .Cells(1, "H").Resize(1, R - 8) = .Cells(1, "H").Resize(1, R - 8).Value
  24.                     .Cells(1, R) = Application.Sum(.Cells(1, 8).Resize(1, R - 8))
  25.                     .Cells(1, "D") = Application.Sum(Rng(2).Range("D1:F" & Rng(2).Rows.Count))
  26.                     .Cells(1, "G") = .Cells(1, "D") - .Cells(1, R)
  27.                 End With
  28.                 M = ""
  29.             End If
  30.             Set Rng(1) = Rng(1).Offset(1)                                           '物件 Rng(1)移往下一列
  31.         Loop Until Rng(1) = ""
  32.     End With
  33. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 【生命在呼吸間】佛陀說:「生命在呼吸間。」人無法管住自己的生命,更無法擋住死期,讓自己永住人間。既然生命去來這麼無常,我們更應該好好地愛惜它、利用它、充實它,讓這無常、寶貴的生命,散發它真善美的光輝,映照出生命真正的價值。
返回列表 上一主題