Thưa thầy em có file danh mục khách hàng như vậy. Em muốn hiện thị kết quả ở vùng bôi màu vàng trong file.
Vì bên e một khách hàng có thể có nhiều công trình nhưng cũng có khách hàng chỉ có 1 công trình.
Em muốn thêm dòng ở những khách hàng có nhiều công trình và tính tổng nợ như ví dụ bôi màu vàng. Sau đó lên báo cáo tổng cho nhóm Khách hàng nhóm số 1
Có cách nào dùng Vba để thêm dòng tự động vào nhóm Khách hàng có nhiều công trình rồi tính tổng các công trình của họ không.
Rất mong thầy hướng dẫn chi tiết cho em.
Cám ơn thầy ạ
Chào bạn bạn vui lòng gửi lại File giúp gitiho nhé.
Em gửi lại thầy nhé
Bạn nên tạo 1 báo cáo tổng hợp, trong báo cáo đó sẽ thể hiện các khách hàng, mỗi khách hàng 1 dòng => dùng công thức SUMIFS để tính tổng phát sinh cho từng khách hàng.
Ko nên tạo dòng tổng cộng ngay trong bảng danh mục vì như thế dễ bị thiếu sót và nhầm lẫn (khi thực hiện các thao tác sắp xếp trong bảng danh mục thì dòng tổng cộng sẽ bị xáo trộn và phải đặt lại rất mất công.
Thầy nói đúng e cũng định lấy luôn danh sách khách hàng để làm báo cáo và thực tế là khi phát sinh thêm công trình của 1 khách hàng nào đó mà quên ko chèn thêm dòng tổng cộng vào trc khách hàng đó là số tổng theo nhóm 1 có thể đúng nhưng từng khách hàng thì lại chưa chuẩn.
Nhưng thầy có thể thiết kế cho e mẫu báo cáo như thế nào để liên kết đc với bảng danh mục khách hàng mà khi update bảng danh mục tự khắc sẽ nhảy khách hàng vào bảng báo cáo ko ạ mà vẫn thể hiện đc nhóm Khách hàng cấp 1 và khách hàng cấp 2,3...
E cám ơn thầy ạ
Ở đây mình mới thấy danh sách chứ chưa thấy phần dữ liệu phát sinh nên chưa rõ báo cáo sẽ cần tính như thế nào.
Việc sắp xếp khách hàng theo nhóm thực ra thế này: Dựa trên việc tạo Nhóm khách bạn thực hiện 1 đoạn code Sắp xếp lại bảng theo Nhóm (nên đặt mã nhóm có ký tự text như A1, A2, A1.1... thì khi sắp xếp sẽ chính xác hơn). Code sắp xếp có thể record macro được => thao tác sắp xếp nên làm tự động để tránh dữ liệu bị đặt vị trí lộn xộn không đúng nhóm.
Về phương pháp làm báo cáo thì mình nghĩ bạn có thể dùng pivot table sẽ khá hiệu quả trong tình huống này, không cần qua VBA. Pivot table đáp ứng đủ các tiêu chuẩn làm báo cáo mà bạn muốn mà ko cần lập trình code. Còn để làm báo cáo thủ công bằng công thức thì cần biết thêm dữ liệu phát sinh thế nào mới đưa ra công thức phù hợp được.
E không hiểu hàm sort của em sai chỗ nào mà em test không ra thầy ạ. Vẫn file DMKH đó. Đây là đoạn code của em
Chào bạn bạn gửi file giúp gitiho nhé, code không thể dubug bằng mắt được đâu bạn
file của em đây ạ https://drive.google.com/file/d/1gLCG...
Thầy giúp em định dạng và gán giá trị dòng cuối vào sheet IN giống như mẫu trong sheet form_kq nhé. Em cảm ơn thầy ạ
Bạn tham khảo code mẫu dưới đây nhé:
Sub test_adfilter()
'Xoa du lieu cu
Range("A14:G500").Clear
'Loc du lieu
Dim ws, ws_data As Worksheet
Set ws = ThisWorkbook.Sheets("IN")
Set ws_data = ThisWorkbook.Sheets("NHAPTONGHOP")
Dim rgn, rgn_DK, rgn_KQ As Range
Set rgn = ws_data.Range("A8:I" & DongCuoi(Sheets("NHAPTONGHOP"), "C"))
Set rgn_DK = ws.Range("L3:N4")
Set rgn_KQ = ws.Range("B13:G13")
rgn.AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=rgn_DK, _
CopyToRange:=rgn_KQ, _
Unique:=False
'Phan cuoi bao cao
Dim lr As Long
lr = DongCuoi(Sheets("IN"), "B")
Range("L19:Q24").Copy
Range("B" & lr + 2).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
trong đó vùng L19:Q24 là vùng ở phía dưới báo cáo. Tạo sẵn vùng này trước ở bên ngoài báo cáo, sau khi advanced filter ra kết quả => tìm dòng cuối và copy-paste vùng này vào báo cáo là được.
Em làm đc rồi e cảm ơn thầy ạ
chào bạn nếu bạn làm trên excel nhiều và không muốn cài visual thì bạn học VBAG02 nhé.
Ok thank you thầy