Nhờ anh, chị lập giúp code VBA cho dòng cộng và tổng cộng.

Liên hệ QC

hoangminh2018

Thành viên chính thức
Tham gia
31/10/18
Bài viết
58
Được thích
4
Em có file này trước đây có một anh trên diễn đàn giúp làm ra phần phát sinh.
Nhưng nay em muốn thêm vào dòng cộng và tổng cộng bằng code vba luôn (các dòng tô màu vàng), mong nhận được sự giúp đỡ của mọi người.
Code trong Module 2
Em xin cảm ơn.
 

File đính kèm

  • Bao Cao Thu Chi vba 2016 hoi.xlsm
    70 KB · Đọc: 36
Em cũng đang tìm code này. tiện bác nào chỉ luôn e với :(
 
Upvote 0
Thêm dòng như thế nào bạn?
Thiết nghĩ nếu bạn thêm dòng thì code cũng sẽ tự thêm dòng thôi.
 
Upvote 0
Nếu là mình thì các tổng & cộng tổng nên áp công thức; Không thèm xài VBA;
Mà cũng không cần xài đến Dictionary cho nó hàm lậm, chỉ đưa dữ liệu vô mảng mà duyệt thôi.
Vòng lặp ngoài duyệt theo các (4) hàng của cột B của trang 'THTien'
Vòng lặp trong duyệt theo dữ liệu của mảng ( Arr = .Range("A3:J" & A).Value)
Cái nào thỏa ngày nào thì ghi vô 1 trong 3 tham biến (DuDauKy; TangTrongKy & GiamTrongKy là được
Duyệt xong dòng nào của trang 'THTien' thì ghi các tham biến tương ứng vô 3 cột
(Xóa về 0 các tham biến, để ghi cho dòng dưới liền kề có dữ liệu của trang)

Với hướng này bạn dễ bảo trì hơn nhiều.
 
Upvote 0
Nếu là mình thì các tổng & cộng tổng nên áp công thức; Không thèm xài VBA;
Mà cũng không cần xài đến Dictionary cho nó hàm lậm, chỉ đưa dữ liệu vô mảng mà duyệt thôi.
Vòng lặp ngoài duyệt theo các (4) hàng của cột B của trang 'THTien'
Vòng lặp trong duyệt theo dữ liệu của mảng ( Arr = .Range("A3:J" & A).Value)
Cái nào thỏa ngày nào thì ghi vô 1 trong 3 tham biến (DuDauKy; TangTrongKy & GiamTrongKy là được
Duyệt xong dòng nào của trang 'THTien' thì ghi các tham biến tương ứng vô 3 cột
(Xóa về 0 các tham biến, để ghi cho dòng dưới liền kề có dữ liệu của trang)

Với hướng này bạn dễ bảo trì hơn nhiều.
Dạ vì em không rành VBA lắm, thầy có thể làm phần này giúp em không ạ - theo ý của thầy.
 
Upvote 0

File đính kèm

  • Bao Cao Thu Chi vba 2016 hoi.xlsm
    73.3 KB · Đọc: 9
Upvote 0
Ai cũng chê hay sao ý:
PHP:
Sub TongHopPhatSinh()
Dim Rws As Long, J As Long, DuDK As Double, Tang As Double, Giam As Double, Tmp As Double
Dim Arr(), Cls As Range
Dim CT As Integer

With Sheets("NhapLieu")
    Rws = .[b3].CurrentRegion.Rows.Count
    Arr() = .[b3].Resize(Rws, 8).Value:                             Tmp = Timer()
End With
With Sheets("THTien")
    fDat = .[d7].Value:                                               lDat = .[g7].Value
    For Each Cls In .Range(.[b11], .[B65500].End(xlUp))
        If Cls.Value = "" Then GoTo GPE
        For J = 1 To UBound(Arr())
            If Arr(J, 8) = Cls.Value Then
                If Arr(J, 2) <> Space(0) Then CT = 1 Else CT = -1
                If Arr(J, 1) < fDat Then
                    DuDK = DuDK + CT * Arr(J, 7)
                ElseIf Arr(J, 1) >= fDat And Arr(J, 1) <= lDat Then
                    If CT Then
                        Tang = Tang + Arr(J, 7)
                    Else
                        Giam = Giam + Arr(J, 7)
                    End If
                End If
            End If
        Next J
        .Cells(Cls.Row, "F").Value = DuDK:          DuDK = 0
        .Cells(Cls.Row, "G").Value = Tang:          Tang = 0
        .Cells(Cls.Row, "H").Value = Giam:          Giam = 0
GPE:
    Next Cls
End With
MsgBox Timer() - Tmp
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Ai cũng chê hay sao ý:
PHP:
Sub TongHopPhatSinh()
Dim Rws As Long, J As Long, DuDK As Double, Tang As Double, Giam As Double, Tmp As Double
Dim Arr(), Cls As Range
Dim CT As Integer

With Sheets("NhapLieu")
    Rws = .[b3].CurrentRegion.Rows.Count
    Arr() = .[b3].Resize(Rws, 8).Value:                             Tmp = Timer()
End With
With Sheets("THTien")
    fDat = .[d7].Value:                                                     lDat = .[g7].Value
    For Each Cls In .Range(.[b11], .[B65500].End(xlUp))
        If Cls.Value = "" Then GoTo GPE
        For J = 1 To UBound(Arr())
            If Arr(J, 8) = Cls.Value Then
                If Arr(J, 2) <> Space(0) Then CT = 1 Else CT = -1
                If Arr(J, 1) < fDat Then
                    DuDK = DuDK + CT * Arr(J, 7)
                ElseIf Arr(J, 1) >= fDat And Arr(J, 1) <= lDat Then
                    If CT Then
                        Tang = Tang + Arr(J, 7)
                    Else
                        Giam = Giam + Arr(J, 7)
                    End If
                End If
            End If
        Next J
        .Cells(Cls.Row, "F").Value = DuDK:          DuDK = 0
        .Cells(Cls.Row, "G").Value = Tang:          Tang = 0
        .Cells(Cls.Row, "H").Value = Giam:          Giam = 0
GPE:
    Next Cls
End With
MsgBox Timer() - Tmp
End Sub
Dạ em cảm ơn thầy.
 
Upvote 0
Ai cũng chê hay sao ý:
PHP:
Sub TongHopPhatSinh()
Dim Rws As Long, J As Long, DuDK As Double, Tang As Double, Giam As Double, Tmp As Double
Dim Arr(), Cls As Range
Dim CT As Integer

With Sheets("NhapLieu")
    Rws = .[b3].CurrentRegion.Rows.Count
    Arr() = .[b3].Resize(Rws, 8).Value:                             Tmp = Timer()
End With
With Sheets("THTien")
    fDat = .[d7].Value:                                                     lDat = .[g7].Value
    For Each Cls In .Range(.[b11], .[B65500].End(xlUp))
        If Cls.Value = "" Then GoTo GPE
        For J = 1 To UBound(Arr())
            If Arr(J, 8) = Cls.Value Then
                If Arr(J, 2) <> Space(0) Then CT = 1 Else CT = -1
                If Arr(J, 1) < fDat Then
                    DuDK = DuDK + CT * Arr(J, 7)
                ElseIf Arr(J, 1) >= fDat And Arr(J, 1) <= lDat Then
                    If CT Then
                        Tang = Tang + Arr(J, 7)
                    Else
                        Giam = Giam + Arr(J, 7)
                    End If
                End If
            End If
        Next J
        .Cells(Cls.Row, "F").Value = DuDK:          DuDK = 0
        .Cells(Cls.Row, "G").Value = Tang:          Tang = 0
        .Cells(Cls.Row, "H").Value = Giam:          Giam = 0
GPE:
    Next Cls
End With
MsgBox Timer() - Tmp
End Sub
Dạ thầy ơi em test mà nó bị lỗi
216752
 
Upvote 0
Mình nhồm hình không rõ, nhưng đoán là nó báo thời gian đã dùng để chạy macro trên file của bạn đó thôi.
 
Upvote 0
Đó là hiệu thời gian đầu & cuối khi thực hành 1 lần của macro
 
Upvote 0
Web KT
Back
Top Bottom