Cần giúp công thức VBA cho báo cáo

  • Thread starter Thread starter oshi
  • Ngày gửi Ngày gửi
Liên hệ QC

oshi

Thành viên chính thức
Tham gia
5/5/09
Bài viết
51
Được thích
1
Dear các anh chị,

Các anh chị giúp em làm code cho case trong file đính kèm (em chỉ lấy ví dụ). File của em khoảng 200.000 dòng.
Có cách nào dùng Power Pivot hay phải tạo VBA thì cũng được ạ.
Hiện tại em dùng Pivot thường thì ko ra báo cáo theo tuần mà dùng sumproduct thì quá chậm, hay bị treo máy.

Dữ liệu đầu vào:

Dept CodeSect CodeLine CodeEmp NOEmployee NameEmp TypePosition NameDateWeekShift CodeWork MinutesLate/EarlyAct.OTApp.OT
Theo từng nhân viên, từng ngày.


Mong muốn output:

1. Đếm số người trên từng sect code có:
Số giờ làm trong tuần là x
a. x <48 tiếng.
b. 48<x <= 60 tiếng.
c. 60<x<=64 tiếng.
d. 64<x <=70 tiếng.
e. x>70 tiếng.
223850

File workout đính kèm.
 

File đính kèm

Có sư phụ nào vào giải cứu giúp em :-/
 
Upvote 0
Cái sheet "Tháng HT" nhìn sao nó thừa quá.
Không biết còn mục đích khác không, nếu chỉ để sử dụng cho Sheet2 thì không cần sheet "Tháng HT". Ví dụ công thức sau tại Sheet2, D4:
Mã:
=SUMIFS(Công!$AD$3:$AD$31,Công!$B$3:$B$31,$B4,Công!$I$3:$I$31,">=03/06/2019",Công!$I$3:$I$31,"<=09/06/2019")
Sẽ tính tổng giờ công trong 1 khoảng thời gian. Nếu muốn đưa vào nhóm nào thì thêm điều kiện. Như vậy không liên quan đến sheet "Tháng HT" vẫn tính được kết quả ở Sheet2.
Chưa rõ mục đích bạn chia ra 5 tuần, mỗi tuần chia ra 6 nhóm làm gì? Vì mỗi tuần chỉ đếm được 1 giá trị là 1 đến 6, vậy không cần chia 6 nhóm mà chỉ cần trả về số nhóm là được.
Vì file tô màu nhiều và cảnh báo "200.000 dòng" nên mọi người hơi ngán.
Xem lại các vấn đề trên rồi ... bàn tiếp.
 
Upvote 0
Do đó, em ko thể dùng công thức excel như sumproduct, sumifs... (vì quá chậm, mất nhiều thời gian chạy - đôi khi còn error).

Sheet Tháng HT là sheet tổng hợp công theo tuần từ file data là sheet Công.

Em muốn làm cách nào đó để cook từ sheet công lên sheet báo cáo nhiều màu đó luôn.

Kết quả:
- Tổng số người trên 1 dept theo từng tuần/
Số người có số giờ làm trong tuần là x
a. x <48 tiếng. (người làm ít hơn 48 tiếng/ tuần)
b. 48<x <= 60 tiếng. (người làm từ 48 đến dưới, = 60 tiếng/ Tuần)
c. 60<x<=64 tiếng. (người làm từ 60 đến dưới, = 64 tiếng/ Tuần)
d. 64<x <=70 tiếng. (người làm từ 64 đến dưới, = 70 tiếng/ tuần)
e. x>70 tiếng. (người có số giờ làm lớn hơn 70 tiếng/ tuần)

Ps: việc xác định tuần thì em dùng hàm weeknum.

Ngoài ra em sau khi xác định được số giờ làm việc của họ theo ngày, theo weeknum, đã sử dụng pivot để xác định:

1 nhân viên làm được 1 tuần tổng cộng bao nhiêu giờ (ví dụ cho cả tháng: W31, W32, W33, W34).

Còn file thì chắc chắn là trên 200.000 dòng.
Bài đã được tự động gộp:

Cái sheet "Tháng HT" nhìn sao nó thừa quá.
Không biết còn mục đích khác không, nếu chỉ để sử dụng cho Sheet2 thì không cần sheet "Tháng HT". Ví dụ công thức sau tại Sheet2, D4:
Mã:
=SUMIFS(Công!$AD$3:$AD$31,Công!$B$3:$B$31,$B4,Công!$I$3:$I$31,">=03/06/2019",Công!$I$3:$I$31,"<=09/06/2019")
Sẽ tính tổng giờ công trong 1 khoảng thời gian. Nếu muốn đưa vào nhóm nào thì thêm điều kiện. Như vậy không liên quan đến sheet "Tháng HT" vẫn tính được kết quả ở Sheet2.
Chưa rõ mục đích bạn chia ra 5 tuần, mỗi tuần chia ra 6 nhóm làm gì? Vì mỗi tuần chỉ đếm được 1 giá trị là 1 đến 6, vậy không cần chia 6 nhóm mà chỉ cần trả về số nhóm là được.
Vì file tô màu nhiều và cảnh báo "200.000 dòng" nên mọi người hơi ngán.
Xem lại các vấn đề trên rồi ... bàn tiếp.
Em sẽ thử cả cách này :D
 
Upvote 0
Dear all,

Em vẫn đang vật lộn với công thức 200.000 dòng. anh chị có cách nào để em workout bằng VBA thì tốt quá, em cám ơn. Tất cả các hàm excel sử dụng đều rắt rất chậm.
 
Upvote 0
Ôi anh chị ơi :D
các cao thủ vào chỉ giáo cho em với. dùng Power pivot hay accesss hay VBA đây ạ ????
Hoặc có gì làm anh chị chưa hiểu thì để em giải thích ạ ?
 
Upvote 0
Mình có thêm 1 ít dữ liệu để làm
Bạn có thể tải về máy, kéo lại link giữa report với data rồi test thử nhé
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vâng em cám ơn ạ. Em sẽ thử test luôn ạ.
 
Upvote 0
Web KT

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

Back
Top Bottom