Giúp code do tìm điểm theo mã số học sinh

tranaidh

Thành viên mới
Hiện tại trường em có tổ chức kiểm tra học ky tập trung 9 môn học. Sau khi kiểm tra xong việc lọc điểm vào các lớp rất mất thời gian nếu làm thủ công. Vì vậy em nhờ mọi người giúp em code làm sao để có thể lấy điểm từ bảng điểm kiểm kiểm tra toàn khối vào cột ĐĐGck lớp theo mã số học sinh ạ.
Em xin chân tânhf cảm ơn.
 

Binana

Thành viên
Vẫn chưa hiểu lắm ý đồ của anh lắm. Anh có thể nói cụ thể hơn xíu được không?
 

tuhocvba

Administrator
Thành viên BQT
Bạn có thể bớt chút thời gian để trình bày lại cho dễ hiểu không ạ?
  • Nếu bạn không biết cách upload ảnh lên diễn đàn, bạn vui lòng tham khảo topic sau: .
  • Bạn lưu ý phải sử dụng thẻ Code khi viết code trên forum. Xin xem mục 4 trong .
  • Bạn nên nói rõ Input là gì? Output muốn ra sao?
  • Bạn nên có file demo. Bạn có thể upload file lên google drive hoặc mediafire.com rồi dẫn link về diễn đàn.

Một bài viết trình bày dễ hiểu là một bài viết sử dụng hình minh họa trực quan. Một bài viết chỉ toàn chữ sẽ khiến người khác không muốn đọc.

Một bài viết dễ hiểu sẽ giảm thiểu thời gian đọc hiểu cho người khác, bạn sẽ nhanh chóng nhận được hỗ trợ nếu bài viết của bạn là một bài viết dễ hiểu.
Chúng tôi mong bạn hiểu và hợp tác.
 

tranaidh

Thành viên mới
Trường mình kiểm tra HK tập trung, điểm kiểm tra dc bộ phận làm điểm nhâp điểm nhập vào file Excel (như file mẫu mình đã gửi vào link). Sau đó bộ phận làm điểm phải lọc danh sách theo lớp và đưa điểm vào từng lớp (file mẫu của lớp mình cũng có trong link). Vì trường minh rất nhiều lớp mà làm như vậy rất mất thời gian và có thể nhầm lẫn. Nên mình muốn mọi người giúp mình làm một Tool mà có thể twj động đưa điểm kiểm tra 9 môn tập trung như trong file "Điêm kiểm tra khối 10" vào các lớp và vào cột ĐĐGck (ĐIểm đánh giá cuối kỳ) dựa vào cột Mã học sinh.
Đây là mẫu file điểm kiểm tra học Kỳ
Bạn cần đăng nhập để thấy hình ảnh


Đây là file điểm của một lớp (trong một file có nhiều môn) Mình muốn lấy điểm kiểm tra HK ở trên đưa vào cột đánh giá cuối kỳ.

Bạn cần đăng nhập để thấy hình ảnh


Link file:
Mình cảm ơn mọi người ạ
 

tuhocvba

Administrator
Thành viên BQT
Theo mô tả thì bạn có file input là file chứa điểm toàn khối. File này chỉ có một sheet.
Bạn cần đăng nhập để thấy hình ảnh

Sau đó macro lọc theo lớp ra thành các file. Ví dụ file lớp 10A. File lớp 10B.
Các file này chứa nhiều sheet, mỗi sheet là một môn học, ví dụ toán, lý, hóa.
Tuy nhiên bạn cần mô tả rõ hơn. Tại sao file Output lại có các hạng mục TX1, TX2,... chúng là cái gì.
Tóm lại dữ liệu của input được thể hiện ở output cụ thể như thế nào. Hãy lấy ví dụ một em học sinh cụ thể. Điểm số của em ấy đang là gì. Sau đó thể hiện ra output trông như thế nào.
Không hiểu logic thì không code được, hãy đứng trên lập trường của người đọc, đa phần là không có chuyên môn công việc của bạn, do đó cần mô tả sao cho dễ hiểu, sử dụng ví dụ và hình ảnh minh họa.
 

tranaidh

Thành viên mới
ý em là file sổ_điểm_các_môn_lớp là file cần fill điểm (input), file chứa điểm là file xuất điểm (output). Code có thể là một Tool (addin), khi mình mở file sổ_điểm_các_môn_lớp lên và chạy code thì điểm từ file điểm toàn khối tự động chạy vào cột điểm ĐĐGck (cột J) (Dạng giống VLOOKUP; Theo mã học sinh) tất cả 9 môn ở trong file sổ_điểm_các_môn_lớp (Các môn: Toán, Lý, Hoá, Sinh, Văn, Sử, Địa, Ngoại ngữ, GDCD) 3 môn còn lại không cần.
Bạn cần đăng nhập để thấy hình ảnh


TX1, TX2, TX3, TX4 và ĐĐGgk là điểm giáo viên vào hàng ngày.
ĐĐGck: điểm này do nhóm làm điểm thực hiện sau khi có điểm kiểm tra HK .
Em mô tả công việc nhóm phải làm:
+ Sau khi Học sinh kiểm tra xong nhóm ghép phách và nhập điểm vào file điểm toàn khối và công bố cho học sinh.
+ Tiếp theo nhóm làm điểm lọc điểm ở file điểm kiểm tra toàn khối theo đúng danh sách của từng lớp và copy và paste điểm vào file điểm các môn của từng lớp. (Giai đoạn này rất mất thời gian và dẽ nhầm vì quá nhiều lớp)

Em xin lỗi vì không giải thích rõ ạ.
 
Sửa lần cuối:

tuhocvba

Administrator
Thành viên BQT
1. Bạn xem lại logic xem. File demo bạn đưa không phản ánh đúng điều bạn đang mô tả.
Tại sao em học sinh dưới đây, ở file toàn khối, điểm toán là 3 nhưng ở file lớp 10A, điểm toán của em ấy là 5?
Bạn cần đăng nhập để thấy hình ảnh


2. Theo như bạn mô tả, thì input sẽ là 2 file. Gồm file toàn khối, và file lớp 10A chứa các sheet. Nhiệm vụ của Tool là cập nhật điểm vào cột I của file lớp 10A.
Cột này có cố định không, hay nay là cột I mai mốt là cột J?
Tên sheet là tên các môn học, tên sheet này có cố định không? Hay nay tên sheet là toan_hoc_10a, mai mốt lại là toanhoc_10a?
3. Vị trí cột mã học sinh ở file toàn khối luôn luôn là cột C và ở file lớp thì luôn là cột B?
4. Dòng bắt đầu dữ liệu của file toàn khối luôn bắt đầu từ dòng 7, dòng bắt đầu dữ liệu của file lớp luôn bắt đầu từ dòng 8?
 

tranaidh

Thành viên mới
Dạ nhiệm vụ của code đưa điểm cột M (Toán) ở file điểm toàn trường vào cột J (ĐĐGck) ở file sổ_điểm_các_môn_lớp (Không chỉ môn Toán mà các môn kiểm tra còn lại).

Bạn cần đăng nhập để thấy hình ảnh

1. Vấn đề là làm sao đưa đúng điểm các môn được kiểm tra trong file điểm toàn trường (F:O) vào cột J (ĐĐGck) ở 9 sheet môn học trong file sổ_điểm_các_môn_lớp. (Môn nào cũng ở cột J)
2. Cột mã số học sinh ở file sổ_điểm_các_môn_lớp luôn năm ở cột B (mặc định); còn mã số học sinh ở file điểm toàn trường thì minh có thể thay đổi theo ý muốn.
3. Dòng bắt đầu của file sổ điểm các môn lớp luôn là dòng số 8 (mặc định); còn điểm toàn trường mình có thể thay đổi theo ý muốn.
file sổ_điểm_các_môn_lớp là file mặc định của hệ thống mình không thể thay đổi. (Sau khi hoàn thành nhập điểm mình sẽ import file này lên hệ thống quản lý điểm của trường)
4. Tên sheet ở file sổ_điểm_các_môn_lớp LUÔN như hình phía dưới (sheet1 là MÔN TOÁN; sheet2 là môn vật lý.....)
Bạn cần đăng nhập để thấy hình ảnh

Chỉ khác tên khác phần tên lớp sau tên mỗi môn học của tên sheet
Bạn cần đăng nhập để thấy hình ảnh

Bạn cần đăng nhập để thấy hình ảnh
 
Sửa lần cuối:

tuhocvba

Administrator
Thành viên BQT
Dự kiến thời gian code 5h. Nếu bạn đồng ý hỗ trợ diễn đàn tài chính hoạt động với số tiền 500k, thì chúng tôi sẽ tiến hành code theo yêu cầu của bạn.
 

tranaidh

Thành viên mới
cảm Anh em đã code dc rồi ạ. Tham khảo theo góp ý của anh em đã code nó như sau:

Mã:
Sub updatedata()
    Dim rw As Long, x As Range
    Dim exportwb As Workbook, twb As Workbook
    

    Set exportwb = Workbooks.Open("C:\Data.xls")
    Set x = exportwb.Worksheets("Nhap diem").Range("B8:O1752")
    Set toan = Sheet1
    Set ly = Sheet2
    Set hoa = Sheet3
    Set sinh = Sheet4
    Set van = Sheet6
    Set su = Sheet7
    Set dia = Sheet8
    Set anh = Sheet9
    Set gdcd = Sheet10
        
    
'Mon toan
    With toan
        For rw = 8 To .Cells(Rows.Count, 2).End(xlUp).Row
            .Cells(rw, 10) = Application.VLookup(.Cells(rw, 2).Value2, x, 12, False)
        Next rw

    End With
'Mon Ly
    With ly
        For rw = 8 To .Cells(Rows.Count, 2).End(xlUp).Row
            .Cells(rw, 10) = Application.VLookup(.Cells(rw, 2).Value2, x, 11, False)
        Next rw

    End With
'Mon Hoa
    With hoa
        For rw = 8 To .Cells(Rows.Count, 2).End(xlUp).Row
            .Cells(rw, 10) = Application.VLookup(.Cells(rw, 2).Value2, x, 6, False)
        Next rw
    End With
'Mon sinh
    With sinh
        For rw = 8 To .Cells(Rows.Count, 2).End(xlUp).Row
            .Cells(rw, 10) = Application.VLookup(.Cells(rw, 2).Value2, x, 13, False)
        Next rw
    End With
'Mon van
    With van
        For rw = 8 To .Cells(Rows.Count, 2).End(xlUp).Row
            .Cells(rw, 10) = Application.VLookup(.Cells(rw, 2).Value2, x, 9, False)
        Next rw
    End With
'Mon su
    With su
        For rw = 8 To .Cells(Rows.Count, 2).End(xlUp).Row
            .Cells(rw, 10) = Application.VLookup(.Cells(rw, 2).Value2, x, 6, False)
        Next rw
    End With
'Mon dia
    With dia
        For rw = 8 To .Cells(Rows.Count, 2).End(xlUp).Row
            .Cells(rw, 10) = Application.VLookup(.Cells(rw, 2).Value2, x, 8, False)
        Next rw
    End With
'Mon ANH
    With anh
        For rw = 8 To .Cells(Rows.Count, 2).End(xlUp).Row
            .Cells(rw, 10) = Application.VLookup(.Cells(rw, 2).Value2, x, 10, False)
        Next rw
    End With
'Mon gdcd
    With gdcd
        For rw = 8 To .Cells(Rows.Count, 2).End(xlUp).Row
            .Cells(rw, 10) = Application.VLookup(.Cells(rw, 2).Value2, x, 14, False)
        Next rw
    End With

    exportwb.Close savechanges:=False
End Sub
code mới làm để tham khảo thôi nên chưa hoàn thiện . Mong anh góp ý ạ
 
Sửa lần cuối:

tuhocvba

Administrator
Thành viên BQT
Tự làm được là tốt rồi, đúng tinh thần tự học.
Tự làm thì tự test thôi vì không ai hiểu mục đích rõ hơn bạn.
Chia sẻ kinh nghiệm thì mình không có thời gian. Trên diễn đàn cũng đã có nhiều dự án hoàn thành, bạn có thể tìm kiếm và tham khảo.
 
Top