Nhờ tạo macro đưa điểm bộ môn vào danh sách điểm chung (1 người xem)

Liên hệ QC

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

titanic20072007

Thành viên thường trực
Tham gia
10/7/07
Bài viết
217
Được thích
8
Nghề nghiệp
Giáo viên
Chào các bạn. Mình có một tệp chứa điểm thi gồm 2 sheet DS chung và DS tiếng Anh mình đang làm một macro để khi chạy nó tự đưa điểm môn Anh của từng HS theo số báo danh vào danh sách chung sao cho đúng (ở DS chung học sinh được xếp theo ABC trong toàn khối còn ở DS tiếng Anh thì lại xếp ABC trong những lớp học chưng trình cũ và chương trình thí điểm). Mình không sao điều khiển biến để nó đó đọc và điền chính xác được. Mong các bạn giúp với. Cảm ơn.
Đây là tệp dữ liệu chuẩn:
 

File đính kèm

Chào các bạn. Mình có một tệp chứa điểm thi gồm 2 sheet DS chung và DS tiếng Anh mình đang làm một macro để khi chạy nó tự đưa điểm môn Anh của từng HS theo số báo danh vào danh sách chung sao cho đúng (ở DS chung học sinh được xếp theo ABC trong toàn khối còn ở DS tiếng Anh thì lại xếp ABC trong những lớp học chưng trình cũ và chương trình thí điểm). Mình không sao điều khiển biến để nó đó đọc và điền chính xác được. Mong các bạn giúp với. Cảm ơn.
Đây là tệp dữ liệu chuẩn:
Bạn gán thử code này vào Rectangle "Đưa điểm vào ds chung" rồi chạy xem sao
Mã:
Public Sub GanDiem()
    Dim Vung, I, d, Gan
    Set d = CreateObject("scripting.dictionary")
    Vung = Range([A9], [A50000].End(xlUp)).Resize(, 9)
        For I = 1 To UBound(Vung)
            If Vung(I, 1) <> "" Then
                If IsNumeric(Vung(I, 1)) Then d.Add Vung(I, 2), Vung(I, 9)
            End If
        Next I
            Set Gan = Sheets("DS chung").Range(Sheets("DS chung").[B9], Sheets("DS chung").[B5000].End(xlUp))
                For I = 1 To Gan.Rows.Count
                    If d.exists(Gan(I).Value) Then Gan(I).Offset(, 7).Value = d.Item(Gan(I).Value)
                Next I
End Sub
Thân
 
Upvote 0
Sô BD là số, và có tính chất liên tục. Vì vậy bài này có thể trực tiếp dùng thẳng mảng để ghi dữ liệu đọc mà không cần tới Dictionary.
Có tất cả khoảng 120 HS, cho nên chỉ cần mảng 200 phần tử là biểu hiện đủ.
 
Upvote 0
Bạn gán thử code này vào Rectangle "Đưa điểm vào ds chung" rồi chạy xem sao
Mã:
Public Sub GanDiem()
    Dim Vung, I, d, Gan
    Set d = CreateObject("scripting.dictionary")
    Vung = Range([A9], [A50000].End(xlUp)).Resize(, 9)
        For I = 1 To UBound(Vung)
            If Vung(I, 1) <> "" Then
                If IsNumeric(Vung(I, 1)) Then d.Add Vung(I, 2), Vung(I, 9)
            End If
        Next I
            Set Gan = Sheets("DS chung").Range(Sheets("DS chung").[B9], Sheets("DS chung").[B5000].End(xlUp))
                For I = 1 To Gan.Rows.Count
                    If d.exists(Gan(I).Value) Then Gan(I).Offset(, 7).Value = d.Item(Gan(I).Value)
                Next I
End Sub
Thân
Cảm ơn concogia. Mình đã test thử thấy code chạy nhanh và cho kq chính xác. Bạn có thể giải thích cách lệnh bạn đã sử dụng được không để mình có thể vận dụng được không. Mình mới làm quen với vba nên những lệnh chỉ mới hieur được mấy lệnh cơ bản.
 
Upvote 0
If d.exists(Gan(I).Value) Then Gan(I).Offset(, 7).Value = d.Item(Gan(I).Value)
Dòng lệnh trên có phải là lệnh gán dữ liệu vào trang DS chung không? Số 7 có nghĩa là gì?
 
Upvote 0
If d.exists(Gan(I).Value) Then Gan(I).Offset(, 7).Value = d.Item(Gan(I).Value)
Dòng lệnh trên có phải là lệnh gán dữ liệu vào trang DS chung không? Số 7 có nghĩa là gì?
Đúng, số 7 là từ cột - Số báo danh - nhảy cà tưng về phía bên phải 7 cột đến cột - điểm của môn Anh, gán diểm bên sheet "Ds tiếng Anh" vào
Muốn hiểu code này bạn nên tìm hiểu sơ về Dictionary, có rất nhiều trên diễn đàn
Thân
 
Upvote 0

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

Back
Top Bottom