Nhờ giúp import điểm vào các lớp

Liên hệ QC

tranaidh

Thành viên mới
Tham gia
31/5/08
Bài viết
36
Được thích
0
Em có một file kết quả kiểm tra và mình muốn lấy điểm từ file kết quả kiểm tra vào copy vào cột J (tức là cột ĐĐGck) các môn học được kiểm tra của các lớp (Mình có thể dò theo mã học sinh). Trong file em chỉ lấy ví dụ 3 lớp, Vì trường kiểm tra rất nhiều lớp (gần 40 lớp) nên công việc copy điểm vào các lớp dễ bị nhầm lẫn vậy em nhờ mọi người giúp em làm thế nào để cho nhanh và chính xác với ạ! Em xin cảm ơn nhiều.
 

File đính kèm

  • DIEM.rar
    113.3 KB · Đọc: 17
Lần chỉnh sửa cuối:
Giải pháp
Bạn xem dòng code S = Array(0, 1, 2, 6, 7, 8, 9, 3, 4, 10) và hiểu nó là thế nào?
Nôm na là S là một mảng trong đó các phần tử là chỉ số Sheet của các môn học của lớp nào đó. (chính vì vậy tôi mới hỏi bạn là các file đều có kết cấu các Sh đồng nhất).
Ví dụ: Môn Tin học nằm ở sheet4(Tin_hoc_11b) Vậy thì để tìm đến Sh Tin học ấy thì trong S sẽ là S= array(....,....4,10). khi chạy vòng lặp For z = 1 to ubound(S) khi z=9 thì S(9)=4.
Tóm lại là nếu thay đổi môn học trong (F4:N4) thì phải thay đổi chỉ số của mảng S tương ứng theo đúng vị trí các Sheet
Rất cảm ơn bạn, mình đã hiễu.
Cái nầy rất có ích cho nhiều gv làm công tác lên điểm sau khi kiểm tra. Một lần nữa cảm ơn bạn rất nhiều.
Em có một file kết quả kiểm tra và mình muốn lấy điểm từ file kết quả kiểm tra vào copy vào cột J (tức là cột ĐĐGck) các môn học được kiểm tra của các lớp (Mình có thể dò theo mã học sinh). Trong file em chỉ lấy ví dụ 3 lớp, Vì trường kiểm tra rất nhiều lớp (gần 40 lớp) nên công việc copy điểm vào các lớp dễ bị nhầm lẫn vậy em nhờ mọi người giúp em làm thế nào để cho nhanh và chính xác với ạ! Em xin cảm ơn nhiều.
Bạn đã có điểm của các môn học của từng lớp rồi còn gì.
Điểm ĐGGck của các môn học (cột J) ấy được lấy từ đâu? Trong 1 file điểm chung có lộn xộn các môn học và các lớp à ? Nếu vậy phải đưa cái file điểm chung đó lên chứ.
Trình bày rõ ràng và có file dữ liệu đầy đủ, chuẩn xác thì chắc là có người sẽ giúp thôi.
 
Upvote 0
Bạn đã có điểm của các môn học của từng lớp rồi còn gì.
Điểm ĐGGck của các môn học (cột J) ấy được lấy từ đâu? Trong 1 file điểm chung có lộn xộn các môn học và các lớp à ? Nếu vậy phải đưa cái file điểm chung đó lên chứ.
Trình bày rõ ràng và có file dữ liệu đầy đủ, chuẩn xác thì chắc là có người sẽ giúp thôi.
Dạ em xin trình bày rõ ạ:

1. Mở file "Kết quả kiểm tra"

2. Mở thư mục LOP.

2.1 Lần lươt mở từng file trong thư mục LOP, (khoảng 40 file)

2.2 Lần lươt mở từng sheet, mỗi sheet là 1 môn

2.3 Dò theo mã HS, điền điểm trong file "Kết quả kiểm tra" vào cột J sao cho đúng: đúng lớp, đúng môn, đúng mã HS

Dạ hết ạ.

.
 
Upvote 0
Dạ em xin trình bày rõ ạ:

1. Mở file "Kết quả kiểm tra"

2. Mở thư mục LOP.

2.1 Lần lươt mở từng file trong thư mục LOP, (khoảng 40 file)

2.2 Lần lươt mở từng sheet, mỗi sheet là 1 môn

2.3 Dò theo mã HS, điền điểm trong file "Kết quả kiểm tra" vào cột J sao cho đúng: đúng lớp, đúng môn, đúng mã HS

Dạ hết ạ.

.
Đúng vậy! Em nhờ mọi người giúp đỡ ạ!
Bài đã được tự động gộp:

Bạn đã có điểm của các môn học của từng lớp rồi còn gì.
Điểm ĐGGck của các môn học (cột J) ấy được lấy từ đâu? Trong 1 file điểm chung có lộn xộn các môn học và các lớp à ? Nếu vậy phải đưa cái file điểm chung đó lên chứ.
Trình bày rõ ràng và có file dữ liệu đầy đủ, chuẩn xác thì chắc là có người sẽ giúp thôi.
Em muốn lấy điểm kiểm tra trong file kết quả kiểm tra điền vào cột J các sheet của các file trong thư mục LỚP (một file tương ứng với 1 lớp, trong 1 file có nhiều sheet, mỗi sheet là một môn).
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ em xin trình bày rõ ạ:

1. Mở file "Kết quả kiểm tra"

2. Mở thư mục LOP.

2.1 Lần lươt mở từng file trong thư mục LOP, (khoảng 40 file)

2.2 Lần lươt mở từng sheet, mỗi sheet là 1 môn

2.3 Dò theo mã HS, điền điểm trong file "Kết quả kiểm tra" vào cột J sao cho đúng: đúng lớp, đúng môn, đúng mã HS
Tôi kiểm tra lại và thấy file rar bạn up lên giải nén chỉ có 1 folder là LOP trong đó có 3 file là điểm của các lớp 11b,11d,11i chứ có thấy File "kết quả kiểm tra" đâu.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi kiểm tra lại và thấy file rar bạn up lên giải nén chỉ có 1 folder là LOP trong đó có 3 file là điểm của các lớp 11b,11d,11i chứ có thấy File "kết quả kiểm tra" đâu.
file ket quả nằm ngoài thư mục lớp ạ. Nằm ngang thư mục LOP. Nhờ bạn xem giùm ạ
 

File đính kèm

  • Picture1.png
    Picture1.png
    114.2 KB · Đọc: 6
Upvote 0
file ket quả nằm ngoài thư mục lớp ạ. Nằm ngang thư mục LOP. Nhờ bạn xem giùm ạ
Sao bạn không để nó trong cùng Folder LOP nhỉ?
Danh sách của các lớp đã được xếp theo ABC chưa?
Danh sách các môn (theo từng Sh) trong các file điểm có đồng nhất không? Đều là Toán-Lý_Văn-Sử_Địa... hay có lớp thế này lớp thế khác?Số lượng Sh cũng như nhau..
Tên File điểm các lớp được đặt tên theo đúng trình tự như vậy (xxxxx _11b.xls) hay là có lớp đặt tên khác (xxxxxxxx_11B.xlsx).
 
Upvote 0
Sao bạn không để nó trong cùng Folder LOP nhỉ?
Danh sách của các lớp đã được xếp theo ABC chưa?
Danh sách các môn (theo từng Sh) trong các file điểm có đồng nhất không? Đều là Toán-Lý_Văn-Sử_Địa... hay có lớp thế này lớp thế khác?Số lượng Sh cũng như nhau..
Tên File điểm các lớp được đặt tên theo đúng trình tự như vậy (xxxxx _11b.xls) hay là có lớp đặt tên khác (xxxxxxxx_11B.xlsx).
mình để ngoài cho nó dễ phân biệt thôi, nếu theo bạn để cùng một folder thì cũng đc ạ, Miễn sao là điểm chạy vào các file lớp là đc ạ.
Còn cấu trúc file các lớp là giống nhau (sheet1 là toán, sheet2 là môn Lý.....), số lượng các sheet cũng giống nhau
Tên file các lớp luôn luôn là đuôi ****_11b.xls
Trong file nén minh chỉ lấy 3 file ví dụ thôi ạ. (Có hơn 40 lóp ạ)
Lưu ý: Chỉ copy điểm vào 9 môn dc kiểm tra thôi ạ, không copy đè lên các môn còn lại
 
Lần chỉnh sửa cuối:
Upvote 0
Bài này ở file "Ket qua kiem tra" mà tên môn học không khớp với tên sheet các môn học ở các file trong foder LOP thì cũng đắm đuối ấy. Và có cảm giác nó ngược ngược thế nào ấy nhỉ
 
Upvote 0
mình để ngoài cho nó dễ phân biệt thôi, nếu theo bạn để cùng một folder thì cũng đc ạ, Miễn sao là điểm chạy vào các file lớp là đc ạ.
Còn cấu trúc file các lớp là giống nhau (sheet1 là toán, sheet2 là môn Lý.....), số lượng các sheet cũng giống nhau
Tên file các lớp luôn luôn là đuôi ****_11b.xls
Trong file nén minh chỉ lấy 3 file ví dụ thôi ạ. (Có hơn 40 lóp ạ)
Lưu ý: Chỉ copy điểm vào 9 môn dc kiểm tra thôi ạ, không copy đè lên các môn còn lại
Nếu đúng là như thế thì để tôi nghiên cứu và giúp bạn có thêm giải pháp trong khi chờ các giải pháp khác. Đang làm.
 
Upvote 0
mình để ngoài cho nó dễ phân biệt thôi, nếu theo bạn để cùng một folder thì cũng đc ạ, Miễn sao là điểm chạy vào các file lớp là đc ạ.
Còn cấu trúc file các lớp là giống nhau (sheet1 là toán, sheet2 là môn Lý.....), số lượng các sheet cũng giống nhau
Tên file các lớp luôn luôn là đuôi ****_11b.xls
Trong file nén minh chỉ lấy 3 file ví dụ thôi ạ. (Có hơn 40 lóp ạ)
Lưu ý: Chỉ copy điểm vào 9 môn dc kiểm tra thôi ạ, không copy đè lên các môn còn lại
Bạn chưa trả lời câu hỏi "Danh sách của các lớp đã được xếp theo ABC chưa?" do vậy tôi đành phải làm theo hướng khác hướng copy. Mà dùng Dic để dò mã HS (code dài hơn), nhưng chính xác hơn.
Kiểm tra lại Ô M4 và G4 của Sh1/file "Kết quả Kiểm tra" xem nó là gì? Tôi cho đại nó là G4= sinh học.

Khi click nút Vào điểm các lớp sẽ hiện lên 1 bảng cho ta chọn file để vào điểm (khoảng hơn 40 file như bạn nói đó) Bôi đen (chọn ) các file đó 1 lần và nhấn open, và đợi kết quả.
Sau khi vào điểm xong File điểm các môn lớp XXX.xls sẽ được đóng lại (save trước khi đóng- do code thực hiện). Nếu bạn muốn nó không đóng (hiện hữu trên màn hình để kiểm tra ) thì vào Modul VaoDiem tìm đến dòng wbLop.Close SaveChanges:=True và vô hiệu nó bằng cách đánh dấu "'" (nháy đơn ) trước dòng lệnh đó nhé . ' wbLop.Close SaveChanges:=True.

Chúc thành công.

Xem file đính kèm
 

File đính kèm

  • Ket qua kiem tra.xlsm
    56.3 KB · Đọc: 9
Upvote 0
Bạn chưa trả lời câu hỏi "Danh sách của các lớp đã được xếp theo ABC chưa?" do vậy tôi đành phải làm theo hướng khác hướng copy. Mà dùng Dic để dò mã HS (code dài hơn), nhưng chính xác hơn.
Kiểm tra lại Ô M4 và G4 của Sh1/file "Kết quả Kiểm tra" xem nó là gì? Tôi cho đại nó là G4= sinh học.

Khi click nút Vào điểm các lớp sẽ hiện lên 1 bảng cho ta chọn file để vào điểm (khoảng hơn 40 file như bạn nói đó) Bôi đen (chọn ) các file đó 1 lần và nhấn open, và đợi kết quả.
Sau khi vào điểm xong File điểm các môn lớp XXX.xls sẽ được đóng lại (save trước khi đóng- do code thực hiện). Nếu bạn muốn nó không đóng (hiện hữu trên màn hình để kiểm tra ) thì vào Modul VaoDiem tìm đến dòng wbLop.Close SaveChanges:=True và vô hiệu nó bằng cách đánh dấu "'" (nháy đơn ) trước dòng lệnh đó nhé . ' wbLop.Close SaveChanges:=True.

Chúc thành công.

Xem file đính kèm
Mã:
Option Explicit

Sub VaoDiemCacLop_HUONG_HCKT()
Dim i&, j&, t&, k&, Lr&, eRow&, z&, R&, eR&
Dim Arr(), KQ(), Diem(), DMon(), S
Dim Dic As Object, DicID As Object, Keys, Temp, ID, Ma
Dim wbDiem As Workbook, wbLop As Workbook, ShD As Worksheet, Sh As Worksheet
Dim fnameList As Variant
Dim fnameCurFile As Variant

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

Set ShD = Sheet1
Set Dic = CreateObject("Scripting.Dictionary")
Set DicID = CreateObject("Scripting.Dictionary")

    eRow = ShD.Cells(Rows.Count, 2).End(xlUp).Row
    Arr = ShD.Range("A5:N" & eRow).Value
    R = UBound(Arr)
    ReDim Diem(1 To R, 1 To 11)
    
For i = 1 To UBound(Arr)
    Keys = Arr(i, 5): If Not Dic.Exists(Keys) Then t = t + 1: Dic.Add (Keys), t
    ID = Trim(Arr(i, 2)) & "|" & Trim(Arr(i, 5))
    If Not DicID.Exists(ID) Then
        k = k + 1: DicID.Add (ID), k
            Diem(k, 1) = ID
        For j = 2 To 10
            Diem(k, j) = Arr(i, j + 4)
        Next j
    End If
Next i
    
    fnameList = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", _
    Title:="Choose Excel files to merge", MultiSelect:=True)
'Set wbDiem = ActiveWorkbook
For Each fnameCurFile In fnameList
    Temp = UCase(Mid(fnameCurFile, 50, 3))
        If Dic.Exists(Temp) Then
            Set wbLop = Workbooks.Open(Filename:=fnameCurFile)
 '               On Error Resume Next
               S = Array(0, 1, 2, 6, 7, 8, 9, 3, 4, 10)
                For z = 1 To UBound(S)
                    Set Sh = Sheets(S(z))
                        Lr = Sh.Cells(Rows.Count, 2).End(xlUp).Row
                        DMon = Sh.Range("B8:B" & Lr).Value: eR = UBound(DMon)
                        ReDim KQ(1 To eR, 1 To 1)
                        For i = 1 To eR
                            Ma = Trim(DMon(i, 1)) & "|" & Temp
                                If DicID.Exists(Ma) Then
                                    KQ(i, 1) = Diem(DicID.Item(Ma), z + 1)
                                End If
                        Next i
                            Sh.Range("J8").Resize(i, 1) = KQ
                            Erase KQ
                    Next z
            End If
  wbLop.Close SaveChanges:=True   '<Lỗi: Run-time error '91: Object variable or With block variable not set>
Next fnameCurFile

Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Set Dic = Nothing
Set DicID = Nothing

MsgBox " Ða vao ðiêm các môn cho các lop thành công", vbInformation, "THÔNG BÁO"
End Sub

Rất cảm ơn bạn đã giúp mình ạ!
DS học sinh các lớp có thể ko xếp theo ABC ạ, ý mình cũng phải tìm theo mã học sinh để vào điểm cho học sinh.
Nhờ bạn xem giúp cho mình lỗi dòng code trên một chút ạ. Khi mình chay code thì nó báo Run-time error '91: Object variable or With block variable not set
 

File đính kèm

  • Ket qua kiem tra.xlsm
    53.7 KB · Đọc: 6
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Option Explicit

Sub VaoDiemCacLop_HUONG_HCKT()
Dim i&, j&, t&, k&, Lr&, eRow&, z&, R&, eR&
Dim Arr(), KQ(), Diem(), DMon(), S
Dim Dic As Object, DicID As Object, Keys, Temp, ID, Ma
Dim wbDiem As Workbook, wbLop As Workbook, ShD As Worksheet, Sh As Worksheet
Dim fnameList As Variant
Dim fnameCurFile As Variant

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

Set ShD = Sheet1
Set Dic = CreateObject("Scripting.Dictionary")
Set DicID = CreateObject("Scripting.Dictionary")

    eRow = ShD.Cells(Rows.Count, 2).End(xlUp).Row
    Arr = ShD.Range("A5:N" & eRow).Value
    R = UBound(Arr)
    ReDim Diem(1 To R, 1 To 11)
   
For i = 1 To UBound(Arr)
    Keys = Arr(i, 5): If Not Dic.Exists(Keys) Then t = t + 1: Dic.Add (Keys), t
    ID = Trim(Arr(i, 2)) & "|" & Trim(Arr(i, 5))
    If Not DicID.Exists(ID) Then
        k = k + 1: DicID.Add (ID), k
            Diem(k, 1) = ID
        For j = 2 To 10
            Diem(k, j) = Arr(i, j + 4)
        Next j
    End If
Next i
   
    fnameList = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", _
    Title:="Choose Excel files to merge", MultiSelect:=True)
'Set wbDiem = ActiveWorkbook
For Each fnameCurFile In fnameList
    Temp = UCase(Mid(fnameCurFile, 50, 3))
        If Dic.Exists(Temp) Then
            Set wbLop = Workbooks.Open(Filename:=fnameCurFile)
 '               On Error Resume Next
               S = Array(0, 1, 2, 6, 7, 8, 9, 3, 4, 10)
                For z = 1 To UBound(S)
                    Set Sh = Sheets(S(z))
                        Lr = Sh.Cells(Rows.Count, 2).End(xlUp).Row
                        DMon = Sh.Range("B8:B" & Lr).Value: eR = UBound(DMon)
                        ReDim KQ(1 To eR, 1 To 1)
                        For i = 1 To eR
                            Ma = Trim(DMon(i, 1)) & "|" & Temp
                                If DicID.Exists(Ma) Then
                                    KQ(i, 1) = Diem(DicID.Item(Ma), z + 1)
                                End If
                        Next i
                            Sh.Range("J8").Resize(i, 1) = KQ
                            Erase KQ
                    Next z
            End If
  wbLop.Close SaveChanges:=True   '<Lỗi: Run-time error '91: Object variable or With block variable not set>
Next fnameCurFile

Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Set Dic = Nothing
Set DicID = Nothing

MsgBox " Ða vao ðiêm các môn cho các lop thành công", vbInformation, "THÔNG BÁO"
End Sub

Rất cảm ơn bạn đã giúp mình ạ!
DS học sinh các lớp có thể ko xếp theo ABC ạ, ý mình cũng phải tìm theo mã học sinh để vào điểm cho học sinh.
Nhờ bạn xem giúp cho mình lỗi dòng code trên một chút ạ. Khi mình chay code thì nó báo Run-time error '91: Object variable or With block variable not set
Lỗi này được dịch ra tiếng Việt (google dich) là "Biến đối tượng hoặc Với biến khối không được thiết lập" có nghĩa là phần kết nối tới các file trong Folder Lop của máy bạn và máy tôi khác nhau. ví dụ của tôi là C:\Users\Admin\Downloads\LOP\[so_diem_cac_mon_lop_11i.xls] . Do vậy biểu thức Temp = UCase(Mid(fnameCurFile, 50, 3)) sẽ sai.
Vậy bạn thử thay bằng code này và chạy thử nhé.
Mã:
Option Explicit

Sub VaoDiemCacLop_HUONG_HCKT()
Dim i&, j&, t&, k&, Lr&, eRow&, z&, R&, eR&, vitri&
Dim Arr(), KQ(), Diem(), DMon(), S
Dim Dic As Object, DicID As Object, Keys, Temp, ID, Ma
Dim wbDiem As Workbook, wbLop As Workbook, ShD As Worksheet, Sh As Worksheet
Dim fnameList As Variant
Dim fnameCurFile As Variant

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

Set ShD = Sheet1
Set Dic = CreateObject("Scripting.Dictionary")
Set DicID = CreateObject("Scripting.Dictionary")

    eRow = ShD.Cells(Rows.Count, 2).End(xlUp).Row
    Arr = ShD.Range("A5:N" & eRow).Value
    R = UBound(Arr)
    ReDim Diem(1 To R, 1 To 11)
    
For i = 1 To UBound(Arr)
    Keys = Arr(i, 5): If Not Dic.Exists(Keys) Then t = t + 1: Dic.Add (Keys), t
    ID = Trim(Arr(i, 2)) & "|" & Trim(Arr(i, 5))
    If Not DicID.Exists(ID) Then
        k = k + 1: DicID.Add (ID), k
            Diem(k, 1) = ID
        For j = 2 To 10
            Diem(k, j) = Arr(i, j + 4)
        Next j
    End If
Next i
    
    fnameList = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", _
    Title:="Choose Excel files to merge", MultiSelect:=True)
'Set wbDiem = ActiveWorkbook
For Each Keys In Dic.Keys
For Each fnameCurFile In fnameList
    vitri = InStr(1, fnameCurFile, Keys, vbTextCompare)
    If vitri <> 0 Then
    Temp = UCase(Mid(fnameCurFile, vitri, 3))
        If Dic.Exists(Temp) Then
            Set wbLop = Workbooks.Open(Filename:=fnameCurFile)
 '               On Error Resume Next
               S = Array(0, 1, 2, 6, 7, 8, 9, 3, 4, 10)
                For z = 1 To UBound(S)
                    Set Sh = Sheets(S(z))
                        Lr = Sh.Cells(Rows.Count, 2).End(xlUp).Row
                        DMon = Sh.Range("B8:B" & Lr).Value: eR = UBound(DMon)
                        ReDim KQ(1 To eR, 1 To 1)
                        For i = 1 To eR
                            Ma = Trim(DMon(i, 1)) & "|" & Temp
                                If DicID.Exists(Ma) Then
                                    KQ(i, 1) = Diem(DicID.Item(Ma), z + 1)
                                End If
                        Next i
                            Sh.Range("J8").Resize(i, 1) = KQ
                            Erase KQ
                    Next z
            End If
   'wbLop.Close SaveChanges:=True
   End If
Next fnameCurFile
Next Keys
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Set Dic = Nothing
Set DicID = Nothing

MsgBox " Đa vao điêm các môn cho các lop thành công", vbInformation, "THÔNG BÁO"
End Sub
Kết quả thế nào nhớ hồi âm.
 
Upvote 0
Lỗi này được dịch ra tiếng Việt (google dich) là "Biến đối tượng hoặc Với biến khối không được thiết lập" có nghĩa là phần kết nối tới các file trong Folder Lop của máy bạn và máy tôi khác nhau. ví dụ của tôi là C:\Users\Admin\Downloads\LOP\[so_diem_cac_mon_lop_11i.xls] . Do vậy biểu thức Temp = UCase(Mid(fnameCurFile, 50, 3)) sẽ sai.
Vậy bạn thử thay bằng code này và chạy thử nhé.
Mã:
Option Explicit

Sub VaoDiemCacLop_HUONG_HCKT()
Dim i&, j&, t&, k&, Lr&, eRow&, z&, R&, eR&, vitri&
Dim Arr(), KQ(), Diem(), DMon(), S
Dim Dic As Object, DicID As Object, Keys, Temp, ID, Ma
Dim wbDiem As Workbook, wbLop As Workbook, ShD As Worksheet, Sh As Worksheet
Dim fnameList As Variant
Dim fnameCurFile As Variant

    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

Set ShD = Sheet1
Set Dic = CreateObject("Scripting.Dictionary")
Set DicID = CreateObject("Scripting.Dictionary")

    eRow = ShD.Cells(Rows.Count, 2).End(xlUp).Row
    Arr = ShD.Range("A5:N" & eRow).Value
    R = UBound(Arr)
    ReDim Diem(1 To R, 1 To 11)
    
For i = 1 To UBound(Arr)
    Keys = Arr(i, 5): If Not Dic.Exists(Keys) Then t = t + 1: Dic.Add (Keys), t
    ID = Trim(Arr(i, 2)) & "|" & Trim(Arr(i, 5))
    If Not DicID.Exists(ID) Then
        k = k + 1: DicID.Add (ID), k
            Diem(k, 1) = ID
        For j = 2 To 10
            Diem(k, j) = Arr(i, j + 4)
        Next j
    End If
Next i
    
    fnameList = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", _
    Title:="Choose Excel files to merge", MultiSelect:=True)
'Set wbDiem = ActiveWorkbook
For Each Keys In Dic.Keys
For Each fnameCurFile In fnameList
    vitri = InStr(1, fnameCurFile, Keys, vbTextCompare)
    If vitri <> 0 Then
    Temp = UCase(Mid(fnameCurFile, vitri, 3))
        If Dic.Exists(Temp) Then
            Set wbLop = Workbooks.Open(Filename:=fnameCurFile)
 '               On Error Resume Next
               S = Array(0, 1, 2, 6, 7, 8, 9, 3, 4, 10)
                For z = 1 To UBound(S)
                    Set Sh = Sheets(S(z))
                        Lr = Sh.Cells(Rows.Count, 2).End(xlUp).Row
                        DMon = Sh.Range("B8:B" & Lr).Value: eR = UBound(DMon)
                        ReDim KQ(1 To eR, 1 To 1)
                        For i = 1 To eR
                            Ma = Trim(DMon(i, 1)) & "|" & Temp
                                If DicID.Exists(Ma) Then
                                    KQ(i, 1) = Diem(DicID.Item(Ma), z + 1)
                                End If
                        Next i
                            Sh.Range("J8").Resize(i, 1) = KQ
                            Erase KQ
                    Next z
            End If
   'wbLop.Close SaveChanges:=True
   End If
Next fnameCurFile
Next Keys
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Set Dic = Nothing
Set DicID = Nothing

MsgBox " Đa vao điêm các môn cho các lop thành công", vbInformation, "THÔNG BÁO"
End Sub
Kết quả thế nào nhớ hồi âm.
Cảm ơn bạn rất nhiều, đúng như ý tưởng của mình. Thât tuyệt vời!
Cho mình hỏi chút: Nếu thứ tự các môn trong file kết quả kiểm tra có thể thay đổi (từ F4:N4) thì phải thay đổi chổ nào trong trong code. Xin cảm ơn bạn rất nhiều.
 
Upvote 0
Cảm ơn bạn rất nhiều, đúng như ý tưởng của mình. Thât tuyệt vời!
Cho mình hỏi chút: Nếu thứ tự các môn trong file kết quả kiểm tra có thể thay đổi (từ F4:N4) thì phải thay đổi chổ nào trong trong code. Xin cảm ơn bạn rất nhiều.
Bạn xem dòng code S = Array(0, 1, 2, 6, 7, 8, 9, 3, 4, 10) và hiểu nó là thế nào?
Nôm na là S là một mảng trong đó các phần tử là chỉ số Sheet của các môn học của lớp nào đó. (chính vì vậy tôi mới hỏi bạn là các file đều có kết cấu các Sh đồng nhất).
Ví dụ: Môn Tin học nằm ở sheet4(Tin_hoc_11b) Vậy thì để tìm đến Sh Tin học ấy thì trong S sẽ là S= array(....,....4,10). khi chạy vòng lặp For z = 1 to ubound(S) khi z=9 thì S(9)=4.
Tóm lại là nếu thay đổi môn học trong (F4:N4) thì phải thay đổi chỉ số của mảng S tương ứng theo đúng vị trí các Sheet
 
Upvote 0
Bạn xem dòng code S = Array(0, 1, 2, 6, 7, 8, 9, 3, 4, 10) và hiểu nó là thế nào?
Nôm na là S là một mảng trong đó các phần tử là chỉ số Sheet của các môn học của lớp nào đó. (chính vì vậy tôi mới hỏi bạn là các file đều có kết cấu các Sh đồng nhất).
Ví dụ: Môn Tin học nằm ở sheet4(Tin_hoc_11b) Vậy thì để tìm đến Sh Tin học ấy thì trong S sẽ là S= array(....,....4,10). khi chạy vòng lặp For z = 1 to ubound(S) khi z=9 thì S(9)=4.
Tóm lại là nếu thay đổi môn học trong (F4:N4) thì phải thay đổi chỉ số của mảng S tương ứng theo đúng vị trí các Sheet
Rất cảm ơn bạn, mình đã hiễu.
Cái nầy rất có ích cho nhiều gv làm công tác lên điểm sau khi kiểm tra. Một lần nữa cảm ơn bạn rất nhiều.
 
Upvote 0
Giải pháp
Rất cảm ơn bạn, mình đã hiễu.
Cái nầy rất có ích cho nhiều gv làm công tác lên điểm sau khi kiểm tra. Một lần nữa cảm ơn bạn rất nhiều.
VBA hữu ích bạn nhỉ. Cố tìm hiểu để mà còn tùy biến cho phù hợp một khi có sự thay đổi cấu trúc file dữ liệu
 
Upvote 0
VBA hữu ích bạn nhỉ. Cố tìm hiểu để mà còn tùy biến cho phù hợp một khi có sự thay đổi cấu trúc file dữ liệu
Đúng là rất tuyệt vời. Mình cũng rất thích Vba, nhưng không dc học, chỉ tìm hiểu dc một số code đơn giản thôi. Còn phải học từ các bạn nhiều.
 
Upvote 0
Web KT

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

Back
Top Bottom