Hướng dẫn lệnh find.

  • Thread starter Thread starter sealand
  • Ngày gửi Ngày gửi
Liên hệ QC

sealand

Thành viên gạo cội
Tham gia
16/5/08
Bài viết
4,883
Được thích
7,688
Giới tính
Nam
Nghề nghiệp
Kế Toán
Trong lệnh find khi tìm kiếm thường trả về giá trị có chứa giá trị tìm(Giống như contains trong AutoFilter). Ví dụ:
Chuỗi tìm: "AH" thì các chuỗi sau sẽ thấy: "AHQ12","MAH08"."AHS35"....

Nay mình muốn là thế nào lệnh find chỉ tìm các chuôi bắt đầu bằng giá trị tìm. Ví dụ trên lệnh trả về:
"AHQ12"."AHS35" và bỏ qua "MAH08" (Giống như Begins with trong AutoFilter)
Mong các bạn hướng dẫn giùm.
 
Trong lệnh find khi tìm kiếm thường trả về giá trị có chứa giá trị tìm(Giống như contains trong AutoFilter). Ví dụ:
Chuỗi tìm: "AH" thì các chuỗi sau sẽ thấy: "AHQ12","MAH08"."AHS35"....

Nay mình muốn là thế nào lệnh find chỉ tìm các chuôi bắt đầu bằng giá trị tìm. Ví dụ trên lệnh trả về:
"AHQ12"."AHS35" và bỏ qua "MAH08" (Giống như Begins with trong AutoFilter)
Mong các bạn hướng dẫn giùm.
Chưa rõ anh định làm gì, nhưng em nghĩ trường hợp này anh dùng hàm LEFT thì đúng hơn chứ!
Ví dụ:
PHP:
=LEFT(Chuổi gốc,LEN(Chuổi tìm))=Chuổi tìm
Còn trong VBA em nghĩ dùng Like Operator là gọn nhất
Ví dụ:
PHP:
Chuổi tìm Like "AH*"
 
Lần chỉnh sửa cuối:
Trong lệnh find khi tìm kiếm thường trả về giá trị có chứa giá trị tìm(Giống như contains trong AutoFilter). Ví dụ:
Chuỗi tìm: "AH" thì các chuỗi sau sẽ thấy: "AHQ12","MAH08"."AHS35"....

Nay mình muốn là thế nào lệnh find chỉ tìm các chuôi bắt đầu bằng giá trị tìm. Ví dụ trên lệnh trả về:
"AHQ12"."AHS35" và bỏ qua "MAH08" (Giống như Begins with trong AutoFilter)
Mong các bạn hướng dẫn giùm.
Cái này anh cho nó 1 cái if thử là khi mình find ra kết quả là 1 thì lấy (Ký tự ban đầu anhư anh nói) còn nếu như lớn hơn 1 thì anh bỏ qua.
Hỏng biết phải vậy không. :-=
 
Cái này anh cho nó 1 cái if thử là khi mình find ra kết quả là 1 thì lấy (Ký tự ban đầu anhư anh nói) còn nếu như lớn hơn 1 thì anh bỏ qua.
Hỏng biết phải vậy không. :-=
Dùng hàm Find và chỉ lấy nếu kết quả của Find = 1 thì ngon lành rồi... Nhưng ác cái nếu tìm không thấy lại phải thêm ISERROR để bẩy lổi ---> Hóa ra hàm lại dài thêm
 
Các bạn hiểu nhầm 1 chút, ý mình nói là lệnh find trên Menu Edit ấy. Mình muốn dùng lệnh này trong VBA để tìm kiếm dữ liệu. Phải thừa nhận nó nhanh hơn For...Next... nhiều nhưng ác nỗi nó lại dính cái tật trên. Mình ví dụ code sau:

Mã:
Private Sub dkien_change()
kt = UCase(dkien) & "*"
If listBox1.Listcount>0 then ListBox1.Clear
With Sheet1.Range("a1:a" & Sheet1.[a56536].End(xlUp).Row)
    Set c = .Find(kt, LookIn:=xlValues, LookAt:=xlPart)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            ListBox1.AddItem c
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With

End Sub
 
Lần chỉnh sửa cuối:
Các bạn hiểu nhầm 1 chút, ý mình nói là lệnh find trên Menu Edit ấy. Mình muốn dùng lệnh này trong VBA để tìm kiếm dữ liệu. Phải thừa nhận nó nhanh hơn For...Next... nhiều nhưng ác nỗi nó lại dính cái tật trên. Mình ví dụ code sau:

Mã:
Private Sub dkien_change()
kt = UCase(dkien) & "*"
If listBox1.Listcount>0 then ListBox1.Clear
With Sheet1.Range("a1:a" & Sheet1.[a56536].End(xlUp).Row)
    Set c = .Find(kt, LookIn:=xlValues, LookAt:=xlPart)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            ListBox1.AddItem c
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With

End Sub
Anh dùng thử LookAt:=xlWhole xem.
Nhưng mà dùng với điều kiện Change thì mệt lắm. Nó nhảy liên tục.
Anh dùng qua AdFi và khi nhập điều iện xong và Enter thì tìm, em thấy có vẻ nhanh hơn.
 
Ồ! Cách của Thu Nghi hay. Đến giờ mình test không thấy lỗi. Trwớc đây mình cứ nghĩ Từ khóa đó tìm trọn ô đúng với chuỗi tìm cơ
Cám ơn các bạn nhé.
 
Lần chỉnh sửa cuối:
Các bạn hiểu nhầm 1 chút, ý mình nói là lệnh find trên Menu Edit ấy. Mình muốn dùng lệnh này trong VBA để tìm kiếm dữ liệu. Phải thừa nhận nó nhanh hơn For...Next... nhiều nhưng ác nỗi nó lại dính cái tật trên. Mình ví dụ code sau:

Mã:
Private Sub dkien_change()
kt = UCase(dkien) & "*"
If listBox1.Listcount>0 then ListBox1.Clear
With Sheet1.Range("a1:a" & Sheet1.[a56536].End(xlUp).Row)
    Set c = .Find(kt, LookIn:=xlValues, LookAt:=xlPart)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            ListBox1.AddItem c
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
 
End Sub
Em nghĩ dùng lệnh Find cộng thêm 1 vòng lập chưa chắc đã nhanh hơn AutoFilter + vòng lập đâu ---> Đã vậy AutoFilter lại cực kỳ đơn giản (như anh đã nói điều kiện Filter là Begins With = điều kiện)
Nếu là em thì em làm như sau:
PHP:
Private Sub dkien_Change()
  Dim Clls As Range
  If ListBox1.ListCount > 0 Then ListBox1.Clear
  With Sheet1.Range(Sheet1.[A1], Sheet1.[A56536].End(xlUp))
    .AutoFilter 1, dkien & "*"
    For Each Clls In Intersect(.Cells, .Offset(1)).SpecialCells(12)
      ListBox1.AddItem Clls
    Next Clls
    .AutoFilter
  End With
End Sub
Loại bài này em đã từng làm tại đây:
Tạo hiệu ứng cho UserForm
http://www.giaiphapexcel.com/forum/showthread.php?t=24123
 
Lần chỉnh sửa cuối:
Mấy bài này của AnhTuan1066 hiện đã trong bộ sưu tập của mình rồi và mình cũng đã để ý đoạn code nạp Listbox của AnhTuan trong bài làm form trong suốt. Quá hay ấy chứ.
AnhTuan để anh em tham khảo code trong các bài về sau với. Mình sưu tầm được cuốn các hàm API nhưng thực sự ù tai quá. Xem code của AnhTuan vỡ vạc ra chút nào chăng.
Cám ơn các bạn lưu tâm giúp.
 
Mã:
Private Sub dkien_change()
kt = UCase(dkien) & "*"
If listBox1.Listcount>0 then ListBox1.Clear
With Sheet1.Range("a1:a" & Sheet1.[a56536].End(xlUp).Row)
    Set c = .Find(kt, LookIn:=xlValues, LookAt:=xlPart)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
8             ListBox1.AddItem c
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With

End Sub

Hình như chỉ cần sửa lại dòng lệnh 8 này là xài được rồi, Ví dụ
PHP:
If InStr(C.value, DKien) = 1 then ListBox1.AddItem c
 
Web KT

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

Back
Top Bottom