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
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ự UpdateGử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.
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ổngPHP: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
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.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
Giúp em bài toán trên với cả nhà ơi. Chúc cả nhà cuối tuần vui vẻ.
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ẻ.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
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
[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]
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.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: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
Bạn thử lại xem sao!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]
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.
Mình thử file đính kèm của bạn rồi. Lần tính tổng đầu tiên thì đúng. Các lần sao nó chỉ tính tổng ô trên nó 1 hàng thôi cậu ạ. Cậu giúp mình lần nữa nhé. Cám ơn cậu rất nhiều.
Bạn xem lại giúp mình nha. Hay là máy chỗ mình bị lỗi.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 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ẻ.Thân ái!
Đú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.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|
[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.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]