Nhờ giúp code VBA báo cáo

Liên hệ QC

babyheomoi

Thành viên thường trực
Tham gia
22/9/13
Bài viết
396
Được thích
91
Xin chào mọi người, em có vấn đề nhỏ cần mọi người hỗ trợ ạ!
Em có 1 cái file data, và cần lọc ra file báo cáo!
Chuyện là xài hàm cũng ổn, nhưng data lớn quá nên hay bi lag và treo máy (tầm 3000 dòng và 100 cột) - chắc máy em già rồi!
Mọi người giúp em code cho nhanh gọn được không ạ? Cơ bản data có các lưu ý như sau:
1. 1 Khách hàng có thể có nhiều hơn 1 công trình
2. Trong các công trình của 1 khách hàng có thể có hơn 1 một người quản lý
Em cám ơn trước ạ!
 

File đính kèm

  • GPE.xlsx
    13.1 KB · Đọc: 35
Xin chào mọi người, em có vấn đề nhỏ cần mọi người hỗ trợ ạ!
Em có 1 cái file data, và cần lọc ra file báo cáo!
Chuyện là xài hàm cũng ổn, nhưng data lớn quá nên hay bi lag và treo máy (tầm 3000 dòng và 100 cột) - chắc máy em già rồi!
Mọi người giúp em code cho nhanh gọn được không ạ? Cơ bản data có các lưu ý như sau:
1. 1 Khách hàng có thể có nhiều hơn 1 công trình
2. Trong các công trình của 1 khách hàng có thể có hơn 1 một người quản lý
Em cám ơn trước ạ!
3000 dòng thì rất rất ít.
Dùng pivot table đi bạn.
 
Upvote 0
Xin chào mọi người, em có vấn đề nhỏ cần mọi người hỗ trợ ạ!
Em có 1 cái file data, và cần lọc ra file báo cáo!
Chuyện là xài hàm cũng ổn, nhưng data lớn quá nên hay bi lag và treo máy (tầm 3000 dòng và 100 cột) - chắc máy em già rồi!
Mọi người giúp em code cho nhanh gọn được không ạ? Cơ bản data có các lưu ý như sau:
1. 1 Khách hàng có thể có nhiều hơn 1 công trình
2. Trong các công trình của 1 khách hàng có thể có hơn 1 một người quản lý
Em cám ơn trước ạ!

Trong khi chờ các bạn khác hỗ trợ, thử dùng code này xem sao.
Code tổng hợp theo quản lý và khách hàng được nhập bằng tay vào ô B8 và B9 của Sh REPOST. Nếu để trống 1 trong 2 ô trên thì code sẽ tổng hợp theo điều kiện còn lại.
Lưu ý : Dữ liệu nhập vào 2 ô B8, B9 được phân cách nhau bằng dấu ", ".
Hãy thêm hoặc thay đổi dữ liệu và chạy thử xem. Kết quả trả về đang để ở ô J2 đến..... bạn có thể thay đổi. tôi tin là bạn có thể cải tiến được code này.

Sub TONGHOP()
Dim i&, j&, t&, Lr&, K&
Dim Arr(), KQ(), QL, KH
Dim DK, DK1
On Error Resume Next
With Sheets("DATA")
Lr = .Range("B" & Rows.Count).End(xlUp).Row
Arr = .Range("B2:J" & Lr).Value
End With
ReDim KQ(1 To UBound(Arr), 1 To 8)
QLname = Sheets("REPORT").Cells(8, 2)
KHname = Sheets("REPORT").Cells(9, 2)
QL = Split(QLname, ","): KH = Split(KHname, ",")
Q = UBound(QL): K = UBound(KH):
If Q = -1 Then Q = 0
If K = -1 Then K = 0
For h = 0 To Q
For m = 0 To K
If Q = 0 Then
If KHname <> Empty Then DK = Trim(QLname) & Trim(KH(m))
Else
If KHname <> Empty Then DK = Trim(QL(h)) & Trim(KH(m))
End If
If K = 0 Then
If QLname <> Empty Then DK = Trim(KHname) & Trim(KH(m))
Else
If QLname <> Empty Then DK = Trim(QL(h)) & Trim(KH(m))
End If
If Q = 0 And K = 0 Then DK = Trim(QL(h)) & Trim(KH(m))

If KHname = Empty And QLname <> Empty Then DK = Trim(QL(h))
If QLname = Empty And KHname <> Empty Then DK = Trim(KH(m))
For i = 1 To UBound(Arr)
If QLname <> Empty And KHname <> Empty Then DK1 = Trim(Arr(i, 3)) & Trim(Arr(i, 2))

If KHname = Empty And QLname <> Empty Then DK1 = Trim(Arr(i, 3)
If QLname = Empty And KHname <> Empty Then DK1 = Trim(Arr(i, 2))
If DK1 = DK Then
t = t + 1
KQ(t, 1) = t: KQ(t, 2) = Arr(i, 3): KQ(t, 3) = Arr(i, 2)
For n = 5 To 9
KQ(t, n - 1) = Arr(i, n)
Next n
End If
Next i
Next m
Next h
If t Then
Sheet2.[J11].Resize(t + 10, 9).ClearContents
Sheet2.[J11].Resize(t, 8) = KQ
End If
MsgBox "XONG"
End Sub




Code viết lòng vòng, loằng ngoằng quá tự bản thân cảm nhận là như vậy, Mong các bạn ghé qua xem code và cho góp ý nhé. Trân trọng.
 

File đính kèm

  • GPE-BABYHEOMOI.xlsm
    25.2 KB · Đọc: 26
Upvote 0
Góp ý có cam đoan là không tự ái hôn?

Cảm ơn anh đã ghé qua và đọc bài.
Với tôi (chỉ là với tôi thôi nhé) thì mọi góp ý nào thì cũng được đón nhận, Mọi góp ý chân thành sẽ được đón nhận bằng tình cảm chân thành. Cái gì xuất phát từ trái tim thì chắc cũng sẽ được nhiều trái tin đón nhận.
Trân trọng!
 
Upvote 0
Góp ý đầu tiên là việc trình bày bài viết: code nên để trong thẻ [ code] ...[ / code]
Cảm ơn bạn nhé. Mình sẽ cố gắng khác phục.
Cái này không hiểu máy mình thế nào, hoặc mình làm không đúng, mà làm mãi không được.
đây là cái hình nó lên và tất cả đều mờ.
 

File đính kèm

  • Screenshot (12).png
    Screenshot (12).png
    339.5 KB · Đọc: 25
Upvote 0
Cảm ơn bạn nhé. Mình sẽ cố gắng khác phục.
Cái này không hiểu máy mình thế nào, hoặc mình làm không đúng, mà làm mãi không được.
đây là cái hình nó lên và tất cả đều mờ.
1.Làm thủ công:
Bắt đầu nhập: [ code] <= lưu ý không có khoảng trắng
'Nhập đoạn code vào
Kết thúc nhập: [ /code] <= lưu ý không có khoảng trắng

2. Hoặc nhấp vào biểu tượng: [ ] trên thanh công cụ của diễn đàn

Ngoài ra, cũng có thể để code trong thẻ [ php] ... [ /php]

.
 
Upvote 0
1.Làm thủ công:
Bắt đầu nhập: [ code] <= lưu ý không có khoảng trắng
'Nhập đoạn code vào
Kết thúc nhập: [ /code] <= lưu ý không có khoảng trắng

2. Hoặc nhấp vào biểu tượng: [ ] trên thanh công cụ của diễn đàn

Ngoài ra, cũng có thể để code trong thẻ [ php] ... [ /php]

.
Cảm ơn bạn. để lần tới nếu có mình sẽ áp dụng. nếu có vướng mắc bạn cố gắng hỗ trợ mình nhé.
 
Upvote 0
Xin chào mọi người, em có vấn đề nhỏ cần mọi người hỗ trợ ạ!
Em có 1 cái file data, và cần lọc ra file báo cáo!
Chuyện là xài hàm cũng ổn, nhưng data lớn quá nên hay bi lag và treo máy (tầm 3000 dòng và 100 cột) - chắc máy em già rồi!
Mọi người giúp em code cho nhanh gọn được không ạ? Cơ bản data có các lưu ý như sau:
1. 1 Khách hàng có thể có nhiều hơn 1 công trình
2. Trong các công trình của 1 khách hàng có thể có hơn 1 một người quản lý
Em cám ơn trước ạ!
Trong Data có khi nào phát sinh kiểu như 2 dòng tô vàng bên dưới không?
1626842772867.png
 
Upvote 0
... Cái gì xuất phát từ trái tim thì chắc cũng sẽ được nhiều trái tin đón nhận.
Đây là lời "khiêm nhã" có điều kiện.
Nói cách khác, bạn chỉ đón nhận nếu bạn cho rằng"xuất phát từ trái tim" người kia?
Cái chỗ tôi bôi đỏ ở trên nó là chủ quan của bạn.

Câu tôi đặt ra ở bài #6 chính là nhắm vào chỗ: bạn đã sẵn sàng dẹp hết thành kiến chưa?

Thôi thì muốn ý kiến, tôi thêm chút ý kiến:

Trong tiếng Anh có câu “Birds of a feather flock together” (chim cùng lông cùng cánh thì xáp bầy với nhau). Ngạn ngữ này có giá trị khá cao trong lập trình.

Trước mắt, code ở bài #5 không theo luật trên.
Điển hình, các biến chỉ vào cùng một loại, hạng thì đáng lẽ phải đặt tên cùng nhóm với nhau.
h không cùng nhóm với k, m, n... Theo luật (không thành văn) lập trình, nhóm i-n chỉ nên dùng cho số nguyên; và các ký tự còn lại dùng cho số thực. Nếu từ i-n không đủ thì thêm i1, i2,...
Luuw ý rằng thường thì tránh đặt biến tên l (không hoa), vì l trông giống I hoa, dễ lầm. Ngược lại tránh I hoa. Nếu muốn thì dùng L hoa. Lỗi này bạn không vướng, tôi chỉ nêu ra để đề phòng thôi.
Về sau này, khuynh hướng code hướng đối tượng hơi khác chút. Tuy nhiên, dân hướng đối tượng cũng chú ý đặt tên biến phân biệt i-n và các ký tự còn lại.

Trước mắt thì cứ xem đám ấy đi. Mấy chỗ khác tính sau.
 
Upvote 0
Ở những điểm nào thì Pivot Table ăn đứt vba bác ơi.
Theo tôi thì có rất nhiều
Chỉ cần kéo thả mà không cần viết code kiết
Cho thống kê nhiều Tuỳ chọn tuỳ ý. Cái này code rất cực
Gôm nhóm nhanh gọn lẹ
Định dạng theo mong muốn đẹp đẽ
................ và còn nhiều cái khác nữa
 
Upvote 0
Ở những điểm nào thì Pivot Table ăn đứt vba bác ơi.
Tôi đâu có nói nó "ăn đứt"
Tôi chỉ nêu ra cái cấp bậc sử dụng.

Pivot Table là công cụ của quản lý. Lập trình là công cụ của những người báo cáo cho quản lý.

Vả lại, hoa lá cành này nọ mà mình tự làm mới pơ-ro. Chứ người khác làm thì ... hoạ may là pơ-ro ở chỗ khả năng "muốn gì đều có người nai lưng ra làm giùm".
 
Upvote 0
Đây là lời "khiêm nhã" có điều kiện.
Nói cách khác, bạn chỉ đón nhận nếu bạn cho rằng"xuất phát từ trái tim" người kia?
Cái chỗ tôi bôi đỏ ở trên nó là chủ quan của bạn.

Câu tôi đặt ra ở bài #6 chính là nhắm vào chỗ: bạn đã sẵn sàng dẹp hết thành kiến chưa?

Thôi thì muốn ý kiến, tôi thêm chút ý kiến:

Trong tiếng Anh có câu “Birds of a feather flock together” (chim cùng lông cùng cánh thì xáp bầy với nhau). Ngạn ngữ này có giá trị khá cao trong lập trình.

Trước mắt, code ở bài #5 không theo luật trên.
Điển hình, các biến chỉ vào cùng một loại, hạng thì đáng lẽ phải đặt tên cùng nhóm với nhau.
h không cùng nhóm với k, m, n... Theo luật (không thành văn) lập trình, nhóm i-n chỉ nên dùng cho số nguyên; và các ký tự còn lại dùng cho số thực. Nếu từ i-n không đủ thì thêm i1, i2,...
Luuw ý rằng thường thì tránh đặt biến tên l (không hoa), vì l trông giống I hoa, dễ lầm. Ngược lại tránh I hoa. Nếu muốn thì dùng L hoa. Lỗi này bạn không vướng, tôi chỉ nêu ra để đề phòng thôi.
Về sau này, khuynh hướng code hướng đối tượng hơi khác chút. Tuy nhiên, dân hướng đối tượng cũng chú ý đặt tên biến phân biệt i-n và các ký tự còn lại.

Trước mắt thì cứ xem đám ấy đi. Mấy chỗ khác tính sau.

Cảm ơn anh đã góp ý những kiến thức bổ ích. Xin được tiếp thu và sửa đổi trong thời gian tới.
 
Upvote 0
Theo tôi thì có rất nhiều
Chỉ cần kéo thả mà không cần viết code kiết
Cho thống kê nhiều Tuỳ chọn tuỳ ý. Cái này code rất cực
Gôm nhóm nhanh gọn lẹ
Định dạng theo mong muốn đẹp đẽ
................ và còn nhiều cái khác nữa
Chủ kênh biết sử dụng PivotTable nhưng muốn viết dùn code nhấn nút cái là được PivotTable luôn cho nó khỏe (kéo kéo, thả thả hơi mệt).
 
Upvote 0
Chủ kênh biết sử dụng PivotTable nhưng muốn viết dùn code nhấn nút cái là được PivotTable luôn cho nó khỏe (kéo kéo, thả thả hơi mệt).
Không hẳn chỉ khoẻ đâu bạn. Theo thớt thì nó còn tăng địa vị người dùng trong con mắt người khác:
Trích dẫn:
1626866849458.png

Chú ngoài lề:
Tiếng Việt có câu "nhiều chắc thì lại thành không chắc". Khi ta nói "chắc chắc" thì có nghĩa là không hoàn toàn chắc chắn.
Nới chung, khi người ta lặp đôi một tĩnh từ thì cái nghĩa của nó nhẹ đi một chút. Ví dụ, "xanh xanh" thì thường không rõ bằng "xanh". Và kiểu hành văn này khá thông dụng trong tiếng Việt.
Vietglish bi giờ có chuyện áp dụng luôn kiểu hành văn này cho tĩnh tự tiếng Anh?
(xin đừng lầm với pro-pro chart, ý nghĩa khác hoàn toàn)
 
Upvote 0
Web KT
Back
Top Bottom