Tối ưu code (đã Record Macro...) và viết code ẩn, hiện dòng trống.

Liên hệ QC

nguyen6571gpex

Thành viên thường trực
Tham gia
22/4/11
Bài viết
254
Được thích
71
Nghề nghiệp
Dạy học
Chào tất cả các bạn!
Mình làm file để giáo viên chấm điểm, tổng hợp kết quả học tập của học sinh. Nhờ các bạn giúp một số vấn đề khó khăn như sau:
1. Việc coppy danh sách vào các sheet chấm điểm và coppy điểm vào sheet tổng hợp mình Record Macro nhờ các bạn tối ưu code giúp.
2. Trong các sheet thì danh sách học sinh các lớp là không giống nhau nên các bạn giúp code ẩn, hiện dòng trống (mình đã tìm hiểu trên diễn đàn và làm nhưng không được)
3. Phần điểm bằng chữ mình phải qua 3 cột phụ (làm tròn, đọc số thành chữ) nên máy chạy rất chậm mà giáo viên đại trà thì không sử dụng được Add-in. Vậy có cách nào khắc phục cho nhẹ máy mà giáo viên vẫn sử dụng được mong các bạn giúp.
4. Phần tổng hợp chi tiết ở các sheet cũng hoàn toàn sử dụng công thức nên cũng gây chậm máy, có cách nào tổng hợp cho nhẹ máy hơn mong các bạn giúp.
Chúc các bạn ngày Tết Đoan Ngọ luôn mạnh khỏe, tràn đầy niềm vui. Trân trọng!
 

File đính kèm

  • Phieu cham bai_2021-2022.xls
    589.5 KB · Đọc: 8
Chào tất cả các bạn!
Mình làm file để giáo viên chấm điểm, tổng hợp kết quả học tập của học sinh. Nhờ các bạn giúp một số vấn đề khó khăn như sau:
1. Việc coppy danh sách vào các sheet chấm điểm và coppy điểm vào sheet tổng hợp mình Record Macro nhờ các bạn tối ưu code giúp.
2. Trong các sheet thì danh sách học sinh các lớp là không giống nhau nên các bạn giúp code ẩn, hiện dòng trống (mình đã tìm hiểu trên diễn đàn và làm nhưng không được)
3. Phần điểm bằng chữ mình phải qua 3 cột phụ (làm tròn, đọc số thành chữ) nên máy chạy rất chậm mà giáo viên đại trà thì không sử dụng được Add-in. Vậy có cách nào khắc phục cho nhẹ máy mà giáo viên vẫn sử dụng được mong các bạn giúp.
4. Phần tổng hợp chi tiết ở các sheet cũng hoàn toàn sử dụng công thức nên cũng gây chậm máy, có cách nào tổng hợp cho nhẹ máy hơn mong các bạn giúp.
Chúc các bạn ngày Tết Đoan Ngọ luôn mạnh khỏe, tràn đầy niềm vui. Trân trọng!
Góp ý chút, học sinh nên có mã số riêng biệt quản lý danh sách kiểm này dễ bị nhầm thông tin lắm nghe. Code bạn record thì sẽ phát sinh rất nhiều thứ không cần thiết bạn phải xóa những cái râu ria kia, để vậy chạy rất chậm. Hiện tại mình chưa rảnh nên sửa lại đoạn code Laydanhsach cho bạn, những cái khác áp dụng tương tự. Nếu vẫn không được nửa thì chiều tôi sẽ giúp. Với dữ liệu như thế mà code của bạn chạy sẽ rất rất rất chậm luôn, sau khi sửa lại tôi bảo đảm file của bạn chạy như gió.
Mã:
Sub Laydanhsach()
    Dim ArrDS(), i As Integer
    Application.Calculation = xlCalculationManual
    ArrDS = Array("Toan", "Doc", "Viet", "TA", "T+TV", "TH_TA", "Tin", "Khoa", "LS-DL", _
                    "PCNL1", "PCNL2", "M.hoc", "HTCTLH1", "HTCTLH2", "TNTV", "OlympicToan", "IOE")

    For i = 0 To UBound(ArrDS)
        If i < 4 Then
            Sheets(ArrDS(i)).Range("B5:B49").Value = Sheets("DS").Range("Q5:Q49").Value
        Else
            Sheets(ArrDS(i)).Range("B5:D49").Value = Sheets("DS").Range("Q5:S49").Value
        End If
    Next
    Application.Calculation = xlCalculationAutomatic
End Sub
 
3. Phần điểm bằng chữ mình phải qua 3 cột phụ (làm tròn, đọc số thành chữ) nên máy chạy rất chậm mà giáo viên đại trà thì không sử dụng được Add-in. Vậy có
Bạn có nhiều lựa chọn:

1. Thêm hàm DOCSO vào.

2. Lập Bảng dò rồi dùng VLOOKUP để đọc. (Với trường hợp cụ thể của bạn => chỉ cần 10 dòng)
 
Góp ý chút, học sinh nên có mã số riêng biệt quản lý danh sách kiểm này dễ bị nhầm thông tin lắm nghe. Code bạn record thì sẽ phát sinh rất nhiều thứ không cần thiết bạn phải xóa những cái râu ria kia, để vậy chạy rất chậm. Hiện tại mình chưa rảnh nên sửa lại đoạn code Laydanhsach cho bạn, những cái khác áp dụng tương tự. Nếu vẫn không được nửa thì chiều tôi sẽ giúp. Với dữ liệu như thế mà code của bạn chạy sẽ rất rất rất chậm luôn, sau khi sửa lại tôi bảo đảm file của bạn chạy như gió.
Mã:
Sub Laydanhsach()
    Dim ArrDS(), i As Integer
    Application.Calculation = xlCalculationManual
    ArrDS = Array("Toan", "Doc", "Viet", "TA", "T+TV", "TH_TA", "Tin", "Khoa", "LS-DL", _
                    "PCNL1", "PCNL2", "M.hoc", "HTCTLH1", "HTCTLH2", "TNTV", "OlympicToan", "IOE")

    For i = 0 To UBound(ArrDS)
        If i < 4 Then
            Sheets(ArrDS(i)).Range("B5:B49").Value = Sheets("DS").Range("Q5:Q49").Value
        Else
            Sheets(ArrDS(i)).Range("B5:D49").Value = Sheets("DS").Range("Q5:S49").Value
        End If
    Next
    Application.Calculation = xlCalculationAutomatic
End Sub
Xin trân trọng cảm ơn bạn! Xin lỗi đã để bạn chờ lâu.
Mình đã chạy code của bạn và tốc độ chạy rất nhanh. Vì mình không biết ngôn ngữ VBA mà chỉ tự đọc và Record tất cả các code nên ra như vậy. Nhờ bạn giúp các nội dung còn lại. Trân trọng!
Bài đã được tự động gộp:

Bạn có nhiều lựa chọn:

1. Thêm hàm DOCSO vào.

2. Lập Bảng dò rồi dùng VLOOKUP để đọc. (Với trường hợp cụ thể của bạn => chỉ cần 10 dòng)
Trân trọng cảm ơn bạn!
Như #1 đã nói, nếu dùng hàm DOCSO thì phải cài đặt mà file này chuyển cho giáo viên làm nên không hướng dẫn giáo viên được. Còn dùng VLOOKUP cũng là một hướng giải quyết và mình làm được. Giúp mình các nội dung còn lại nhé. Cảm ơn bạn nhiều!
 
Lần chỉnh sửa cuối:
Xin trân trọng cảm ơn bạn! Xin lỗi đã để bạn chờ lâu.
Mình đã chạy code của bạn và tốc độ chạy rất nhanh. Vì mình không biết ngôn ngữ VBA mà chỉ tự đọc và Record tất cả các code nên ra như vậy. Nhờ bạn giúp các nội dung còn lại. Trân trọng!
Bài đã được tự động gộp:


Trân trọng cảm ơn bạn!
Như #1 đã nói, nếu dùng hàm DOCSO thì phải cài đặt mà file này chuyển cho giáo viên làm nên không hướng dẫn giáo viên được. Còn dùng VLOOKUP cũng là một hướng giải quyết và mình làm được. Giúp mình các nội dung còn lại nhé. Cảm ơn bạn nhiều!
Tôi đã sửa một số chổ theo yêu cầu ở #1, bạn xem thử đã đúng yêu cầu của mình chưa? Những chổ khác tôi để cho bạn tập sửa cho quen. Sau khi sửa bạn sẽ thấy tốc độ nhanh hơn nhiều.
 

File đính kèm

  • Phieu cham bai_2021-2022.xls
    539.5 KB · Đọc: 8
ArrDS = Array("Toan", "Doc", "Viet", "TA", "T+TV", "TH_TA", "Tin", "Khoa", "LS-DL", _
"PCNL1", "PCNL2", "M.hoc", "HTCTLH1", "HTCTLH2", "TNTV", "OlympicToan", "IOE")
For i = 0 To UBound(ArrDS)
If i < 4 Then
Sheets(ArrDS(i)).Range("B5:B49").Value = Sheets("DS").Range("Q5:Q49").Value
Else
Sheets(ArrDS(i)).Range("B5:D49").Value = Sheets("DS").Range("Q5:S49").Value
End If
Next
End Sub
[/code]

Dim src
src = Sheets("DS").Range("Q5:Q49").Value
For Each shN In Array("Toan", "Doc", "Viet", "TA")
Sheets(shN).Range("B5:B49").Value = src
Next shN
src = Sheets("DS").Range("Q5:S49").Value
For Each shN In Array("T+TV", "TH_TA", "Tin", "Khoa", "LS-DL", "PCNL1", "PCNL2", "M.hoc", "HTCTLH1", "HTCTLH2", "TNTV", "OlympicToan", "IOE")
Sheets(shN).Range("B5: D49").Value = src
Next shN
Code trông dài hơn, nhưng thực ra hữu hiệu hơn.

Muốn ngắn:
src = Sheets("DS").Range("Q5:S49").Value
i = 0
For Each shN In Array("Toan", "Doc", "Viet", "TA", "T+TV", "TH_TA", "Tin", "Khoa", "LS-DL", _
"PCNL1", "PCNL2", "M.hoc", "HTCTLH1", "HTCTLH2", "TNTV", "OlympicToan", "IOE")
Sheets(shN).Range(IIF(i < 4, "B5:B49", "B5: D49").Value = src
i = i + 1
Next shN
 
Trân trọng cảm ơn tất cả các bạn! Mình sẽ hoàn thiện dần, có khó khăn gì không giải quyết được lại nhờ các bạn giúp.
 
Web KT
Back
Top Bottom