返回列表 上一主題 發帖

[發問] VBA自動加總

  1. Sub Macro1()
  2. Dim xR As Range, N&
  3. For Each xR In Range([A2], [A65536].End(3))
  4.     If Trim(xR) = "小計" Then
  5.        If N > 0 Then xR(1, 2) = "=SUM(" & Range(xR(0, 2), xR(1 - N, 2)).Address & ")": N = 0
  6.        If N = 0 Then GoTo 101
  7.     End If
  8.     N = N + 1
  9.     If Trim(xR) = "總計" Then xR(1, 2) = "=SUMIF(R1C[-1]:R[-1]C[-1],""*小計*"",R1C:R[-1]C)"
  10. 101: Next
  11. End Sub
複製代碼
  1. Sub Macro2()
  2. Dim xR As Range, N&
  3. For Each xR In Range([A2], [A65536].End(3))
  4.     If Trim(xR) = "小計" Then xR(1, 2) = _
  5.         "=SUM(R1C:R[-1]C)-SUMIF(R1C[-1]:R[-1]C[-1],""*小計*"",R1C:R[-1]C)*2"
  6.     If Trim(xR) = "總計" Then xR(1, 2) = "=SUMIF(R1C[-1]:R[-1]C[-1],""*小計*"",R1C:R[-1]C)"
  7. Next
  8. End Sub
複製代碼
兩種方法!!!

TOP

方法二的公式:
小計:=SUM(B$1:B4)-SUMIF(A$1:A4,"*小計*",B$1:B4)*2
總計:=SUMIF(A$1:A21,"*小計*",B$1:B21)

TOP

回復 8# popomilk


   
1.
For each xR In Range([A2], [A65536].End(3))
請問那個Range([A2]], [A65536].End(3))是什麼意思呢??
我知道[A65536].End(3)是A欄從最下面上來第一個非空白的儲存格
_A2到A欄最後一個非空格的範圍 

2.
   If Trim(xR) = "小計" Then
   If N > 0 Then xR(1, 2) = "=SUM(" & Range(xR(0, 2), xR(1 - N, 2)).Address & ")": N = 0
請問xr(1,2)是什麼意思??
_xR(1, 2) = xR.Cells(1, 2),相同意思 

TOP

回復 10# popomilk


   
If N > 0 Then xR(1, 2) = "=SUM(" & Range(xR(0, 2), xR(1 - N, 2)).Address & ")": xR(0, 3) = N: N = 0

xR(0, 3) = N  當遇"小計"時, 記錄N值, 這樣應較可清楚其程序
碰到"小計"時, 匯整所需工作, 並將N值歸0, 繼續下一區段


"=SUM(" & Range(xR(0, 2), xR(1 - N, 2)).Address & ")"
&用來連接文字, 加上位址即成一個公式的文字串:=SUM($B$2:$B$4)

TOP

Sub Macro3()
Dim xR As Range, N&, xH As Range
For Each xR In Range([A2], [A65536].End(3))
  If xR Like "###########" And N = 0 Then Set xH = xR(1, 2): N = 1
  If Trim(xR) = "小計" Then
    If N = 1 Then xR(1, 2) = "=SUM(" & Range(xH, xR(0, 2)).Address & ")":  N = 0
  End If
  If Trim(xR) = "總計" Then xR(1, 2) = "=SUMIF(R1C[-1]:R[-1]C[-1],""*小計*"",R1C:R[-1]C)"
Next
End Sub

這是另一方法,可以更精準抓小計範圍,
當A欄有〔資產編號(11碼數字)〕時,記錄為〔首格〕位置(xH),
當遇"小計"時,〔首格〕至〔上右一格〕即為小計範圍!!!

TOP

回復 14# popomilk


   
xR(1, 2) = "=SUMIF(R1C[-1]:R[-1]C[-1],""*小計*"",R1C:R[-1]C)" 
這個是先寫公式.B22:=SUMIF(A$1:A21,"*小計*",B$1:B21)
再以〔錄製〕取得程式碼的!

TOP

        靜思自在 : 有願放在心裡,沒有身體力行,正如耕田不播種,皆是空過因緣。
返回列表 上一主題