Nhờ giúp code VBA báo cáo (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

babyheomoi

Thành viên thường trực
Tham gia
22/9/13
Bài viết
395
Đượ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

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

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
Trời. Lần đầu tiên thấy định nghĩa pơ-ro pơ-ro thế này. Code VBA pơ-ro hơn Pivot Table!
Đi nhờ xe Hyundai xịn hơn mua xe Mercedes tự lái lấy.
Dạ, không phải, ý em là cơ quan em nhiều người chưa biết VBA ạ, e muốn xài Vba cho nó mới xíu, còn pivot đã nhiều người biết, nhưng nói thật với em em cũng chưa tìm hiểu và rành hết về pivot @@ chứ ko phải ý bác nói đâu ạ!
Bài đã được tự động gộp:

Dạ, cái đó chắc nhanh quá em nhầm, thường 1 khách sẽ có nhiều công trình, chứ không có kiểu 1 công trình nhiều khách hàng
Cám ơn anh
Bài đã được tự động gộp:

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
Dạ, nói thật a xưa giờ chưa đụng nhiều pivot, chủ yếu kéo thả, riêng phần định dạng thì em siêu kém!
Nếu có thể, anh định dạng mẫu giúp em thật đẹp a nhé!E cám ơn!
Bài đã được tự động gộp:

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).
Bác trêu em, kaka, thực ra e marco Pivot rồi refesh cũng được mà, nhưng nhìn nó sao sao ấy @@ nên mới nhờ anh em GPE cho em mở mang tí kiến thức!
Bài đã được tự động gộp:

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.
CODE chạy ok lắm bạn, cám ơn bạn nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Bài đã được tự động gộp:

Bác trêu em, kaka, thực ra e marco Pivot rồi refesh cũng được mà, nhưng nhìn nó sao sao ấy @@ nên mới nhờ anh em GPE cho em mở mang tí kiến thức!
Tôi nói thật đó chứ không có trêu đâu, tìm bài viết Theo dõi công văn đi và đến xem tôi sử dụng PivotTable như thế nào thì sẽ hiểu.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi nói thật đó chứ không có trêu đâu, tìm bài viết Theo dõi công công đi và đến xem tôi sử dụng PivotTable như thế nào thì sẽ hiểu.
Thiệt là có bài "Theo dõi công công" hả bác?
Tôi tìm hoài không thấy bài nào có tựa gần như vậy mà có dùng Pivot Table, bác cho xin cái link luôn đi!
 
Upvote 0
Thiệt là có bài "Theo dõi công công" hả bác?
Tôi tìm hoài không thấy bài nào có tựa gần như vậy mà có dùng Pivot Table, bác cho xin cái link luôn đi!
Công công đi đến thường là ở "hậu cung", toàn chỗ "đờn bà, con gái", làm sao công khai cái link được.
Híc!!!!!!!!!!!!!!!
 
Upvote 0
Thiệt là có bài "Theo dõi công công" hả bác?
Tôi tìm hoài không thấy bài nào có tựa gần như vậy mà có dùng Pivot Table, bác cho xin cái link luôn đi!
Thì suy luận đoạn sau sẽ rõ (công văn chứ không phải công công) não một đằng tay một nẽo, tôi gõ nhằm mà quyên kiểm tra thôi mà.
Code PivotTble đó cách đây hơn 10 năm rồi, nay code ngắn gọn và có khác hơn xưa.
 
Upvote 0
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.
Bạn ơi, giúp mình thêm tí nữa được không ạ? File bạn làm rất ok nếu trích xuất rồi, tuy nhiên mình cần thêm là: SUM luôn các ds từ 5-9 (giống như consolidate ấy) đối với từng kh và từng quản lý được ko ạ? Giống như hình mình úp ở đây là Sum các ô họ Vin Group của Qly Trương Quang Nhật...
Bài đã được tự động gộp:

Thì suy luận đoạn sau sẽ rõ (công văn chứ không phải công công) não một đằng tay một nẽo, tôi gõ nhằm mà quyên kiểm tra thôi mà.
Code PivotTble đó cách đây hơn 10 năm rồi, nay code ngắn gọn và có khác hơn xưa.
Dạ, bác còn code Pivot không share em nhé!
Em cám ơn
 

File đính kèm

  • HELP GPE.jpg
    HELP GPE.jpg
    66.1 KB · Đọc: 17
  • help 2.jpg
    help 2.jpg
    51.4 KB · Đọc: 11
Lần chỉnh sửa cuối:
Upvote 0
Bạn ơi, giúp mình thêm tí nữa được không ạ? File bạn làm rất ok nếu trích xuất rồi, tuy nhiên mình cần thêm là: SUM luôn các ds từ 5-9 (giống như consolidate ấy) đối với từng kh và từng quản lý được ko ạ? Giống như hình mình úp ở đây là Sum các ô họ Vin Group của Qly Trương Quang Nhật...

Bạn thay code này vào code cũ nhé. thêm dữ liệu và chạy thử.
Mã:
Sub TONGHOP()
Dim dic As Object
  Set dic = CreateObject("Scripting.Dictionary")
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
                If Not dic.Exists(DK) Then
                    t = t + 1
                    dic.Add DK, t
                        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
                Else
                    j = dic.Item(DK)
                    For n = 5 To 9
                        KQ(j, n - 1) = KQ(j, n - 1) + Arr(i, n)
                    Next n
                End If
            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
Set dic = Nothing
MsgBox "XONG"
End Sub
[code]
 

File đính kèm

Upvote 0
Bạn thay code này vào code cũ nhé. thêm dữ liệu và chạy thử.
Mã:
Sub TONGHOP()
Dim dic As Object
  Set dic = CreateObject("Scripting.Dictionary")
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
                If Not dic.Exists(DK) Then
                    t = t + 1
                    dic.Add DK, t
                        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
                Else
                    j = dic.Item(DK)
                    For n = 5 To 9
                        KQ(j, n - 1) = KQ(j, n - 1) + Arr(i, n)
                    Next n
                End If
            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
Set dic = Nothing
MsgBox "XONG"
End Sub
[code]
Chạy code này nó ra lỗi chị ơi, có 1 dòng hiện ra thôi ạ!
 
Upvote 0

File đính kèm

Upvote 0
Chạy code này nó ra lỗi chị ơi, có 1 dòng hiện ra thôi ạ!
Bạn chạy thử file của mình chưa, mình chạy thử file gia định của bạn êm rồi mà. Kiểm tra lại dữ liệu đầu vào bạn nhé, vói lại lưu ý là các điều kiện phân cách nhau bằng dấu ", " ( phảy cách) nhé.
 
Upvote 0
Pivot table xử lý hầu hết các dữ liệu người dùng mong muốn
còn trang trí cho báo cáo thì là chuyện sau khi có được dữ liệu.Tôi đã sử dụng PIvot table hơn 10 năm thấy nó nhanh và chính xác .
 
Upvote 0
Pivot table xử lý hầu hết các dữ liệu người dùng mong muốn
còn trang trí cho báo cáo thì là chuyện sau khi có được dữ liệu.Tôi đã sử dụng PIvot table hơn 10 năm thấy nó nhanh và chính xác .
Pivot có nghĩa là "tổng theo, xếp theo (cái điểm xoay pivot)". Từ "theo" là keyword.

Khi sử dụng Pivot Table là ta cốt sử dụng sự linh động của tính chất các vật thể xoay vòng quanh trụ chống.

Khi sử dụng code, nghe thì ngon lành những thực ra code chung chung là hàng cứng, kết quả chết. Để có được sự linh đọng thì người code phải rất giỏi và rất giàu kinh nghiệm.
 
Upvote 0
Pivot có nghĩa là "tổng theo, xếp theo (cái điểm xoay pivot)". Từ "theo" là keyword.

Khi sử dụng Pivot Table là ta cốt sử dụng sự linh động của tính chất các vật thể xoay vòng quanh trụ chống.

Khi sử dụng code, nghe thì ngon lành những thực ra code chung chung là hàng cứng, kết quả chết. Để có được sự linh đọng thì người code phải rất giỏi và rất giàu kinh nghiệm.
thực ra chúng ta có thể viết code để điều khiển Pivot table. (làm biếng kéo thả) . nhưng để theo yêu cầu của người dùng thì 9 người 10 ý. vì thế nên VBA điều khiển pivot table chi sử dụng cho người cần đúng biểu mẫu họ cần chứ không thể viết sẳn được.
 
Upvote 0
thực ra chúng ta có thể viết code để điều khiển Pivot table. (làm biếng kéo thả) . nhưng để theo yêu cầu của người dùng thì 9 người 10 ý. vì thế nên VBA điều khiển pivot table chi sử dụng cho người cần đúng biểu mẫu họ cần chứ không thể viết sẳn được.
9 người 10 ý chính là lý do tại sao tôi nói cần "rất giỏi và rất giàu kinh nghiệm"
rất giàu kinh nghiệm để nói "ý của mấy người dở bẹt"
rất giỏi để người nghe chịu nghe và không phản đối.
 
Upvote 0
9 người 10 ý chính là lý do tại sao tôi nói cần "rất giỏi và rất giàu kinh nghiệm"
rất giàu kinh nghiệm để nói "ý của mấy người dở bẹt"
rất giỏi để người nghe chịu nghe và không phản đối.
Chết thật, bài 32 tôi viết "Dùng Pivot table thì cần gì code" liệu có bị liệt vào "rất giỏi và rất giàu kinh nghiệm" không nhỉ?
 
Upvote 0
Chết thật, bài 32 tôi viết "Dùng Pivot table thì cần gì code" liệu có bị liệt vào "rất giỏi và rất giàu kinh nghiệm" không nhỉ?
Bạn thuộc dạng "đờn gảy tai trâu". Người ta không hề để ý. (xem câu cuối bài #22, và câu đầu bài #27)
 
Upvote 0
Bạn chạy thử file của mình chưa, mình chạy thử file gia định của bạn êm rồi mà. Kiểm tra lại dữ liệu đầu vào bạn nhé, vói lại lưu ý là các điều kiện phân cách nhau bằng dấu ", " ( phảy cách) nhé.
e thử rồi bác, e gửi bác hình em test @@ hay do máy em nhỉ?
Bài đã được tự động gộp:

Chết thật, bài 32 tôi viết "Dùng Pivot table thì cần gì code" liệu có bị liệt vào "rất giỏi và rất giàu kinh nghiệm" không nhỉ?
Dạ, e đang tìm hiểu bài của bác xem có làm gì được không ạ!
https://www.giaiphapexcel.com/diend...ào-pivot-table-để-lập-báo-cáo-theo-mẫu.47222/
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
e thử rồi bác, e gửi bác hình em test @@ hay do máy em nhỉ?
Bài đã được tự động gộp:


Dạ, e đang tìm hiểu bài của bác xem có làm gì được không ạ!
https://www.giaiphapexcel.com/diendan/threads/Áp-dụng-vba-vào-pivot-table-để-lập-báo-cáo-theo-mẫu.47222/

Đúng rồi, Do cách thử của bạn , hoặc có thể tôi viết code không đúng ý định của bạn
1/Code 1 là tổng hợp toàn bộ những Điều kiện ở 2 ô B8,B9 cứ đúng ĐK là trả về kết quả. Như hình là bạn chỉ có chọn 1 QL C do vậy nó sẽ lấy tất cả QL C ở trong CSDL,
2/Còn code 2 là nó sẽ tổng hợp theo ĐK ở 2 ô trên. nếu chỉ có 1 QL C thì nó sẽ cộng Tất cả các dòng có C theo từng cột tương ứng với DS A, DS B.... Tongcong.Nếu là 2 QL (Vd: A, C) và 3 khách hàng (ví dụ PI PI, Vin Grup, HUNG NHAN,...) thì nó sẽ lọc ra A có mấy PI PI và công lại theo các cột DS A, Ds B ... tương ứng, lọc tiếp đến C cũng như vậy cho đến hết QL thì thôi.

Bây giờ bạn thử lại thế này: Ô B8 bạn nhập 1 hoặc 2 hoặc 3 QL (Vdu: A, B, C)
Ô B9 bạn nhập 1,2,3 4, 5 khách hàng và chạy thử code 2 xem kết quả.
 
Upvote 0
Đúng rồi, Do cách thử của bạn , hoặc có thể tôi viết code không đúng ý định của bạn
1/Code 1 là tổng hợp toàn bộ những Điều kiện ở 2 ô B8,B9 cứ đúng ĐK là trả về kết quả. Như hình là bạn chỉ có chọn 1 QL C do vậy nó sẽ lấy tất cả QL C ở trong CSDL,
2/Còn code 2 là nó sẽ tổng hợp theo ĐK ở 2 ô trên. nếu chỉ có 1 QL C thì nó sẽ cộng Tất cả các dòng có C theo từng cột tương ứng với DS A, DS B.... Tongcong.Nếu là 2 QL (Vd: A, C) và 3 khách hàng (ví dụ PI PI, Vin Grup, HUNG NHAN,...) thì nó sẽ lọc ra A có mấy PI PI và công lại theo các cột DS A, Ds B ... tương ứng, lọc tiếp đến C cũng như vậy cho đến hết QL thì thôi.

Bây giờ bạn thử lại thế này: Ô B8 bạn nhập 1 hoặc 2 hoặc 3 QL (Vdu: A, B, C)
Ô B9 bạn nhập 1,2,3 4, 5 khách hàng và chạy thử code 2 xem kết quả.
dạ vâng, em làm như anh nói thì đúng thế, nhưng cái kết quả em mong muốn là như trong hình đó a! Tức là ô b9 để rỗng thì vẫn lọc hết ra, nhưng sum mấy KH trùng nhau lại
Trên ảnh đầu là code 1, ảnh sau là code 2 mong muốn!
Em cám ơn
 

File đính kèm

  • hekp gpe.jpg
    hekp gpe.jpg
    56.4 KB · Đọc: 14
Upvote 0
dạ vâng, em làm như anh nói thì đúng thế, nhưng cái kết quả em mong muốn là như trong hình đó a! Tức là ô b9 để rỗng thì vẫn lọc hết ra, nhưng sum mấy KH trùng nhau lại
Trên ảnh đầu là code 1, ảnh sau là code 2 mong muốn!
Em cám ơn

Không hiểu ý nên không gặp nhau tại một điểm.
Sửa lại code: Đưa vòng lặp For i lên đầu, và thêm ĐK khách hàng là từng dòng của Dữ liệu vào nếu tìm thấy QL.
Trường hợp B8 rỗng, B9 không rỗng thì bạn tính thế nào? cũng Sum lại những quản lý trùng nhau hay không? Trong code dưới đây mình đã làm là sum lại.

Thay code sau vào
Mã:
Sub TONGHOP()
Dim dic As Object
  Set dic = CreateObject("Scripting.Dictionary")
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 i = 1 To UBound(Arr)
    For h = 0 To Q
        For m = 0 To K
            If Q = 0 Then
                If KHname <> Empty Then DK = Trim(Arr(i, 3)) & 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(Arr(i, 2))
            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)) & Trim(Arr(i, 2))
            If QLname = Empty And KHname <> Empty Then DK = Trim(Arr(i, 3)) & Trim(KH(m))
       
          DK1 = Trim(Arr(i, 3)) & Trim(Arr(i, 2))
         
                If DK1 = DK Then
                    If Not dic.Exists(DK) Then
                        t = t + 1
                        dic.Add DK, t
                            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
                    Else
                        j = dic.Item(DK)
                        For n = 5 To 9
                            KQ(j, n - 1) = KQ(j, n - 1) + Arr(i, n)
                        Next n
                    End If
                End If
           ' Next i
        Next m
Next h
Next i

If t Then
Sheet2.[J11].Resize(t + 10, 9).ClearContents
Sheet2.[J11].Resize(t, 8) = KQ
End If
Set dic = Nothing
MsgBox "XONG"
End Sub
[Code]
 
Upvote 0
Không hiểu ý nên không gặp nhau tại một điểm.
Sửa lại code: Đưa vòng lặp For i lên đầu, và thêm ĐK khách hàng là từng dòng của Dữ liệu vào nếu tìm thấy QL.
Trường hợp B8 rỗng, B9 không rỗng thì bạn tính thế nào? cũng Sum lại những quản lý trùng nhau hay không? Trong code dưới đây mình đã làm là sum lại.

Thay code sau vào
Mã:
Sub TONGHOP()
Dim dic As Object
  Set dic = CreateObject("Scripting.Dictionary")
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 i = 1 To UBound(Arr)
    For h = 0 To Q
        For m = 0 To K
            If Q = 0 Then
                If KHname <> Empty Then DK = Trim(Arr(i, 3)) & 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(Arr(i, 2))
            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)) & Trim(Arr(i, 2))
            If QLname = Empty And KHname <> Empty Then DK = Trim(Arr(i, 3)) & Trim(KH(m))
      
          DK1 = Trim(Arr(i, 3)) & Trim(Arr(i, 2))
        
                If DK1 = DK Then
                    If Not dic.Exists(DK) Then
                        t = t + 1
                        dic.Add DK, t
                            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
                    Else
                        j = dic.Item(DK)
                        For n = 5 To 9
                            KQ(j, n - 1) = KQ(j, n - 1) + Arr(i, n)
                        Next n
                    End If
                End If
           ' Next i
        Next m
Next h
Next i

If t Then
Sheet2.[J11].Resize(t + 10, 9).ClearContents
Sheet2.[J11].Resize(t, 8) = KQ
End If
Set dic = Nothing
MsgBox "XONG"
End Sub
[Code]
Dạ, quản lý thì ko sum, chỉ sum khách hàng thôi a, e đang thử lại code a! em cám ơn
 
Upvote 0
Không hiểu ý nên không gặp nhau tại một điểm.
Sửa lại code: Đưa vòng lặp For i lên đầu, và thêm ĐK khách hàng là từng dòng của Dữ liệu vào nếu tìm thấy QL.
Trường hợp B8 rỗng, B9 không rỗng thì bạn tính thế nào? cũng Sum lại những quản lý trùng nhau hay không? Trong code dưới đây mình đã làm là sum lại.

Thay code sau vào
Mã:
Sub TONGHOP()
Dim dic As Object
  Set dic = CreateObject("Scripting.Dictionary")
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 i = 1 To UBound(Arr)
    For h = 0 To Q
        For m = 0 To K
            If Q = 0 Then
                If KHname <> Empty Then DK = Trim(Arr(i, 3)) & 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(Arr(i, 2))
            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)) & Trim(Arr(i, 2))
            If QLname = Empty And KHname <> Empty Then DK = Trim(Arr(i, 3)) & Trim(KH(m))
      
          DK1 = Trim(Arr(i, 3)) & Trim(Arr(i, 2))
        
                If DK1 = DK Then
                    If Not dic.Exists(DK) Then
                        t = t + 1
                        dic.Add DK, t
                            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
                    Else
                        j = dic.Item(DK)
                        For n = 5 To 9
                            KQ(j, n - 1) = KQ(j, n - 1) + Arr(i, n)
                        Next n
                    End If
                End If
           ' Next i
        Next m
Next h
Next i

If t Then
Sheet2.[J11].Resize(t + 10, 9).ClearContents
Sheet2.[J11].Resize(t, 8) = KQ
End If
Set dic = Nothing
MsgBox "XONG"
End Sub
[Code]
Code này chạy rất ok anh nhé, cám ơn anh!
Sẵn em đang làm cách 2 Pivot Table, nhưng gặp 1 số vấn đề sau, mong các anh giúp đỡ luôn ạ!
1. Trình bày trong Pivot như 1 báo cáo thông thường sếp yêu cầu quả thật hơi khó với em, mò mãi cũng chưa tới đâu, vậy không biết có tài liệu hay topic nào hướng dẫn về cái này không ạ?
2. Nhờ mọi người giúp em vướng mắc về trình bày theo file theo up lên ạ?
3. Không biết có cách nào dạng như copy pivot hay dựa vào pivot rồi tham chiếu qua form mình yêu cầu không, để khi data đổi => pivot đổi => báo cáo đổi theo ạ!
4. Em sử dụng chức năng chụp ảnh excel để khỏi phải insert thêm 1 pivot (vì dữ liệu tương tự), có điều cần 1 báo cáo chi tiết và 1 báo cáo rút gọn. Tuy nhiên khi em expain pivot ra thì hình ảnh ban đầu cũng đổi theo, vậy có cách nào cố định hình không ạ? (Như file đính kèm)
Em cám ơn!
 

File đính kèm

Upvote 0
Code này chạy rất ok anh nhé, cám ơn anh!
Sẵn em đang làm cách 2 Pivot Table, nhưng gặp 1 số vấn đề sau, mong các anh giúp đỡ luôn ạ!
1. Trình bày trong Pivot như 1 báo cáo thông thường sếp yêu cầu quả thật hơi khó với em, mò mãi cũng chưa tới đâu, vậy không biết có tài liệu hay topic nào hướng dẫn về cái này không ạ?
2. Nhờ mọi người giúp em vướng mắc về trình bày theo file theo up lên ạ?
3. Không biết có cách nào dạng như copy pivot hay dựa vào pivot rồi tham chiếu qua form mình yêu cầu không, để khi data đổi => pivot đổi => báo cáo đổi theo ạ!
4. Em sử dụng chức năng chụp ảnh excel để khỏi phải insert thêm 1 pivot (vì dữ liệu tương tự), có điều cần 1 báo cáo chi tiết và 1 báo cáo rút gọn. Tuy nhiên khi em expain pivot ra thì hình ảnh ban đầu cũng đổi theo, vậy có cách nào cố định hình không ạ? (Như file đính kèm)
Em cám ơn!
Nói thật là mình không có nhiều kiến thức về Pivot Table nên không giúp được bạn.
Bạn cứ đăng vấn đề cần giúp lên diễn đàn là sẽ có người ra tay thội. Theo dõi trên diễn đàn mình thấy có Anh PTM, anh Batman, anh Befain, anh HieuCD, anh Maika, hoangtuan, binbo, be-09,.... và một số anh, chị em nữa mình không nhớ hết, rất rất giỏi về VBA nói riêng và Pivot Table nói chung.
 
Upvote 0
Dạ, e đưa lên để mọi người xem giúp ạ!
 
Upvote 0
Dạ, e đưa lên để mọi người xem giúp ạ!
Có vài thành viên hay xỉa xói, móc ngéo nên lúc này tôi ít vào xem và viết bài lắm. Nhưng đã 15 ngày mà không thấy ai giúp để hoàn thiện, đưa cái File với cái PivotTable mong muốn lên đi tôi nghiên cứu làm giúp cho.
 
Upvote 1
Có vài thành viên hay xỉa xói, móc ngéo nên lúc này tôi ít vào xem và viết bài lắm. Nhưng đã 15 ngày mà không thấy ai giúp để hoàn thiện, đưa cái File với cái PivotTable mong muốn lên đi tôi nghiên cứu làm giúp cho.
dạ, em cám ơn anh!
Em up file lên để mọi người giúp em ạ! Em có ghi chú ổ sheet Nhu cầu ạ!
Em cám ơn!
 

File đính kèm

Upvote 0

Bài viết mới nhất

Back
Top Bottom