Tổng hợp về phương thức tìm kiếm FIND (Find Method)

Liên hệ QC

hoangdanh282vn

Nguyễn Cảnh Hoàng Danh
Thành viên danh dự
Tham gia
21/12/07
Bài viết
1,900
Được thích
5,277
Nghề nghiệp
Kinh doanh các mặt hàng văn phòng phẩm
Find Method

Phương thức Find tìm kiếm thông tin trong một vùng nào đó, kết quả trả về là ô đầu tiên chứa đựng thông tin được tìm thấy. Nếu không tìm thấy thông tin trong vùng tìm kiếm thì phương thức Find sẽ trả về Nothing.

Cú pháp phương thức như sau :

Expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

Expression : Vùng tìm kiếm. Biểu thức Expression phải được khai báo và nó trả về một đối tượng Range.

What : Dữ liệu hay thông tin cần tìm kiếm. Đây là một đòi hỏi bắt buộc phải khai báo. Dữ liệu tìm kiếm có thể là một chuỗi ký tự hay một dạng dữ liệu nào đó có trong Excel và được khai báo dưới dạng Variant.

After : Ô được chọn để xác định vị trí tìm kiếm, là tùy chọn, được khai báo dưới dạng Variant, có thể bỏ qua. Việc tìm kiếm sẽ bắt đầu từ ô này. Ô này tương ứng với vị trí của ô hiện hành sau khi việc tìm kiếm hoàn tất. Ô xác định vị trí tìm kiếm này sẽ không được đưa vào quá trình tìm kiếm trừ khi vùng tìm kiếm bao gồm cả ô này. Nếu đối số này không được khai báo thì việc tìm kiếm sẽ bắt đầu sau ô trên cùng bên trái của vùng cần tìm kiếm.

LookIn : Không bắt buộc, khai báo dạng Variant. Đây là một dạng thông tin và thường có giá trị là xlValues.

LookAt : Cách thức tìm kiếm. Là đối số tùy chọn, không bắt buộc, khai báo dưới dạng Variant. LookAt có 2 giá trị : xlWhole (Tìm toàn bộ) hoặc xlPart (tìm một phần).

SearchOrder : Xác định dạng thứ tự tìm kiếm, là tùy chọn không bắt buộc, khai báo dưới dạng Variant. SearchOrder có 2 dạng ứng với 2 hàng số : xlByRows (theo thứ tự dòng) hoặc xlByColumns (theo thứ tự cột)

SearchDirection : Hướng tìm kiếm, là tùy chọn. SearchDirection có 2 dạng ứng với 2 hằng số : xlNext (Tìm kế tiếp, là giá trị mặc định), xlPrevious (Tìm trước đó)

MatchCase : Là tùy chọn để xác định kiểu tìm kiếm có phân biệt chữ Hoa với chữ thường, khai báo dưới dạng Variant. Khai báo là True nếu ta muốn tìm kiếm chính xác. Giá trị mặc định là False.( Không phân biệt chữ in Hoa với chữ thường)

MatchByte : Không bắt buộc, khai báo dạng Variant. Chỉ sử dụng khi ta đã chọn hoặc cài đặt bộ hỗ trợ ngôn ngữ ký tự byte kép. Là True nếu ứng với bộ ký tự byte kép, False nếu ứng với bộ ký tự byte đơn.

SearchFormat : Tìm kiếm theo định dạng. Là tham số tùy chọn, khai báo dưới dạng Variant.

Lưu ý :

- Các thiết lập cho các đối số LookIn, LookAt, SearchOrder MatchByte sẽ được lưu mỗi lần ta sử dụng phương thức này (phương thức Find). Nếu ta không khai báo giá trị cho các đối số vào lần sử dụng phương thức Find tiếp theo, các giá trị thiết lập đã lưu trước đó sẽ được sử dụng. Việc thiết lập các đối số này làm thay đổi các tùy chọn thiết lập trong hộp thoại Find, và việc thay đổi các thiết lập trong hộp thoại Find sẽ làm thay đổi các giá trị đã lưu – là những giá trị được sử dụng nếu ta bỏ qua các đối số này. Để tránh xảy ra việc này, ta nên khai báo các đối số một cách rõ ràng mỗi lần sử dụng phương thức Find này.

- Ta có thể dùng phương thức FindNextFindPrevious để lặp lại việc tìm kiếm. Khi đến vị trí cuối của vùng tìm kiếm được xác định trước đó, excel sẽ bao phủ từ vị trí này đến vị trí đầu tiên của vùng tìm kiếm. Để ngưng việc tìm kiếm ngay khi động tác bao phủ này xảy ra, hãy lưu lại địa chỉ của ô đầu tiên tìm được, sau đó thử so sánh lần lượt mỗi địa chỉ ô được tìm thấy kế tiếp với địa chỉ ô vừa được lưu này.

============================@@@===========================​

Bài viết này tham khảo dựa trên bài dịch nguyên bản của anh Ca_dafi
(Còn tiếp)
 

File đính kèm

  • General about Find Method.rar
    53.4 KB · Đọc: 2,646
không có kết quả cần tìm kiếm thì kết quả trả về bị lỗi
Là đúng rồi. Tớ đang dùng find để tìm mã trùng trong bài bên cạnh đây. Cái find này chạy xong thì nó đặt within về sheet mới ức chế, thế là không thay đổi hàng loạt được.

Gặp lỗi trên, là phải on error resume next, mặc dù lệnh bỏ qua này nguy hiểm, nhưng với code khoảng 10 dòng thì nó xịn hơn cả thần chú.
 
Upvote 0
Là đúng rồi. Tớ đang dùng find để tìm mã trùng trong bài bên cạnh đây. Cái find này chạy xong thì nó đặt within về sheet mới ức chế, thế là không thay đổi hàng loạt được.

Gặp lỗi trên, là phải on error resume next, mặc dù lệnh bỏ qua này nguy hiểm, nhưng với code khoảng 10 dòng thì nó xịn hơn cả thần chú.
Người hỏi dùng từ "lỗi" lạng quạng mà người trả lời giải thích về phạm vi biến còn lạng quạng hơn.

Hàm Find khi không tìm được thì nó trả vè Nothing.
Lệnh Set gán cái Nothing này vào biến Rng. Gán Nothing thì chính xác là lệnh giải phóng bộ nhớ object (đối tượng).
Lệnh kế đó gọi thuộc tính Address của một đối tượng Rng (Range) chả có thực chất thì đương nhiên là bị lỗi "Object variable not set"
 
Upvote 0
.. . . .
Gặp lỗi trên, là phải on error resume next, mặc dù lệnh bỏ qua này nguy hiểm, nhưng với code khoảng 10 dòng thì nó xịn hơn cả thần chú.
Xài câu lệnh On Error Resume Next là người xài dao 2 lưỡi & rất dễ Đứt tay nha bạn;
Trong hàng trăm, hàng ngàn cái mã lỗi Err chì 1 hay 1 vài cái mà ta đã biết chắc là có thể bỏ qua (& đi tiếp) mà thôi;
Để chắc như bắp trong trường hợp như trường hợp dẫn ra trong bảng dữ liệu dưới đây mình đã viết vầy:
PHP:
Sub TimKiem()
 Dim Rws As Long
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String
 
 Rws = [C2].CurrentRegion.Rows.Count
 Rws = [C2].Parent.UsedRange.Rows.Count
 MsgBox Rws
 Set Rng = [C2].Resize(Rws)
 Set sRng = Rng.Find("nga", , xlFormulas, xlPart)
 If sRng Is Nothing Then
    MsgBox Error()
 Else
    MyAdd = sRng.Address
    Do
        MsgBox sRng.Offset(, 1).Value
        Set sRng = Rng.FindNext(sRng)
    Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
 End If
End Sub
STTHọ & TênSố tiền, K
112 cá nhân & cặp đôi9,257
13BLL Hưu trí VCS500
148 cá nhân & cặp đôi4,500
23Trương Đình Phước500
24Nguyễn Vinh500
25Phạm Đức Ninh500
26VC Bùi T. Ẩn1,000
27Chu Thái Bình500
28Hội Hưu trí PQLCL1,000
Cộng:18,257

Ghi thêm: Nếu ai đó muốn thử & bỏ kí tự 'a' trong từ "Nga" của dòng lệnh áp dụng phương thức tìm kiếm thì sẽ thấy rõ vấn đề thêm xíu
 
Upvote 0
Web KT
Back
Top Bottom