Nhờ giúp đỡ code tự động tạo công thức tính tổng trong VBA

Liên hệ QC

yeuthamhangxom

Thành viên tiêu biểu
Tham gia
26/10/07
Bài viết
517
Được thích
419
Nghề nghiệp
Nhân viên văn phòng
Gửi các anh chị GPE.
Em có câu hỏi về tự động tạo công thức tính tổng bằng VBA như file đính kèm. Nhờ các anh chị giúp đỡ em.
Xin cám ơn rất nhiều.
 

File đính kèm

Gửi các anh chị GPE.
Em có câu hỏi về tự động tạo công thức tính tổng bằng VBA như file đính kèm. Nhờ các anh chị giúp đỡ em.
Xin cám ơn rất nhiều.
Sao phải "cực khổ" vậy? Nếu bạn dùng chức năng List thì khỏi làm gì ráo ---> Dòng tổng luôn tự động dịch chuyển xuống dưới và công thức SUM sẽ tự Update
 
Upvote 0
Muốn code thì có code

PHP:
Option Explicit
Sub Macro1()
   Dim Rw As Long
   With [D65500].End(xlUp).Offset(1)
      Rw = .Row - 5
      .Value = "Total"
      .Offset(, 4).FormulaR1C1 = "=SUM(R[-" & Rw & "]C:R[-1]C)"
   End With
End Sub
 
Upvote 0
PHP:
Option Explicit
Sub Macro1()
   Dim Rw As Long
   With [D65500].End(xlUp).Offset(1)
      Rw = .Row - 5
      .Value = "Total"
      .Offset(, 4).FormulaR1C1 = "=SUM(R[-" & Rw & "]C:R[-1]C)"
   End With
End Sub
Bấm lần đầu ---> Được 1 dòng tổng
Bấm lần 2 ---> Được thêm 1 dòng tổng nữa
.....
.....
Bấm lần thứ 100 ---> Được 100 dòng tổng
Hi... hi...
 
Upvote 0
Sao phải "cực khổ" vậy? Nếu bạn dùng chức năng List thì khỏi làm gì ráo ---> Dòng tổng luôn tự động dịch chuyển xuống dưới và công thức SUM sẽ tự Update
Thưa thầy ndu chức năng List thì em biết. Thầy xem file đính kèm giúp em. sau khi em lấy những thiết bị cần thiết từ sheet2 sang sheet3 thì em chỉ cần ấn nút tính tổng thì tự động nó tính tổng luôn. Sau đó em lại lấy dữ liệu sang tiếp vẫn vào sheet3 đó nhưng dưới hàng tính tổng vừa làm sau khi đã lấy tiếp dữ liệu sang thì em chỉ cần ấn nút tính tổng thì nó lại tính tổng những thiết bị mới nhập vào. Thầy giúp em nha. Em cám ơn thầy.
 

File đính kèm

Upvote 0
Giúp em bài toán trên với cả nhà ơi. Chúc cả nhà cuối tuần vui vẻ.
 
Upvote 0
Giúp em bài toán trên với cả nhà ơi. Chúc cả nhà cuối tuần vui vẻ.

Lý do là xem file mới này lại chưa hiểu mấy ---> Bạn có thể nói rõ 1 chút được không?
Nếu file của bạn đã có code lọc dử liệu rồi thì cũng nên đưa lên, để xem thử lọc thế nào thì mới biết tính tổng ra sao
 
Upvote 0
Lý do là xem file mới này lại chưa hiểu mấy ---> Bạn có thể nói rõ 1 chút được không?
Nếu file của bạn đã có code lọc dử liệu rồi thì cũng nên đưa lên, để xem thử lọc thế nào thì mới biết tính tổng ra sao
File đó đã có code đưa dữ liệu sang sheet3 rồi thầy ạ. Bên sheet2 nếu muốn lấy thiết bị nào em chỉ cần gõ "X" vào cột "lựa chọn TB" và điền số lượng vào cột "số lượng" là tự động dữ liệu được chọn sẽ đưa sang sheet3. Nhưng em muốn sau khi chọn xong hết các thiết bị em ấn nút "tính tổng" thì tự động nó tính tổng luôn những thiết bị mà mình vừa lựa chọn. Sau đó em lại chọn thiết bị tiếp sau khi chọn xong lại ấn nút "tính tổng" thì tự động nó lại tính tổng các thiết bị mới vừa chọn. Thầy giúp em nha. Em cám ơn thầy. Chúc thầy cuối tuần vui vẻ.
 
Upvote 0
Macro gắn vô nút 'TinhTong' tại Sheet2 của bạn đây

PHP:
Option Explicit
Private Sub CommandButton1_Click()
 Dim Sh As Worksheet, rW As Long, eRw As Long
 
 Set Sh = Sheet3
 eRw = Sh.[F65500].End(xlUp).Row
 rW = eRw - Sh.Cells(eRw, "D").End(xlUp).Row + 1
 If rW < 4 Then rW = 1
 With Sh.Cells(eRw, "F").Offset(1)
   .FormulaR1C1 = "=SUM(R[-" & rW & "]C:R[-1]C)"
   .Font.Bold = True
 End With
End Sub
Chú í: Để khỏi chép đè lần sau lên lần trước, mình đã sửa macro của bạn như dưới đây:

Mã:
[B]Private Sub Worksheet_Change(ByVal Target As Range)[/B]
    Dim ECll As Range
    If Intersect(Target, Union([g:g], [m:m], [s:s], [y:y], [ae:ae])) Is Nothing Or _
       WorksheetFunction.CountA(Target) = 0 Then Exit Sub
    Set ECll = Sheet3.[F6000].End(xlUp)(2).Offset(, -4)
    With Sheet3.Range(ECll.Address)
        .Resize(, 3) = Target(1, -3).Resize(, 3).Value
        .Offset(, 3) = Target
        .Offset(, 4) = "=if(rc[-2]=0,0,rc[-2]*rc[-1])"
    End With
[B]End Sub[/B]
Bạn thử lại xem sao!--=0 :-= --=0
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Option Explicit
Private Sub CommandButton1_Click()
 Dim Sh As Worksheet, rW As Long, eRw As Long
 
 Set Sh = Sheet3
 eRw = Sh.[F65500].End(xlUp).Row
 rW = eRw - Sh.Cells(eRw, "D").End(xlUp).Row + 1
 If rW < 4 Then rW = 1
 With Sh.Cells(eRw, "F").Offset(1)
   .FormulaR1C1 = "=SUM(R[-" & rW & "]C:R[-1]C)"
   .Font.Bold = True
 End With
End Sub
Chú í: Để khỏi chép đè lần sau lên lần trước, mình đã sửa macro của bạn như dưới đây:

Mã:
[B]Private Sub Worksheet_Change(ByVal Target As Range)[/B]
    Dim ECll As Range
    If Intersect(Target, Union([g:g], [m:m], [s:s], [y:y], [ae:ae])) Is Nothing Or _
       WorksheetFunction.CountA(Target) = 0 Then Exit Sub
    Set ECll = Sheet3.[F6000].End(xlUp)(2).Offset(, -4)
    With Sheet3.Range(ECll.Address)
        .Resize(, 3) = Target(1, -3).Resize(, 3).Value
        .Offset(, 3) = Target
        .Offset(, 4) = "=if(rc[-2]=0,0,rc[-2]*rc[-1])"
    End With
[B]End Sub[/B]
Bạn thử lại xem sao!--=0 :-= --=0
Vẫn chưa đúng ý mình bạn ạ. Ý mình là muốn sau khi chọn xong hết các thiết bị em ấn nút "tính tổng" thì tự động nó tính tổng luôn những thiết bị mà mình vừa lựa chọn. Sau đó em lại chọn thiết bị tiếp sau khi chọn xong lại ấn nút "tính tổng" thì tự động nó lại tính tổng các thiết bị mới vừa chọn.
Code của bạn đưa mình đã thử. Sau khi chọn thết bị xong ấn nút "tính tổng" thì tự động nó tính tổng rồi. Nhưng sau đó mình chọn tiếp thiết bị thì nó lại đè dữ liệu lên hàng tính tổng vừa nãy. và mình chọn tiếp thiết bị sau khi chọn xong thì ấn nút "tính tổng" thì nó lại tính tổng tất cả các thiết bị đã chọn từ đầu.
Bạn giúp lại mình nha. Cám ơn bạn.
 
Upvote 0
Bạn đã sửa lại Code của bạn chưa; hay là thế này đi: Xem file đính kèm

vẫn chưa đúng ý mình bạn ạ.
Code của bạn đưa mình đã thử. Sau khi chọn thết bị xong ấn nút "tính tổng" thì tự động nó tính tổng rồi. Nhưng sau đó mình chọn tiếp thiết bị thì nó lại đè dữ liệu lên hàng tính tổng vừa nãy. Và mình chọn tiếp thiết bị sau khi chọn xong thì ấn nút "tính tổng" thì nó lại tính tổng tất cả các thiết bị đã chọn từ đầu.
Bạn giúp lại mình nha. Cám ơn bạn.
:-= --=0 :-= --=0 :-=
 

File đính kèm

Upvote 0
Cùng nhau thực hiện quy trình thử này lần cuối xem sao:

B1: Tới Sheet3 & xoá các dòng từ 3:30 (bằng menu Edit nha)
B2: Sang Sheet1 & chọn nút màu đỏ (Vùng B)
B3: Sang Sheet2 nhập vô các ô M6-M8 các trị tương ứng 1, 3 & 5
B4: Sau khi {ENTER} ta sang Sheet3 để xem kết quả; Ta phải nhìn thấy tại đó có thêm 3 dòng dữ liệu;
B5: Trở về Sheet2 & ấn nút 'TinhTong'; Sang Sheet3 ta sẽ thấy dòng tính tổng tại [F6];
B6: Sang Sheet1, ta chọn nhóm hàng 'A';
B7: Tại 'G14:G16' của sheet2 ta nhập vô đó ba con số 9 & nhấn nút 'TinhTong'
B8: Sang Sheet3 xem thử ra sao;
B9: Trở về Sheet2 & nhập vô [G6] tri số 13 & lại 'TinhTong'
Bc: Sang Sheet3 xem tiếp & phát biểu những ý kiến cần thiết của bạn.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
B1: Tới Sheet3 & xoá các dòng từ 3:30 (bằng menu Edit nha)
B2: Sang Sheet1 & chọn nút màu đỏ (Vùng B)
B3: Sang Sheet2 nhập vô các ô M6-M8 các trị tương ứng 1, 3 & 5
B4: Sau khi {ENTER} ta sang Sheet3 để xem kết quả; Ta phải nhìn thấy tại đó có thêm 3 dòng dữ liệu; ok
B5: Trở về Sheet2 & ấn nút 'TinhTong'; Sang Sheet3 ta sẽ thấy dòng tính tổng tại [F6];ok
B6: Sang Sheet1, ta chọn nhóm hàng 'A';
B7: Tại 'G14:G16' của sheet2 ta nhập vô đó ba con số 9 & nhấn nút 'TinhTong'
B8: Sang Sheet3 xem thử ra sao; sang sheet3 thấy tại ô F10 có công thức =SUM(F9:F9) nghĩa là chỉ tính tổng của 1 ô ở trên thôi. Ý mình là phải tính tổng của 3 số mới vừa chọn là =SUM(F7:F9) cơ.
B9: Trở về Sheet2 & nhập vô [G6] tri số 13 & lại 'TinhTong'
Bc: Sang Sheet3 xem tiếp & phát biểu những ý kiến cần thiết của bạn. đúng là có tính tổng. Nhưng ở bước B9 nếu gõ vào G6,G7,G8 giá trị 13 và tính tổng thì tại ô F14 có công thức sau =SUM(F13:F13) mà ý mình là nó phải tính tổng cả 3 số mới vừa chọn và công thức tại ô F14 phải có công thức sau =SUM(F11:F13)
Bạn xem lại giúp mình nha. Hay là máy chỗ mình bị lỗi.
Chúc bạn luôn vui.
 
Upvote 0
Vậy chúng ta nhờ người thứ ba làm trọng tài vậy, File của mình nha!

Thân ái!

}}}}} -=.,, :=\+ &&&%$R -\\/.
 
Upvote 0
Bạn HYen17 thân mến. Bạn đã xem lại những chữ mình bôi màu đỏ chưa? Chắc là tại máy chỗ mình à. Vậy nhờ bạn nào đó thử giúp mình và cho ý kiến nha. Bạn thông cảm giúp mình vì có thể máy chỗ mình bị lỗi. Chúc bạn luôn vui vẻ.
 
Upvote 0
File của bạn HYen Mình đã chép về và thử copy 2 dòng (gồm phía trên) nhưng khi bấm tính tổng thì chỉ tính tổng cho 1 dòng F20=sum(F19:F19) thôi. Bạn xem lại có đúng không nhé!
|
B​
|
C​
|
D​
|
E​
|
F​
|
16​
|
Lê​
|
thùng​
|
250000​
|
13​
|
3250000​
|
17​
| | | | |
3.250.000​
|
18​
|Xoài|thùng|
300.000​
|
5​
|
1.500.000​
|
19​
|Chuối|thùng|
100.000​
|
6​
|
600.000​
|
20​
| | | | |
600.000​
|
 
Upvote 0
File của bạn HYen Mình đã chép về và thử copy 2 dòng (gồm phía trên) nhưng khi bấm tính tổng thì chỉ tính tổng cho 1 dòng F20=sum(F19:F19) thôi. Bạn xem lại có đúng không nhé!
|
B​
|
C​
|
D​
|
E​
|
F​
|
16​
|
Lê​
|
thùng​
|
250000​
|
13​
|
3250000​
|
17​
| | | | |
3.250.000​
|
18​
|Xoài|thùng|
300.000​
|
5​
|
1.500.000​
|
19​
|Chuối|thùng|
100.000​
|
6​
|
600.000​
|
20​
| | | | |
600.000​
|
Đúng đó bạn máy mình cũng chỉ tính tổng có 1 dòng cuối cùng thôi. Còn ý mình là nó phải tính tổng của tất cả các thiết bị mới vừa chọn. Ví dụ nếu chọn 3 thiết bị thì khi ấn nút tính tổng thì nó phải tính tổng 3 thiết bị mới vừa chọn đó. Còn file của bạn HYen17 mình đã thử rồi nhưng nó chỉ tính tổng 1 hàng cuối cùng thôi. Mong bạn HYen17 làm lại giúp mình với. Cám ơn bạn nhiều lắm. Chúc bạn luôn vui.
 
Upvote 0
Đúng là còn sai khi chỉ 1 & 2 dòng dữ liệu

Có lẽ là vầy:
Mã:
[COLOR=Silver]Option Explicit
[B]Private Sub CommandButton1_Click()[/B]
 Dim Sh As Worksheet, rW As Long, eRw As Long
 
 Set Sh = Sheet3
 eRw = Sh.[F65500].End(xlUp).Row
[/COLOR] With Sh.Cells(eRw, "D")
   If .Offset(-1).Value = "" Then
      rW = 1
   Else
      rW = eRw - .End(xlUp).Row + 1
   End If
 End With
[COLOR=Silver] With Sh.Cells(eRw, "F").Offset(1)
   .FormulaR1C1 = "=SUM(R[-" & rW & "]C:R[-1]C)"
   .Font.Bold = True
 End With
[B]End Sub[/B][/COLOR]
 
Upvote 0
Có lẽ là vầy:
Mã:
[COLOR=Silver]Option Explicit
[B]Private Sub CommandButton1_Click()[/B]
 Dim Sh As Worksheet, rW As Long, eRw As Long
 
 Set Sh = Sheet3
 eRw = Sh.[F65500].End(xlUp).Row
[/COLOR] With Sh.Cells(eRw, "D")
   If .Offset(-1).Value = "" Then
      rW = 1
   Else
      rW = eRw - .End(xlUp).Row + 1
   End If
 End With
[COLOR=Silver] With Sh.Cells(eRw, "F").Offset(1)
   .FormulaR1C1 = "=SUM(R[-" & rW & "]C:R[-1]C)"
   .Font.Bold = True
 End With
[B]End Sub[/B][/COLOR]
Đúng rồi cám ơn bạn nhiều lắm. Chúc cả nhà cuối tuần vui vẻ, hạnh phúc.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom