Nhờ các cao thủ vba tối ưu code này hoặc có pp nào tối ưu hơn giúp! (1 người xem)

Liên hệ QC

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

Duong_VBA

Thành viên chính thức
Tham gia
10/11/07
Bài viết
89
Được thích
26
Mục tiêu là: Copy tên ở sheel DSHS và toàn bộ điểm tương ứng tên ở các Sheel còn lại vào sheel SO_CN (Nhấn nut Copy ở sheel SO_CN)-Xem file đính kém
Tuy nhiên quá trình Copy quá lâu (Trong file để 5 HS thì nhanh chứ từ 30 HS trở lên thì quá lâu). Nhờ các cao thủ tối ưu code VBA này, cảm ơn!
 

File đính kèm

Bạn thêm Application.ScreenUpdating=False ở đầu Sub CopyTen() và Application.ScreenUpdating=True ở cuối Sub. Chắc sẽ tiết kiệm vài giây.
 
Upvote 0
Mục tiêu là: Copy tên ở sheel DSHS và toàn bộ điểm tương ứng tên ở các Sheel còn lại vào sheel SO_CN (Nhấn nut Copy ở sheel SO_CN)-Xem file đính kém
Tuy nhiên quá trình Copy quá lâu (Trong file để 5 HS thì nhanh chứ từ 30 HS trở lên thì quá lâu).

2uá trình chạy macro còn tùy thuộc vô cấu trúc file của bạn nữa.
Nếu là mính thì các trang nên bỏ bớt các công thức không cần thiết, như điền số thứ tự,. . .

CSDL của bạn còn thiếu 1 cột quan trọng là mã học viên (duy nhất) & thừa cột "khối", . . .


Để cải thiện tốc độ xử lí, trên diễn đàn hay gợi í xài mảng;

Để làm được việc này, bạn cần kết cấu lại CSDL; Chuyện này quả là đồ sộ
với 1 người nào khác ngoài bạn!

. . . . . .
 
Upvote 0
Giải thuật của bạn không phù hợp với cơ cấu. Dẫu có chỉnh sửa code cũng không thể nhanh.
Bạn phải xem lại toàn bộ cách sắp xếp dữ liệu.
Một khi cách xếp dữ liệu trên các bảng đã thống nhất rồi thì bạn có thể dùng giải thuật sau:
1. Lập một sheet tạm (STam)
2. Đọc từng sheet dữ liệu: copy vùng dữ liệu sang STam; ghi tên sheet vào cột cuối cùng
3. sort STam theo tên và môn học
4. đọc STam, tổng kết kết quả và ghi vào sheet kết quả
5. xoá STam

Nếu bạn muốn, có thể dùng ADO để thực hiện các bước 1-4 trên.

Cách khác (ví dụ bạn có mã thống nhất cho các môn học, toán=1, văn=2,...)
1. lập một array ứng với số môn, phần tử 1 ứng với toán, 2 ứng với văn,...
2. lập một dictionary
3. đọc bảng tên, ghi dictionary với key là tên, và value là array trống
4. đọc dữ liệu từng sheet, dùng tên làm key để lấy value và dùng tên sheet để chọn phần tử cập nhật điểm
5. duyệt dictionary, ghi kết quả vào sheet kết quả.

(*) đừng dùng tiếng "cao thủ". Tôi đọc thấy từ này tôi mắc cở lắm. Mắc cở cho tôi chưa xứng đáng và đồng thời cũng mắc cở cho cái tính chất nịnh bợ của từ này.
 
Upvote 0
Một khi thiết kế lại trang tính

/(/ữa gy với 45 em học sinh.

Fải nói tính kiên trì của mình vẫn còn không ít!
 

File đính kèm

Upvote 0

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

Back
Top Bottom