返回列表 上一主題 發帖

[發問] VBA自動加總

[發問] VBA自動加總

小計部分電腦產出的都沒有加總公式
想試著用巨集用相對位置模擬寫程式
但得出來的都是這種
  ActiveCell.FormulaR1C1 = "=SUM(R[-7]C:RC)"
好像沒辦法用

請問有前輩能教學嗎
感謝

加總.rar (7.81 KB)

回復 2# Joforn


  Joforn實在太神了
請容許我在學習之前 讓我先膜拜您
非常感謝

TOP

回復 2# Joforn


大師請問如果
每個項目的數量不固定的話
要怎麼修改程式碼呢

感謝!!

加總2.rar (8.61 KB)

TOP

回復 4# popomilk

有辦法自動寫入偵測該項目要加總數量有幾個的方法嗎??
而不是
資產編號一開頭項目有兩個=SUM(R[-2]C:R[-1]C)"
資產編號二開頭項目有五個=SUM(R[-5]C:R[-1]C)
資產編號三開頭項目有三個=SUM(R[-3]C:R[-1]C)""

非常感謝

TOP

回復 6# 准提部林

版主太神拉,神手
但我實力太弱,有些看不懂,向您請教
1.
For each xR In Range([A2], [A65536].End(3))
請問那個Range([A2]], [A65536].End(3))是什麼意思呢??
我知道[A65536].End(3)是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)是什麼意思??

  非常感謝!!

TOP

回復 9# 准提部林


謝謝你的解釋  我看懂了~~太高興了 (我研究了好久)
但接下來後面還是看不懂
那請問標紅色的是什麼意思阿?? 求神手再度開示
  If Trim(xR) = "小計" Then
If N > 0 Then xR(1, 2) = "=SUM(" & Range(xR(0, 2), xR(1 - N, 2)).Address & ")": N = 0
我現在大概知道的是這樣子
當一開始N數到4時 (A2-->A5)
由於A5是小計
因此當N=4時會啟動  If Trim(xR) = "小計" Then


xR(0,2)是從A5往上移一格,並往右移一格,
xR(0,2)=B4
xR(1 - N, 2),當N為4-->xR(-3,2)
xR(-3,2)=是從A5要往上移四格,並往右移一格
xR(-3,2)=B1
Range(xR(0, 2), xR(1 - N, 2)).Address==>$B$1到$B$4的範圍


最後的:N=0似乎是 讓N重新歸零的樣子?
請問我在數N的時候都是按F8看著程式一個一個數,有什麼方法能馬上看到現在N跑到多少了嗎??



非常謝謝您撥冗教學

圖片 003.png (5.05 KB)

圖片 003.png

TOP

回復 12# 准提部林

非常謝謝你花時間回覆
經過你的教學,我真的懂了很多!! (寫了很多筆記)Macro1 是用
在A欄用for each的用法,抓出小計的行數
並且在還沒抓到小計之前 一直讓N隨著行數N+1
碰到小計時 啟動sum 加總範圍用1-N的方式解決  (終於稍微懂sum在VB的用法了,感動)
加總後,再另N=0 重新開始




Macro3 相較於macro1的不同
應該就在發現A欄的編號都是11字元,
所以將xH = xR(1, 2)
在第一次碰到A欄有11字元時且N=0時,設定一個變數記錄該行的儲存格位置,並讓N為1
最後的N=1是避免再重覆設定XH這個變數,讓他就固定在第一次碰到11個字元時的那行的儲存格
在sum加總後,重新讓N為0
之後碰到11個字元時,再重新設定XH變數


花了好多時間了解這兩法寫的邏輯了
非常佩服你的聰明
猶如上了一堂課

最後想跟跟你請教標紅字的部分

If Trim(xR) = "總計" Then xR(1, 2) = "=SUMIF(R1C[-1]:R[-1]C[-1],""*小計*"",R1C:R[-1]C)"

一般excel
sumif這個函數我是知道的
sumif(要被判斷的範圍區間,判斷條件,加總範圍)
我看不太懂R1C[-1]
我查網路上說是相對位置
但是如果在excel應該是要設置成 =SUMIF(A:A,"*小計*",B:B)
實在是看不懂轉成VB語言後是打成這樣

麻煩再請大師撥冗解答一下
非常感謝

TOP

回復 13# Joforn
感謝Joforn的花時間幫我


想再請教您紅色部分
For I = 1 To EndRow   
請問這邊要怎麼寫成For each
我換成這樣一直顯示錯誤
For Each I In Range([A1], EndRow)
這兩種判斷式是算相同功能的嗎??

感謝

TOP

回復 16# 准提部林

非常謝謝
我都忘記有這方式了!
感謝您的分享

TOP

        靜思自在 : 成功是優點的發揮,失敗是缺點的累積。
返回列表 上一主題