Cách dùng Range.Find

Liên hệ QC

lehoctk

Thành viên chính thức
Tham gia
20/2/21
Bài viết
60
Được thích
1
Em chào cả nhà ạ,
Em đang code để Set findcell = Range.Find(string, , xlValues, xlWhole) như trong file nhưng em bị lỗi thực tế giá trị có tồn tại trong cell thuộc range nhưng Find vẫn trả về Nothing,
Mong anh/chị chỉ giáo giúp em ạ.
Em cảm ơn mọi người đã quan tâm ạ
 

File đính kèm

  • Book1.xlsb
    15.6 KB · Đọc: 15
Em chào cả nhà ạ,
Em đang code để Set findcell = Range.Find(string, , xlValues, xlWhole) như trong file nhưng em bị lỗi thực tế giá trị có tồn tại trong cell thuộc range nhưng Find vẫn trả về Nothing,
Mong anh/chị chỉ giáo giúp em ạ.
Em cảm ơn mọi người đã quan tâm ạ
Bạn có thể mô tả mục đích của bạn bằng lời được không?
 
Upvote 0
Chỗ nào có .value thì sửa thành .value2

Hoặc
Mở mỗi sheet, chọn cả bảng rồi nhấn ctrl + shift + ~
Rồi mới chạy code.
 
Upvote 0
Nguyên nhân là do trong 2 sheet bạn định dang là Accounting.

Vd. chọn B4 -> Format cells bạn sẽ thấy như hình.

general.png

Ghi nhớ lần này cho muôn đời. Còn chữa cháy lần này thì chọn vùng dữ liệu (hoặc toàn sheet) rồi định dạng là General.
 
Lần chỉnh sửa cuối:
Upvote 0
Nguyên nhân là do trong 2 sheet bạn định dang là Accounting.

Vd. chọn B4 -> Format cells bạn sẽ thấy như hình.

View attachment 280289

Ghi nhớ lần này cho muôn đời. Còn chữa cháy lần này thì chọn vùng dữ liệu (hoặc toàn sheet) rồi định dạng là General.
Bác cho em hỏi nguyên nhân làm sao mà sheet tự động định dạng là accounting vậy ạ, em tạo sheet mới
Nguyên nhân là do trong 2 sheet bạn định dang là Accounting.

Vd. chọn B4 -> Format cells bạn sẽ thấy như hình.

View attachment 280289

Ghi nhớ lần này cho muôn đời. Còn chữa cháy lần này thì chọn vùng dữ liệu (hoặc toàn sheet) rồi định dạng là General.
Vâng em cảm ơn bác, nhưng bác có thể chỉ giáo cho em nguyên nhân khi tạo một sheet mới đã tự mặc định định dạng là Accounting cho toàn sheet rồi ạ, em cũng đã thử tạo file định dạng trong folder xlstart rồi mà vẫn bị ạ.
Bài đã được tự động gộp:

Bác cho em hỏi nguyên nhân làm sao mà sheet tự động định dạng là accounting vậy ạ, em tạo sheet mới

Vâng em cảm ơn bác, nhưng bác có thể chỉ giáo cho em nguyên nhân khi tạo một sheet mới đã tự mặc định định dạng là Accounting cho toàn sheet rồi ạ, em cũng đã thử tạo file định dạng trong folder xlstart rồi mà vẫn bị ạ.
Bác cho em hỏi có phải excel sẽ ghi nhớ định dạng (format) toàn sheet được tạo gần nhất và khi tạo sheet mới sẽ set format theo định dạng trước đó đúng không ạ?, nếu đúng vậy thì có thể do em không để ý đã vô tình thiết lập format là accounting trước đó dẫn tới khi tạo sheet mới đã mặc định để accounting cho toàn sheet ạ. Hiện tại em đã khắc phục được lỗi rồi ạ, và cũng đã thử tạo thêm sheet mới không để định dạng accounting nữa ạ.
Một lần nữa em cảm ơn các bác đã giúp đỡ em ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể mô tả mục đích của bạn bằng lời được không?
Mục đích là ở sheet 2 là sheet temp, có rất nhiều mã lớn ở cột B, và mỗi mã lớn sẽ có nhiều mã nhỏ ở cột C, em dùng sheet temp để lọc (filter) theo mã lớn, sau đó tìm kiếm bên sheet1 vùng dữ liệu chứa mã lớn tại cột B, nếu tìm thấy mã lớn bên cột B sheet1 thì sẽ xác định vùng dữ liệu để xử lý bằng cách xlDown từ vị trí tìm thấy mã lớn xuống, còn số cột thì tùy trường hợp ạ. và sau đó tiếp tục kiểm tra trong vùng dữ liệu này đã tồn tại mã nhỏ bên sheet 2 chưa, nếu chưa thì sẽ chèn thêm dòng và các dữ liệu khác tương ứng với mã nhỏ, còn nếu tồn tại mã nhỏ rồi thỉ cập nhật dữ liệu tại một số cột trong vùng dữ liệu đã xác định được ạ.
 
Upvote 0
Nếu bạn muốn giữ nguyên định dạng accounting, thì không dùng Find Method, mà dùng vòng lặp For để duyệt qua các value2. Chậm hơn dùng Find (có thể không đáng kể).
 
Upvote 0
Nguyên nhân là do trong 2 sheet bạn định dang là Accounting.

Vd. chọn B4 -> Format cells bạn sẽ thấy như hình.

View attachment 280289

Ghi nhớ lần này cho muôn đời. Còn chữa

Nếu bạn muốn giữ nguyên định dạng accounting, thì không dùng Find Method, mà dùng vòng lặp For để duyệt qua các value2. Chậm hơn dùng Find (có thể không đáng kể).
Vâng em cảm ơn góp ý của bác.
Nhưng chắc em sẽ dùng Find vì thực tế file của em không cần dùng định dạng Accounting mà đó là lỗi vô tình set Accounting ạ.
 
Upvote 0
Không đọc bài #6 à bạn. Hay chúng ta mỗi người một nẻo rồi?


1661335081757.png
 
Upvote 0
Hiện tại em đã khắc phục được lỗi rồi ạ, và cũng đã thử tạo thêm sheet mới không để định dạng accounting nữa ạ.
Thế là được.
Mỗi người có triết lý của riêng mình. Triết lý của tôi là: dữ liệu luôn luôn phải là chuẩn. Nếu dữ liệu gốc chưa chuẩn thì phải đưa về chuẩn. Không có chuyện để dữ liệu không chuẩn rồi mỗi khi cần thao tác - chạy code hay lập công thức - lại phải xoay xở. Không chơi kiểu xoay xở. Ai thích xoay xở thì xin mời - mỗi người tự do và độc lập trong công việc và cuộc sống của mình. Thế thôi.
 
Upvote 0
Thế là được.
Mỗi người có triết lý của riêng mình. Triết lý của tôi là: dữ liệu luôn luôn phải là chuẩn. Nếu dữ liệu gốc chưa chuẩn thì phải đưa về chuẩn. Không có chuyện để dữ liệu không chuẩn rồi mỗi khi cần thao tác - chạy code hay lập công thức - lại phải xoay xở. Không chơi kiểu xoay xở. Ai thích xoay xở thì xin mời - mỗi người tự do và độc lập trong công việc và cuộc sống của mình. Thế thôi.
Vâng, do em chưa có kinh nghiệm nên để xảy ra lỗi không để dữ liệu chuẩn ạ.
Em sẽ rút kinh nghiệm ạ
Bài đã được tự động gộp:

Còn cách Hoặc nữa cơ mà.

Khuyến mại thêm bí kíp gia truyền. Cái gì cũng trị được hết. Có gì đâu.

RngCheck.Text
Em gửi bài này trước bài #6 nên chưa biết bác ạ, em cảm ơn bác đã góp ý thêm cho em một giải pháp.
 
Upvote 0
Vâng, do em chưa có kinh nghiệm nên để xảy ra . . . . . .
@Chủ bài đăng: Kinh nghiệm của mình khi mới bước vô lĩnh vực VBA đó là cần khai báo tường minh các tham biến cần dùng;
Chí ít chỉ sau 1 thời gian đủ lâu, khi cần xem lại các câu lệnh sẽ đỡ mất thời gian hơn.
 
Upvote 0
Em chào cả nhà ạ,
Em đang code để Set findcell = Range.Find(string, , xlValues, xlWhole) như trong file nhưng em bị lỗi thực tế giá trị có tồn tại trong cell thuộc range nhưng Find vẫn trả về Nothing,
Mong anh/chị chỉ giáo giúp em ạ.
Em cảm ơn mọi người đã quan tâm ạ
Thay câu lệnh này xem sao
Set findcell = SrcToFind.Find(RngCheck.Value, , xlValues, 2)
 
Upvote 0
Thay câu lệnh này xem sao
Set findcell = SrcToFind.Find(RngCheck.Value, , xlValues, 2)
Lẽ ra DG22002-1 phải không tìm được, nhưng sửa như trên thì tìm thấy ở B8 = DG22002-10. Đổi thành 2 = xlPart là sai về bản chất (tìm đúng chứ không phải là tìm gần đúng)
 
Upvote 0
Web KT
Back
Top Bottom