標題:
[發問]
vba做自動合計
[打印本頁]
作者:
tomtracy
時間:
2015-7-31 21:52
標題:
vba做自動合計
本帖最後由 tomtracy 於 2015-7-31 21:54 編輯
怎樣設計一個VBA代碼,讓我B列選中或輸入"小計"之後,在小計的右側的 K列自動加總?要注意:“小計”是不固定在娜一行出現的。"小計"之後如有添加追加數時 在 "總計" 時能和"小計一起加總 ,目前我試了一組VBA可是仍無法執行請各位高手(老師)幫忙修改完善
作者:
c_c_lai
時間:
2015-8-1 12:23
本帖最後由 c_c_lai 於 2015-8-1 12:24 編輯
回復
1#
tomtracy
試試看:
Sub Ex()
Dim bt As Single
With Sheet1
bt = .Range("B" & .Rows.Count).End(xlUp).Row
If InStr(.Range("B" & bt - 5), "小計") Then
.Range("K" & bt - 5).Formula = "=SUM(K8:K" & (bt - 6) & ")"
.Range("K" & bt).Formula = "=SUM(K" & (bt - 5) & ":K" & (bt - 1) & ")"
End If
End With
End Sub
複製代碼
作者:
tomtracy
時間:
2015-8-1 16:16
回復
2#
c_c_lai
感謝老師 我試試 還是先謝謝您 人間有温暖:loveliness: :loveliness:
作者:
tomtracy
時間:
2015-8-1 16:35
回復
2#
c_c_lai
我試了 但仍沒有動作 我把原VAB撤了,再貼上您寫的編程, 結果是沒有引出數據 我把改了的附件送上給您看 請您再幫忙看看怎麼處理? 勞煩您了 謝謝![attach]21604[/attach]
作者:
c_c_lai
時間:
2015-8-1 18:16
本帖最後由 c_c_lai 於 2015-8-1 18:22 編輯
回復
4#
tomtracy
[attach]21606[/attach]
我是以你上次附上的檔案為舉例,如果你
自訂的格式有所異動,程式碼判斷亦應跟隨
更正,以符事實。
作者:
tomtracy
時間:
2015-8-1 21:50
回復
5#
c_c_lai
對不起我把我電腦的語言改成了簡體了, 剛才我把電腦系統改回繁體了, 文件的文字都轉成繁體了也把代碼修改, 可是也仍沒法運算 附上文件 再請Lai先生幫忙![attach]21609[/attach]
作者:
c_c_lai
時間:
2015-8-2 07:19
回復
6#
tomtracy
先澄清一下,為何你的表單需要連續有四組『小計』,
每組『小計』的定義為何?
[attach]21619[/attach]
原本表單之處裡:
Sub Ex()
Dim bt As Single
With Sheet1
bt = .Range("B" & .Rows.Count).End(xlUp).Row
If InStr(.Range("B" & bt - 5), "小計") Then
.Range("K" & bt - 5).Formula = "=SUM(K8:K" & (bt - 6) & ")"
.Range("K" & bt).Formula = "=SUM(K" & (bt - 5) & ":K" & (bt - 1) & ")"
End If
End With
End Sub
複製代碼
依照之後附上表單之內容,請自行修正為:
Sub Ex()
Dim bt As Single
With Sheet1
bt = .Range("B" & .Rows.Count).End(xlUp).Row
If InStr(.Range("B" & bt - 3), "小計") Then
.Range("K" & bt - 3).Formula = "=SUM(K8:K" & (bt - 4) & ")" ' 小計
.Range("K" & bt).Formula = "=SUM(K" & (bt - 3) & ":K" & (bt - 1) & ")" ' 總計
End If
End With
End Sub
複製代碼
便有數值寫入了。
作者:
tomtracy
時間:
2015-8-2 08:37
回復
7#
c_c_lai
小計數是我在測試 往下試往下試就沒看到數值 所以就成了很多小計了,您的修改代碼我試試! 在此真非常感謝!
作者:
tomtracy
時間:
2015-8-2 09:13
回復
7#
c_c_lai
我把代碼置入仍沒有結果,可是看您所顯示的應該是測試過的也已完成了,為何到我這里變成了不能執行,請Lai 先生再幫我看 ,是否我在複制時沒有注意到什麼呢? 如果Lai先生方便並且願意的話請幫我把文件寄至我的郵箱
[email protected]
謝謝您[attach]21620[/attach]
作者:
tomtracy
時間:
2015-8-2 15:02
回復
7#
c_c_lai
lai 先生您好 不用寄了 , 都是我沒按執行才會沒有數據 , 謝謝您幫我那麼大的忙 . 感謝您
[attach]21623[/attach]
作者:
tomtracy
時間:
2015-8-3 23:54
我再請教Lai先生 為何每次使用此文件時為何都要到代碼內按巨集啟用呢?
作者:
c_c_lai
時間:
2015-8-4 07:22
我再請教Lai先生 為何每次使用此文件時為何都要到代碼內按巨集啟用呢?
tomtracy 發表於 2015-8-3 23:54
因為你的小計並非設定在『固定欄位』上,而是位於不定列上,
通常你可能在確定輸入完成後才會加上『小計』欄,在確定
工作結束後此時你才會去觸發 Ex() 之故。
假設你已確定『小計』欄是位在『固定欄位』上,那你可以直接在
該 K 欄,直接打入 『=SUM(K##:K##)』,不就結了?
何須再多此一舉去應用 VBA 解決!
作者:
tomtracy
時間:
2015-8-4 08:36
回復
12#
c_c_lai
被您說對了! 可就有人想尽辦法就想試著看看有沒有更懶的方法! 為了滿足任務及想法就要找方式 :'( :'( :'(
作者:
c_c_lai
時間:
2015-8-4 12:39
本帖最後由 c_c_lai 於 2015-8-4 12:54 編輯
回復
13#
tomtracy
放置於 Sheet1 (Sheet1) 程式碼內:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim bt As Single
bt = Range("B" & Rows.Count).End(xlUp).Row - 3 ' 小計之前的內容
If (bt >= 8 And Target.Row < bt) And Target.Column = 11 Then ' 當 K 欄位值異動時
ThisWorkbook.Ex
End If
End Sub
複製代碼
放置於 ThisWorkbook 程式碼內:
Sub Ex()
Dim bt As Single
With Sheet1
bt = .Range("B" & .Rows.Count).End(xlUp).Row
If bt > 8 And InStr(.Range("B" & bt - 3), "小計") Then
.Range("K" & bt - 3).Formula = "=SUM(K8:K" & (bt - 4) & ")" ' 小計
.Range("K" & bt).Formula = "=SUM(K" & (bt - 3) & ":K" & (bt - 1) & ")" ' 總計
End If
End With
End Sub
複製代碼
儲存後,只要從 K8 欄開始至小計前 K 欄內容有所異動時,小計與總計內容值便會自動隨之異動,
而不需再由人工啟動 Ex(),這純粹是懶人的程式寫法亦是你所期望的方式。
作者:
tomtracy
時間:
2015-8-5 00:09
回復
14#
c_c_lai
我不知用何種言語去感謝您!除了感謝還是感謝! 您真的很有氣度的幫我!可是愚笨的我試了您的操作再開
作者:
tomtracy
時間:
2015-8-5 00:18
打的字為何都會不見呢? 我想說的是 Lai先生給我的文件我照做了 可是再重新開啟仍要到巨集處執行Ex ! 我把文件附上請lai先生看!
另外一份文件是我早先的文件代碼,是能自動執行的!自行修改後,發現只能加總合計下一組數字而已 是否有辦法修改?
作者:
c_c_lai
時間:
2015-8-5 06:46
回復
15#
tomtracy
[attach]21651[/attach]
作者:
tomtracy
時間:
2015-8-5 09:16
回復
17#
c_c_lai
謝謝您!原來是這樣!
:handshake
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)