Giúp tìm chỗ sai trong phương thức Find
Em muốn tìm các mã mà có giá trị đầu tiên (tính từ trên xuống)
Code của emSub TimTenMaTK() Dim i As Long Dim KqArr, Ma Dim K As Range, Khoi As Range '1. Côòt muôìn doÌ With ActiveSheet Ma = .Range(.[A2], .[A65536].End(3)).Value ' maÞ doÌ End With '2. DoÌ õÒ côòt With Sheets("MA") Set K = .Range(.[I12], .[I500].End(3)) ' khôìi maÞ doÌ ðêÒ tiÌm 'Set K = .Range(.[I11], .[I500].End(3)) ' khôìi maÞ doÌ ðêÒ tiÌm End With '3. Redim Khôìi kêìt quaÒ vaÌ tiÌm ReDim KqArr(1 To UBound(Ma, 1), 1 To 3) For i = 1 To UBound(Ma, 1) Set Khoi = K.Find(Ma(i, 1), , xlValues, xlWhole) ' bãìt ðâÌu tiÌm If Not Khoi Is Nothing Then If Ma(i, 1) <> "" Then KqArr(i, 1) = K.Find(Ma(i, 1), , xlValues, xlWhole).Offset(, 1) KqArr(i, 2) = K.Find(Ma(i, 1), , xlValues, xlWhole).Offset(, 2) End If End If Next i '4. gaìn kêìt quaÒ ActiveSheet.Range("B2").Resize(UBound(KqArr), 3).Value = KqArr End SubCode trên tạm tìm đúng số theo yêu cầu
Nhưng bây giờ em thí nghiệm như sau
Tại sheet Ma, cell I16 và J16 em thêm lần lượt là 1111 và giá trị là 123
sau khi chạy code lại thì kết quả ở sheet TK bị thay đổi
cụ thể mã 1111 nó thay số 1.000.000 thành số 123
Nếu thêm mã và giá trị của những thằng khác thì không bị ảnh hưởng!?
Nếu code trên sửa dòngSet K = .Range(.[I12], .[I500].End(3))Thành
Set K = .Range(.[I11], .[I500].End(3))Thì hết lỗi, cho em hỏi tại sao? em cảm ơn!
Bạn xem hình:
968
Bạn đang bỏ trống tham số After, và excel sẽ lấy mặc định After ô đầu tiên của range K, ô đầu tiên bị bỏ qua và chỉ tìm after nó mà thôi
Bạn sẽ hỏi câu kế tiếp là: nếu bỏ qua thì sao khi chưa có I16 vẫn tìm thấy? Là vì nó bỏ qua ở bước đầu tiên nhưng lại nhét nó vào bước cuối: Nó sẽ tìm từ 13 đến 15, quay lại 12 rồi mới ngưng.
Nếu I12 là "222" và bên dưới có năm bảy ô "1111" thì vẫn tìm đúng "1111" đầu tiên vì ô bị bỏ qua là "222"
Khi bạn sửa tìm trong I11 đến I cuối thì ô bị bỏ qua là I11 và không xảy ra lỗi nói trên
www.giaiphapexcel.com/diendan/threads/giu%CC%81p-ti%CC%80m-ch%C3%B4%CC%83-sai-trong-ph%C6%B0%C6%A1ng-th%C6%B0%CC%81c-find.145200/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Với code của bạn thì Find sẽ tìm từ I13 chứ không từ I12. Khi nó tìm tới cuối mà không thấy thì nó mới tìm trong I12.
Ngoàui ra tôi không hiểu sao bạn dùng 2 Find. Sau khi tìm được Khoi rồi thì dịch sang phải để đọc kết quả thôi.
Thay toàn bộ từ Redim tới hết bằng
Với code trên thì Find bắt đầu tìm từ ô sau ô cuối cùng, tức là tìm từ I12 (tính theo "vòng tròn" – sau cuối là đầu)
Ngoài ra KqArr có 2 cột là đủ.
Và để hiểu sâu hơn thì:
Ở trường hợp này Khoi sẽ nhận một Cells đơn lẻ từ Phương thức Find nên không cần sử dụng Offset
Tức là:
Offset được sử dụng khi: