Bạn xem file đính kèm nhé!
Cả họ và tên còn có trường hợp TRÙNG!!! Chỉ theo tên thôi là tèo rồi còn đâu.Xin lỗi bạn cho mình hỏi thêm vấn đề nữa là mình chỉ cần dựa theo tên thôi, ko cần cả họ và tên, mình đã sửa những chỗ này nhưng ko đúng bạn có thể chỉ vị trí nào dc ko ạ?
Cả họ và tên còn có trường hợp TRÙNG!!! Chỉ theo tên thôi là tèo rồi còn đâu.
p/s: Cái này người ta phải tạo Mã cho mỗi học sinh, Mã đó là duy nhất.
Thêm mã thì:Vậy nếu thêm mã thì sẽ phải sửa lại code ở vị trí nào ạ?
Ví dụ như Mã là HS001 vậy phải sửa thế nào bạn? mình mới tìm hiểu nên ko biết gì cả, mong giúp đỡ ạThêm mã thì: - Việc đầu tiên tạo cái mã đó đã, gồm bao nhiêu ký tự (chữ / số)? - Tiếp đến, gán mã đó ứng với mỗi học sinh ở tất cả các bảng dữ liệu, đặt tại cột trước cột [Họ và tên đệm] - Xong xuôi mới tính tới code. Cái này thì đơn giản vì đã cột [Mã] để tham chiếu. Cứ lấy mã so với nhau, trùng thì lấy dữ liệu tương ứng. Nhàn hơn so với việc so sánh họ và tên.
Bạn làm xong hẳn bước 2 đi đã:Ví dụ như Mã là HS001 vậy phải sửa thế nào bạn? mình mới tìm hiểu nên ko biết gì cả, mong giúp đỡ ạ
Còn ở các bảng tổng hợp điểm nữa.- Tiếp đến, gán mã đó ứng với mỗi học sinh ở tất cả các bảng dữ liệu, đặt tại cột trước cột [Họ và tên đệm]
Bạn làm xong hẳn bước 2 đi đã:
Còn ở các bảng tổng hợp điểm nữa.
Bạn thử đoạn sau:Mình sửa rồi đây bạn!!
Sub TkDiem()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim Ipath As String, iMon() As Variant, Mon(), TB(), MA(), tmp()
Dim i As Integer, k As Byte, er As Long, lr As Long, r As Long, ir As Long
er = Sheet1.Range("C65000").End(xlUp).Row
MA = Sheet1.Range("B5:B" & er).Value
Ipath = GetFolder(""): If Ipath = "" Then Exit Sub
iMon = GetFileList(Ipath)
Mon = Sheet1.Range("E4:L4").Value
ReDim TB(1 To UBound(MA, 1), 1 To UBound(Mon, 2))
For i = 1 To UBound(iMon)
For k = 1 To UBound(Mon, 2)
If Replace(iMon(i), ".xlsx", "") Like "*" & Mon(1, k) Then
Workbooks.Open Filename:=Ipath & "\" & iMon(i), ReadOnly:=True
With ActiveWorkbook.Sheets("Sheet1")
lr = .Range("C65000").End(xlUp).Row
tmp = .Range("A3:R" & lr).Value
For r = 1 To UBound(TB, 1)
For ir = 1 To UBound(tmp, 1)
If MA(r, 1) = tmp(ir, 1) Then
TB(r, k) = tmp(ir, UBound(tmp, 2)): Exit For
End If
Next ir
Next r
End With
Workbooks(iMon(i)).Close
End If
Next k
Next i
Sheet1.Range("E5").Resize(UBound(TB, 1), UBound(TB, 2)).ClearContents
Sheet1.Range("E5").Resize(UBound(TB, 1), UBound(TB, 2)).NumberFormat = "0.0"
Sheet1.Range("E5").Resize(UBound(TB, 1), UBound(TB, 2)).Value = TB
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Bạn thử đoạn sau:
Mã:Sub TkDiem() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim Ipath As String, iMon() As Variant, Mon(), TB(), MA(), tmp() Dim i As Integer, k As Byte, er As Long, lr As Long, r As Long, ir As Long er = Sheet1.Range("C65000").End(xlUp).Row MA = Sheet1.Range("B5:B" & er).Value Ipath = GetFolder(""): If Ipath = "" Then Exit Sub iMon = GetFileList(Ipath) Mon = Sheet1.Range("E4:L4").Value ReDim TB(1 To UBound(MA, 1), 1 To UBound(Mon, 2)) For i = 1 To UBound(iMon) For k = 1 To UBound(Mon, 2) If Replace(iMon(i), ".xlsx", "") Like "*" & Mon(1, k) Then Workbooks.Open Filename:=Ipath & "\" & iMon(i), ReadOnly:=True With ActiveWorkbook.Sheets("Sheet1") lr = .Range("C65000").End(xlUp).Row tmp = .Range("A3:R" & lr).Value For r = 1 To UBound(TB, 1) For ir = 1 To UBound(tmp, 1) If MA(r, 1) = tmp(ir, 1) Then TB(r, k) = tmp(ir, UBound(tmp, 2)): Exit For End If Next ir Next r End With Workbooks(iMon(i)).Close End If Next k Next i Sheet1.Range("E5").Resize(UBound(TB, 1), UBound(TB, 2)).ClearContents Sheet1.Range("E5").Resize(UBound(TB, 1), UBound(TB, 2)).NumberFormat = "0.0" Sheet1.Range("E5").Resize(UBound(TB, 1), UBound(TB, 2)).Value = TB Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Bạn thử đoạn sau:
Mã:Sub TkDiem() Application.ScreenUpdating = False Application.DisplayAlerts = False Dim Ipath As String, iMon() As Variant, Mon(), TB(), MA(), tmp() Dim i As Integer, k As Byte, er As Long, lr As Long, r As Long, ir As Long er = Sheet1.Range("C65000").End(xlUp).Row MA = Sheet1.Range("B5:B" & er).Value Ipath = GetFolder(""): If Ipath = "" Then Exit Sub iMon = GetFileList(Ipath) Mon = Sheet1.Range("E4:L4").Value ReDim TB(1 To UBound(MA, 1), 1 To UBound(Mon, 2)) For i = 1 To UBound(iMon) For k = 1 To UBound(Mon, 2) If Replace(iMon(i), ".xlsx", "") Like "*" & Mon(1, k) Then Workbooks.Open Filename:=Ipath & "\" & iMon(i), ReadOnly:=True With ActiveWorkbook.Sheets("Sheet1") lr = .Range("C65000").End(xlUp).Row tmp = .Range("A3:R" & lr).Value For r = 1 To UBound(TB, 1) For ir = 1 To UBound(tmp, 1) If MA(r, 1) = tmp(ir, 1) Then TB(r, k) = tmp(ir, UBound(tmp, 2)): Exit For End If Next ir Next r End With Workbooks(iMon(i)).Close End If Next k Next i Sheet1.Range("E5").Resize(UBound(TB, 1), UBound(TB, 2)).ClearContents Sheet1.Range("E5").Resize(UBound(TB, 1), UBound(TB, 2)).NumberFormat = "0.0" Sheet1.Range("E5").Resize(UBound(TB, 1), UBound(TB, 2)).Value = TB Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Hình như nếu xóa tên đi thì code này ko chạy đc nữa bạn ơi....
Bạn ơi. Bạn từ từ diễn đạt có đầu có cuối để người khác hiểu mà xem giúp bạn.
Bạn xóa tên là xóa tên gì? Tên môn học? Tên học sinh?
Xóa thì xóa như nào? Xóa giá trị hay xóa cả dòng/ cột?
Cấu trúc dữ liệu sau khi xóa có thay đổi gì không so với trước khi xóa?
Thứ nữa, bạn có chạy đúng code căn cứ vào Mã để tham chiếu (bài #29)?
Ngoài ra, nếu được thì bạn gửi file sau khi xóa lên cho trực quan, dễ hiểu cái bạn vừa xóa là gì? Bớt phải giải thích nhiều.
Bạn phản hồi lại nhé.
Xóa đi thì lấy gì mà tổng hợp?xin lỗi do mình nói ko rõ ràng, ý mình là xóa dữ liệu trong cột họ va tên chỉ xóa dữ liệu thôi vị trí cột vẫn giữ nguyên chỉ dựa vào Mahs để chạy code lấy điểm thì ko đc!! Làm phiền bạn quá do lúc này mình đang lên bằng điện thoại nên ko gửi file lên đc nếu đc sáng mình sẽ gửi lên ạ![]()
er = Sheet1.Range("C65000").End(xlUp).Row
...
lr = .Range("C65000").End(xlUp).Row
er = Sheet1.Range("B65000").End(xlUp).Row
...
lr = .Range("A65000").End(xlUp).Row