Quản lý công nợ theo hợp đồng

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Phương Phương mito

Thành viên thường trực
Tham gia
1/5/19
Bài viết
275
Được thích
65
Mến trào anh chị và các bạn,
Nhờ anh chị sửa code giúp em với ạ. Kết quả mong muốn như tại G2 ạ. Code em làm chưa cho được Tổng cộng vào ô mà để tạm tại cột E. Em chưa biết tính khoảng cách giữa 2 lần thành toán ạ. Em cảm ơn ạ.
 

File đính kèm

  • Quan ly phai thu KH.xlsb
    20.8 KB · Đọc: 19
Mến trào anh chị và các bạn,
Nhờ anh chị sửa code giúp em với ạ. Kết quả mong muốn như tại G2 ạ. Code em làm chưa cho được Tổng cộng vào ô mà để tạm tại cột E. Em chưa biết tính khoảng cách giữa 2 lần thành toán ạ. Em cảm ơn ạ.
Bạn giải thích tại sao có dòng thì có " (90)" hoặc "(92)" có dòng thì không? Số tô đậm trong ngoặc ấy được lấy thế nào?
25/12/2021-25.000.000
25/03/2022 (90) -29.000.000
 
Upvote 0
Bạn giải thích tại sao có dòng thì có " (90)" hoặc "(92)" có dòng thì không? Số tô đậm trong ngoặc ấy được lấy thế nào?
25/12/2021-25.000.000
25/03/2022 (90) -29.000.000
Cứ lấy ngày thanh toán trừ đi ngày thanh toán gần nhất trước đó ạ
Bài đã được tự động gộp:

dạ, ngại quá vì em hay chát chít với các bạn kiểu xinh nhật, sin trào, xương sương....nên nhiều khi viết thành thói quen xấu ạ. Em sẽ chú ý hơn ạ.
 
Upvote 0
Mến trào anh chị và các bạn,
Nhờ anh chị sửa code giúp em với ạ. Kết quả mong muốn như tại G2 ạ. Code em làm chưa cho được Tổng cộng vào ô mà để tạm tại cột E. Em chưa biết tính khoảng cách giữa 2 lần thành toán ạ. Em cảm ơn ạ.
Data sort sẵn như thế thì dùng dic chi cho mất công hè?
 
Upvote 0
Code:
Rich (BB code):
Sub Maika()
    Dim i&, t&, Lr&, Arr(), KQ()
    Dim dDate As Date, dTotal#, Key$

    With Sheets("Data")
        Lr = .Cells(1000000, 1).End(3).Row
        Arr = .Range("A2:E" & Lr + 1).Value
        ReDim KQ(1 To UBound(Arr), 1 To 4)
        t = 1: dDate = .Cells(2, 3)
        For i = 1 To UBound(Arr) - 1
            Key = Arr(i, 1) & "|" & Arr(i, 4)
            If Arr(i + 1, 1) & "|" & Arr(i + 1, 4) = Key Then
                If Arr(i, 3) <> dDate Then
                    KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "(" & Arr(i, 3) - dDate & ")" & "-" & Format(Arr(i, 5), "#,##0") & Chr(10)
                Else
                    KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "-" & Format(Arr(i, 5), "#,##0") & Chr(10)
                End If
                dTotal = dTotal + Arr(i, 5): dDate = Arr(i, 3)
            Else
                KQ(t, 1) = Arr(i, 1)
                KQ(t, 2) = Arr(i, 2)
                KQ(t, 3) = Arr(i, 4)
                dTotal = dTotal + Arr(i, 5)
                KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "(" & Arr(i, 3) - dDate & ")" & "-" & Format(Arr(i, 5), "#,##0") & Chr(10) & "Tong cong: " & Format(dTotal, "#,##0")
                t = t + 1: dTotal = 0: dDate = Arr(i + 1, 3)
            End If
        Next
        Sheets("KQ").Range("A2:D90000").ClearContents
        Sheets("KQ").Range("A2").Resize(t, 4) = KQ
    End With
End Sub
 
Upvote 0
Code:
Rich (BB code):
Sub Maika()
    Dim i&, t&, Lr&, Arr(), KQ()
    Dim dDate As Date, dTotal#, Key$

    With Sheets("Data")
        Lr = .Cells(1000000, 1).End(3).Row
        Arr = .Range("A2:E" & Lr + 1).Value
        ReDim KQ(1 To UBound(Arr), 1 To 4)
        t = 1: dDate = .Cells(2, 3)
        For i = 1 To UBound(Arr) - 1
            Key = Arr(i, 1) & "|" & Arr(i, 4)
            If Arr(i + 1, 1) & "|" & Arr(i + 1, 4) = Key Then
                If Arr(i, 3) <> dDate Then
                    KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "(" & Arr(i, 3) - dDate & ")" & "-" & Format(Arr(i, 5), "#,##0") & Chr(10)
                Else
                    KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "-" & Format(Arr(i, 5), "#,##0") & Chr(10)
                End If
                dTotal = dTotal + Arr(i, 5): dDate = Arr(i, 3)
            Else
                KQ(t, 1) = Arr(i, 1)
                KQ(t, 2) = Arr(i, 2)
                KQ(t, 3) = Arr(i, 4)
                dTotal = dTotal + Arr(i, 5)
                KQ(t, 4) = KQ(t, 4) & Arr(i, 3) & "(" & Arr(i, 3) - dDate & ")" & "-" & Format(Arr(i, 5), "#,##0") & Chr(10) & "Tong cong: " & Format(dTotal, "#,##0")
                t = t + 1: dTotal = 0: dDate = Arr(i + 1, 3)
            End If
        Next
        Sheets("KQ").Range("A2:D90000").ClearContents
        Sheets("KQ").Range("A2").Resize(t, 4) = KQ
    End With
End Sub
Anh cho em hỏi thêm ạ. Cho dữ liệu vào arr. rồi sau đó lọc theo tứ tự tăng dần của ngày tháng, rồi lọc theo thứ tự tên KH để chuẩn hoá dữ liệu phòng dữ liệu chưa chuẩn ngay thì thêm code như nào được ạ !
 
Upvote 0
Anh cho em hỏi thêm ạ. Cho dữ liệu vào arr. rồi sau đó lọc theo tứ tự tăng dần của ngày tháng, rồi lọc theo thứ tự tên KH để chuẩn hoá dữ liệu phòng dữ liệu chưa chuẩn ngay thì thêm code như nào được ạ !
Tôi không rành chuyện sắp xếp trong mảng nên muốn như thế thì tôi dùng VBA sort trên sheet xong mới cho vào mảng.
 
Upvote 0
Thử xài cái này xem nhé:
Mã:
Option Explicit
Sub gopHd()
Dim lr&, i&, k&, rng, res(), sp, sum&, st As String
Dim dic As Object, key
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("Data")
    lr = .Cells(Rows.Count, "A").End(xlUp).Row
    rng = .Range("A2:E" & lr).Value
End With
For i = 1 To UBound(rng)
    If Not dic.exists(rng(i, 4)) Then
        dic.Add rng(i, 4), i
    Else
        dic(rng(i, 4)) = dic(rng(i, 4)) & "|" & i
    End If
Next
ReDim res(1 To dic.Count, 1 To 5)
For Each key In dic.keys
    sp = Split(dic(key), "|")
    k = k + 1: res(k, 1) = rng(sp(0), 1): res(k, 2) = rng(sp(0), 2): res(k, 3) = key
    For i = 0 To UBound(sp)
        If i = 0 Then
            st = rng(sp(0), 3) & " - " & Format(rng(sp(0), 5), "#,###") & vbLf
            sum = rng(sp(0), 5)
        Else
            sum = sum + rng(sp(i), 5)
            st = st & rng(sp(0), 3) & " (" & (rng(sp(i), 3) - rng(sp(i - 1), 3)) & ") -" & Format(rng(sp(i), 5), "#,###") & vbLf
        End If
        If i = UBound(sp) Then st = st & "Tong cong: " & Format(sum, "#,###")
    Next
    res(k, 4) = st: res(k, 5) = sum
Next
With Sheets("KQ")
    .Range("A2:E10000").ClearContents
    .Range("A2").Resize(dic.Count, 5).Value = res
End With
Set dic = Nothing
End Sub
 

File đính kèm

  • Quan ly phai thu KH.xlsb
    31.5 KB · Đọc: 29
Upvote 0
Thử xài cái này xem nhé:
Mã:
Option Explicit
Sub gopHd()
Dim lr&, i&, k&, rng, res(), sp, sum&, st As String
Dim dic As Object, key
Set dic = CreateObject("Scripting.Dictionary")
With Sheets("Data")
    lr = .Cells(Rows.Count, "A").End(xlUp).Row
    rng = .Range("A2:E" & lr).Value
End With
For i = 1 To UBound(rng)
    If Not dic.exists(rng(i, 4)) Then
        dic.Add rng(i, 4), i
    Else
        dic(rng(i, 4)) = dic(rng(i, 4)) & "|" & i
    End If
Next
ReDim res(1 To dic.Count, 1 To 5)
For Each key In dic.keys
    sp = Split(dic(key), "|")
    k = k + 1: res(k, 1) = rng(sp(0), 1): res(k, 2) = rng(sp(0), 2): res(k, 3) = key
    For i = 0 To UBound(sp)
        If i = 0 Then
            st = rng(sp(0), 3) & " - " & Format(rng(sp(0), 5), "#,###") & vbLf
            sum = rng(sp(0), 5)
        Else
            sum = sum + rng(sp(i), 5)
            st = st & rng(sp(0), 3) & " (" & (rng(sp(i), 3) - rng(sp(i - 1), 3)) & ") -" & Format(rng(sp(i), 5), "#,###") & vbLf
        End If
        If i = UBound(sp) Then st = st & "Tong cong: " & Format(sum, "#,###")
    Next
    res(k, 4) = st: res(k, 5) = sum
Next
With Sheets("KQ")
    .Range("A2:E10000").ClearContents
    .Range("A2").Resize(dic.Count, 5).Value = res
End With
Set dic = Nothing
End Sub
Cảm ơn anh đã trợ giúp ạ. Em chạy thử kết quả đúng rồi ạ !
Bài đã được tự động gộp:

Tôi không rành chuyện sắp xếp trong mảng nên muốn như thế thì tôi dùng VBA sort trên sheet xong mới cho vào mảng.
Dạ vâng ạ !
 
Upvote 0
Upvote 0
Dữ liệu chuẩn như thế thì dùng Pivot Table chứ ai lại tạo bảng KQ chi cho cứng nhắc.
Nhiều người ưa báo cáo như thế thì phải làm chứ bác. Mà nói thực, xưa đến nay em chẳng thích cách trình bày của pivot table chút nào, mặc dù nó tuyệt vời về truy vấn.
 
Upvote 0
Nhiều người ưa báo cáo như thế thì phải làm chứ bác. Mà nói thực, xưa đến nay em chẳng thích cách trình bày của pivot table chút nào, mặc dù nó tuyệt vời về truy vấn.
Hèn gì quý vị không thích nó.
Từ "pivot" có nghĩa là "xoay vần theo".

Pivot Table là công cụ để xem xét dữ liệu tổng hợp, không phải là công cụ để báo cáo.
Tôi đã từng giải thích rằng nó dùng để chạy trước bảng tính chứ không phải theo đuôi bảng tính.
Chạy trước: nhìn vào bảng, người ta thấy bảng này có thể cung cấp những thông tin gì (1).
Chạy theo: người ta cần một số thông tin (2), và dựa vào bảng để lấy số thông tin ấy.
(1) là động, (2) là tĩnh.

Về cách trình bày. Khi làm việc, tôi cần thông tin chứ không lý mấy đến cách trình bày. Giao diện của mấy cái như Pivot Table/Chart (về sau này có thêm Power BI) là của mấy tay chuyên nghiệp trong ngành tài chính thương mãi tạo nên. Dùng một thời gian rồi sẽ quen và thấy chúng rất hiệu quả.
 
Upvote 0
Web KT
Back
Top Bottom