Nhờ sửa lỗi code tìm tên, gán điểm (1 người xem)

Liên hệ QC

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

khaothibaclieu

Thành viên hoạt động
Tham gia
10/4/08
Bài viết
113
Được thích
14
Nhờ các anh, chị giúp mình sửa lỗi đoạn code trong file gửi kèm.
Yêu cầu là dò tìm tại Sheet1: Nếu có tên nào thuộc vùng D55:D60 trùng với tên ở ô M2 thì copy điểm ở ô M55 vào dòng tương ứng với tên ở cột E.
Mình lọ mọ viết code VBA nhưng vẫn bị lỗi. Dò và gán được điểm ở các tên Nam, Nga, Ngân. Các tên còn lại thì không được.
Nếu được, các ạnh, chị có thể giúp mình viết đoạn code mới theo kiểu Tìm kiếm và Thay thế (Find and replace) như yêu cầu trên được hay không? Chứ viết kiểu copy và paste thì thấy cùi bắp quá. --=0
Cám ơn mọi người.
 

File đính kèm

Nhờ các anh, chị giúp mình sửa lỗi đoạn code trong file gửi kèm.
Yêu cầu là dò tìm tại Sheet1: Nếu có tên nào thuộc vùng D55:D60 trùng với tên ở ô M2 thì copy điểm ở ô M55 vào dòng tương ứng với tên ở cột E.
Mình lọ mọ viết code VBA nhưng vẫn bị lỗi. Dò và gán được điểm ở các tên Nam, Nga, Ngân. Các tên còn lại thì không được.
Nếu được, các ạnh, chị có thể giúp mình viết đoạn code mới theo kiểu Tìm kiếm và Thay thế (Find and replace) như yêu cầu trên được hay không? Chứ viết kiểu copy và paste thì thấy cùi bắp quá. --=0
Cám ơn mọi người.

Sửa lỗi còn mệt hơn là viết code khác.
Copy cái này vào vùng VBE sheet1, Nhập điểm là code chạy.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range
If Target.Address = "$N$2" Then
    For Each Cll In Range("D55:D60")
        If Cll.Value = Target.Offset(, -1).Value Then Cll.Offset(, 1).Value = Target.Value
    Next Cll
End If
End Sub
 
Upvote 0
Sửa lỗi còn mệt hơn là viết code khác.
Copy cái này vào vùng VBE sheet1, Nhập điểm là code chạy.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range
If Target.Address = "$N$2" Then
    For Each Cll In Range("D55:D60")
        If Cll.Value = Target.Offset(, -1).Value Then Cll.Offset(, 1).Value = Target.Value
    Next Cll
End If
End Sub

Code chạy rất tốt. Tuy nhiên khi đưa vào module như sau:
Sub GPE_Suadiem()
Dim Cll As Range
If Sheet1.Range("N2") Then
For Each Cll In Range("D55:D60")
If Cll.Value = Sheet1.Range("N2").Offset(, -1).Value Then Cll.Offset(, 1).Value = Sheet1.Range("N2").Value
Next Cll
End If
End Sub

thì bị lỗi là nếu nhập vào điểm 0 hoặc xóa trắng ở ô N2 thì code không sửa được điểm.
 
Upvote 0
Mã:
Sub GPE()
Dim I&, Rng As Range, Arr(), KQ()
Arr = Range(Sheet1.[D55], Sheet1.[D650000].End(3)).Value
ReDim KQ(1 To UBound(Arr), 1 To 1)
    For I = 1 To UBound(Arr)
        Set Rng = Sheet1.Range(Sheet1.[M1], Sheet1.[M65000].End(3)).Resize(, 2).Find(Arr(I, 1), , , 1)
        If Not Rng Is Nothing Then
            KQ(I, 1) = Rng.Offset(, 1)
        End If
    Next I
        Sheet1.[E55].Resize(I - 1, 1) = KQ
End Sub

Code của bạn không giữ lại được các con điểm ở các dòng khác. Nghĩa là mỗi lần sửa điểm ở ô N2 thì điểm ở các ô khác từ E5 đến E60 đều biến mất.
 
Upvote 0
Sao lại sửa code từ Sub Worksheet_Change() thành Sub() vậy "Chời".
"Mắc sửa" thì cũng "biết chút đỉnh" mà sửa chứ.
Làm vậy thì Code của tôi thành "chúng cười" rồi.
Híc!
 
Lần chỉnh sửa cuối:
Upvote 0
Code chạy rất tốt. Tuy nhiên khi đưa vào module như sau:
Sub GPE_Suadiem()
Dim Cll As Range
If Sheet1.Range("N2") Then
For Each Cll In Range("D55:D60")
If Cll.Value = Sheet1.Range("N2").Offset(, -1).Value Then Cll.Offset(, 1).Value = Sheet1.Range("N2").Value
Next Cll
End If
End Sub

thì bị lỗi là nếu nhập vào điểm 0 hoặc xóa trắng ở ô N2 thì code không sửa được điểm.

"Tuy nhiên" là do bạn chỉnh sửa code.
Làm đúng như hướng dẫn thì kết quả thế nào?
Từ đâu ra dòng lệnh: If Sheet1.Range("N2") Then
Bạn thêm điều kiện này bạn có hiểu là nó sẽ làm gì không?
 
Lần chỉnh sửa cuối:
Upvote 0
Sao lại sửa code từ Sub Worksheet_Change() thành Sub() vậy "Chời".
"Mắc sửa" thì cũng "biết chút đỉnh" mà sửa chứ.
Làm vậy thì Code của tôi thành "chúng cười" rồi.
Híc!

Xin lỗi anh Ba Tê. Tôi mạo muội sửa code của anh. Tôi học VBA theo kiểu tự học là chính. Công việc phát sinh gì thì tìm hiểu cái đó nên chủ yếu học theo kiểu "thử và sai". Sai đâu, sửa đó. Rút kinh nghiệm từ từ. Mong anh bỏ qua cho. Chỉ khi thực sự bí thì mới gửi lên diễn đàn nhờ mọi người giúp. Mà sự bí thì ngày nào cũng gặp nên ngày nào cũng phải hỏi mọi người.
Sẳn đây nhờ anh giúp giùm chuyện này.
Tôi muốn tìm kiếm và thay thế thông tin của thí sinh ở vùng C5:G10.
Nếu nhập SBD của thí sinh ở ô O2 và chọn Loại thông tin cần sửa ở ô P2, thì VBA sẽ tìm và thay thế thông tin ở ô Q2 cho thí sinh có SBD tương ứng ở vùng C5:G10. Có File gửi kèm.
Nếu được nhờ anh viết code chạy ở Module. Cám ơn anh rất nhiều.
Chúc anh và mọi người cuối tuần vui vẻ.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom