Board logo

標題: [發問] 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
試試看:
  1. Sub Ex()
  2.     Dim bt As Single
  3.    
  4.     With Sheet1
  5.         bt = .Range("B" & .Rows.Count).End(xlUp).Row
  6.         If InStr(.Range("B" & bt - 5), "小計") Then
  7.             .Range("K" & bt - 5).Formula = "=SUM(K8:K" & (bt - 6) & ")"
  8.             .Range("K" & bt).Formula = "=SUM(K" & (bt - 5) & ":K" & (bt - 1) & ")"
  9.         End If
  10.     End With
  11. 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]
原本表單之處裡:
  1. Sub Ex()
  2.     Dim bt As Single
  3.    
  4.     With Sheet1
  5.         bt = .Range("B" & .Rows.Count).End(xlUp).Row
  6.         If InStr(.Range("B" & bt - 5), "小計") Then
  7.             .Range("K" & bt - 5).Formula = "=SUM(K8:K" & (bt - 6) & ")"
  8.             .Range("K" & bt).Formula = "=SUM(K" & (bt - 5) & ":K" & (bt - 1) & ")"
  9.         End If
  10.     End With
  11. End Sub
複製代碼
依照之後附上表單之內容,請自行修正為:
  1. Sub Ex()
  2.     Dim bt As Single
  3.    
  4.     With Sheet1
  5.         bt = .Range("B" & .Rows.Count).End(xlUp).Row
  6.         If InStr(.Range("B" & bt - 3), "小計") Then
  7.             .Range("K" & bt - 3).Formula = "=SUM(K8:K" & (bt - 4) & ")"     '  小計
  8.             .Range("K" & bt).Formula = "=SUM(K" & (bt - 3) & ":K" & (bt - 1) & ")"     '  總計
  9.         End If
  10.     End With
  11. 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) 程式碼內:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim bt As Single


  3.     bt = Range("B" & Rows.Count).End(xlUp).Row - 3  ' 小計之前的內容

  4.     If (bt >= 8 And Target.Row < bt) And Target.Column = 11 Then  ' 當 K 欄位值異動時
  5.         ThisWorkbook.Ex
  6.     End If
  7. End Sub
複製代碼
放置於 ThisWorkbook 程式碼內:
  1. Sub Ex()
  2.     Dim bt As Single
  3.    
  4.     With Sheet1
  5.         bt = .Range("B" & .Rows.Count).End(xlUp).Row
  6.         If bt > 8 And InStr(.Range("B" & bt - 3), "小計") Then
  7.             .Range("K" & bt - 3).Formula = "=SUM(K8:K" & (bt - 4) & ")"     '  小計
  8.             .Range("K" & bt).Formula = "=SUM(K" & (bt - 3) & ":K" & (bt - 1) & ")"     '  總計
  9.         End If
  10.     End With
  11. 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/)