Tìm kiếm dữ liệu trong form

Liên hệ QC

doanhhoang79

Thành viên hoạt động
Tham gia
31/3/08
Bài viết
142
Được thích
18
Có ai có mẫu tìm kiếm dữ liệu trong Form không? Tôi đang muốn tham khảo

Ai biết chỉ cho tôi với,

Cảm ơn,
 
Em "mò" rồi nhưng vẫn không ra nên mới nhờ các bác hi..hi,
Theo cách của các bác đúng là hay lắm nhưng nhiều khi lĩnh vực này em thấy cũng khá phức tạp, chẳng han:

Kết hợp rất nhiều điều kiện để đang dạng hoá việc tìm kiếm như: gõ mã số; nếu không nhớ mã số thì gõ họ tên, hoặc chỉ cần gõ tên vào textbox,...
các cách của các bác mới chỉ có một ý thôi. Như vậy bắt buộc người nhập phải nhớ một thứ gì đó.
 
Lần chỉnh sửa cuối:
Upvote 0
Em "mò" rồi nhưng vẫn không ra nên mới nhờ các bác hi..hi,
Theo cách của các bác đúng là hay lắm nhưng nhiều khi lĩnh vực này em thấy cũng khá phức tạp, chẳng han:

Kết hợp rất nhiều điều kiện để đang dạng hoá việc tìm kiếm như: gõ mã số; nếu không nhớ mã số thì gõ họ tên, hoặc chỉ cần gõ tên vào textbox,...
các cách của các bác mới chỉ có một ý thôi. Như vậy bắt buộc người nhập phải nhớ một thứ gì đó.
Bạn xem file này nhé: Tìm kiếm với 3 điều kiện MÃ, TÊN và ĐƠN VỊ
Muốn Add 3 cột vào ListBox thì điều đầu tiên bạn phải chỉnh thuộc tính Columns Count = 3
như hình này:

attachment.php


Còn code thì cũng chẳng có gì...
PHP:
Private Sub TextBox1_Change()
  Dim Clls As Range, Temp As Variant, i As Long, FCol As Long
  Application.ScreenUpdating = False
  FCol = -(OptionButton1.Value + 2 * OptionButton2.Value + 3 * OptionButton3.Value)
  If Len(Trim(TextBox1.Value)) = 0 Then Exit Sub
  With Sheet1.Range(Sheet1.[A1], Sheet1.[A65536].End(xlUp)).Resize(, 3)
    Temp = .Value
    .Sort .Cells(2, FCol), 1, Header:=xlGuess
    .AutoFilter FCol, TextBox1.Value & "*"
    ListBox1.Clear
    For Each Clls In .Offset(1).Resize(, 1).SpecialCells(12)
      ListBox1.AddItem (Clls)
      ListBox1.List(i, 1) = Clls(, 2)
      ListBox1.List(i, 2) = Clls(, 3)
      i = i + 1
    Next
    .AutoFilter
    .Value = Temp
  End With
  Application.ScreenUpdating = True
End Sub
PHP:
Private Sub UserForm_Initialize()
  OptionButton1.Value = 1
End Sub
Bạn cứ so sánh code của ListBox 1 cột và ListBox 3 cột này xem chổ nào khác nhau nhé
 

File đính kèm

  • Form_Timkiem_3.xls
    77.5 KB · Đọc: 195
  • untitled.JPG
    untitled.JPG
    54.9 KB · Đọc: 343
Upvote 0
cái này không tìm kiếm được dữ liệu dạng số hả bạn ? có ai có cách khắc phục không ? chỉ mình với ..!
 
Upvote 0
Giải thích giúp mình dùm dòng ".Offset(1).SpecialCells(12).SpecialCells(2)" với
 
Upvote 0
Gíup mình làm thêm 1 bươ1c này nữa

Mình không thể tìm kiếm bằng số , mã hàng minh toàn bằng số thôi nế không thể tìm đươc thì tức lắm , minh đã kiếm file này lâu lăm rồi&&&%$r
 
Upvote 0
Mình không thể tìm kiếm bằng số , mã hàng minh toàn bằng số thôi nế không thể tìm đươc thì tức lắm , minh đã kiếm file này lâu lăm rồi&&&%$r
hì, tội nghiệp bác quá nhỉ, chẳng ai giúp. Code thì giữ nguyên, bạn chỉ cần format toàn bộ vùng dữ liệu đó sang dạng text là ok ngay thôi mà.
Chúc vui!
 
Upvote 0
Mình không thể tìm kiếm bằng số , mã hàng minh toàn bằng số thôi nế không thể tìm đươc thì tức lắm , minh đã kiếm file này lâu lăm rồi&&&%$r


hì, tội nghiệp bác quá nhỉ, chẳng ai giúp. Code thì giữ nguyên, bạn chỉ cần format toàn bộ vùng dữ liệu đó sang dạng text là ok ngay thôi mà.
Chúc vui!

Không thể Tìm kiếm dạng số mà bạn Format dạng Text được đâu nha bạn! Với AutoFilter thì nó rất rạch ròi, với Text thì nó cho thêm dấu chấm hỏi (?) hoặc dấu sao (*), chứ với Number thì vô phương!

Nhưng cũng phải có giải pháp chứ! Dựa vào File của Thầy NDU, tôi chỉnh lại như sau: Load Form lên, thêm cột phụ gán công thức ghép text vào mã số, a-lê-hấp thế là xong! Thoát Form thì xóa cột phụ. Các cấu trúc khác giữ nguyên!

PHP:
Option Explicit
Private Sub UserForm_Initialize()
  Application.ScreenUpdating = False
  With Sheet1
    .[D:D].Clear: .[D1] = "ExtraID"
    .[D2].FormulaR1C1 = "=""F"" & RC1": .[D2].Copy
    .Range("D2:D" & .Range("A65536").End(xlUp).Row).PasteSpecial
    .[A1].Select
  End With
End Sub
 
'==========================================================================
 
Private Sub UserForm_Terminate()
  With Sheet1
    .[D:D].Clear
    .[A:A].NumberFormat = "General"
  End With
  Application.ScreenUpdating = True
End Sub
 
'==========================================================================
 
Private Sub TextBox1_Change()
  Dim Clls As Range, Temp As Variant, i As Long, FCol As Long, Txb
  FCol = -(OptionButton1.Value + 2 * OptionButton2.Value + 3 * OptionButton3.Value)
  If OptionButton1.Value = True Then FCol = 4: Txb = "F" & TextBox1.Value Else Txb = TextBox1.Text
  If Len(Trim(TextBox1)) = 0 Or TextBox1 = "" Then ListBox1.Clear: Exit Sub
  With Sheet1.Range(Sheet1.[A1], Sheet1.[A65536].End(xlUp)).Resize(, 4)
    Temp = .Value
    .Sort .Cells(2, FCol), 1, Header:=xlGuess
    .AutoFilter FCol, Txb & "*"
    ListBox1.Clear
    For Each Clls In .Offset(1).Resize(, 1).SpecialCells(12)
      ListBox1.AddItem (Clls)
      ListBox1.List(i, 1) = Clls(, 2)
      ListBox1.List(i, 2) = Clls(, 3)
      i = i + 1
    Next
    .AutoFilter
    .Value = Temp
  End With
End Sub
 

File đính kèm

  • Form_Timkiem.xls
    91 KB · Đọc: 103
Lần chỉnh sửa cuối:
Upvote 0
Anh ndu! có thể tạo tiêu đề trong ListBox được không. Tiêu đề giống như trong Sheet1 (Mã|Họ và Tên|Đơn vị). Nếu có tiêu đề thì dễ nhìn dữ liệu hơn, phải không anh.
 
Upvote 0
Anh ndu! có thể tạo tiêu đề trong ListBox được không. Tiêu đề giống như trong Sheet1 (Mã|Họ và Tên|Đơn vị). Nếu có tiêu đề thì dễ nhìn dữ liệu hơn, phải không anh.

Được với điều kiện nguồn chính là Rowsource chứ không phải là List.

Đặt thuộc tính Column Head là TRUE.
 

File đính kèm

  • ListBoxRowSource.xls
    23 KB · Đọc: 37
Upvote 0
Anh Trọng Nghĩa! Làm theo cách của anh thì không thể tìm kiếm được khi kết hợp với code tìm kiếm của anh ndu. Thực hiện như code của anh ndu nhưng trong listbox có thêm hàng tiêu đề.
 
Upvote 0
Anh Trọng Nghĩa! Làm theo cách của anh thì không thể tìm kiếm được khi kết hợp với code tìm kiếm của anh ndu. Thực hiện như code của anh ndu nhưng trong listbox có thêm hàng tiêu đề.

Trong code ta linh hoạt một chút là được thôi!

Với bài gởi này, thay vì dùng AutoFilter của Excel thì ta dùng hàm Filter (Hàm Filter2DArray của ndu96081631) nhằm tăng tốc độ và cũng tránh rắc rối dữ liệu nguồn, ta thực hiện như sau:

PHP:
Private Sub TextBox1_Change()
    Dim sArray, FindArray, fCol As Long, fRow As Long
    sArray = Sheet1.Range(Sheet1.[A1], Sheet1.[A65536].End(xlUp)).Resize(, 3).Value
    fCol = -(OptionButton1.Value + 2 * OptionButton2.Value + 3 * OptionButton3.Value)
    FindArray = Filter2DArray(sArray, fCol, TextBox1.Text & "*", True)
    Source.Range("A:C").Clear
    
    If IsArray(FindArray) Then
        fRow = UBound(FindArray)
        Source.Range("A1").Resize(fRow, 3).Value = FindArray
        ListBox1.RowSource = "Source!A2:C" & fRow
    Else
        Source.Range("A1:C1").Value = Sheet1.Range("A1:C1").Value
        Source.Range("B2").Value = "No match found!"
        ListBox1.RowSource = "Source!A2:C2"
    End If
End Sub

Như vậy, dù tìm kiếm kiểu số hay kiểu chuỗi vẫn thực hiện được, mặt khác, khi dùng với Rowsource, ListBox sẽ hiển thị được cái tiêu đề.

Lưu ý: Có một sheet (Source) ẩn kiểu veryhidden để làm RowSource cho ListBox.
 

File đính kèm

  • Form_Timkiem_New.rar
    34.7 KB · Đọc: 145
Lần chỉnh sửa cuối:
Upvote 0
Anh Hoàng Trọng Nghĩa ơi. File tìm kiếm mới của anh khi nhập theo tên: nhập mấy kí tự đầu tiên thì nó mới search được, còn chỉ nhập mấy từ sau thì không search được. VD: search tên Phạm Minh Tiến -nếu gõ Phạm thì nó ra, còn gõ Minh hay Tiến thì nó báo ko tìm thấy.
Anh có cách nào search chữ Tiến hay chữ Minh thì nó ra luôn tên ko ?
 
Upvote 0
Anh Hoàng Trọng Nghĩa ơi. File tìm kiếm mới của anh khi nhập theo tên: nhập mấy kí tự đầu tiên thì nó mới search được, còn chỉ nhập mấy từ sau thì không search được. VD: search tên Phạm Minh Tiến -nếu gõ Phạm thì nó ra, còn gõ Minh hay Tiến thì nó báo ko tìm thấy.
Anh có cách nào search chữ Tiến hay chữ Minh thì nó ra luôn tên ko ?

Sửa lại tại đoạn này:

Mã:
[B]FindArray = Filter2DArray(sArray, fCol, [COLOR=#0000cd]TextBox1.Text [/COLOR][COLOR=#ff0000]& "*"[/COLOR], True)[/B]

thành:

Mã:
[B]FindArray = Filter2DArray(sArray, fCol, [COLOR=#ff0000]"*" & [/COLOR][COLOR=#0000cd]TextBox1.Text[/COLOR][COLOR=#ff0000] & "*"[/COLOR], True)[/B]

Có nghĩa rằng chỉ thêm "*" & đằng trước nữa là xong!

Nói chung, nó sẽ lọc từ na ná cho đến khi nhập đúng hết.
 
Upvote 0
anh Hoàng Trọng Nghĩa ơi. Cái hàm của anh tìm kiếm ok hết rồi nhưng chỉ còn 1 cái nữa là không có click tới tên cần tìm kiếm. Trong form có tên tìm kiếm nhưng khi click tên đó nó không nhảy qua excel tới ô đó. Anh coi giúp dùm em cái đó nữa nha!
 
Upvote 0
anh Hoàng Trọng Nghĩa ơi. Cái hàm của anh tìm kiếm ok hết rồi nhưng chỉ còn 1 cái nữa là không có click tới tên cần tìm kiếm. Trong form có tên tìm kiếm nhưng khi click tên đó nó không nhảy qua excel tới ô đó. Anh coi giúp dùm em cái đó nữa nha!

Cái này có gì đâu mà khó, chỉ cần double click vào cái ListBox với thủ tục dưới đây:

Mã:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim MyID As String
    MyID = ListBox1.List(, 0)
    Unload Me
    Range(Sheet1.[A1], Sheet1.[A65536].End(xlUp)) _
    .Find(MyID, LookIn:=xlValues, LookAt:=xlWhole) _
    .Resize(, 3).Select
End Sub
 

File đính kèm

  • Form_Timkiem_New.xls
    83 KB · Đọc: 86
Upvote 0
Nếu cột A của sheet1 có dữ liệu nhập là dữ liệu ngày (dd/mm/yyyy) thì code tìm kiếm bị lỗi khi double click vào listbox để tìm dòng, nhờ anh Hoàng Trọng Nghĩa sửa giúp code doubleclick vào listbox được không ạ?
 
Upvote 0
Cái này có gì đâu mà khó, chỉ cần double click vào cái ListBox với thủ tục dưới đây:

Mã:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim MyID As String
    MyID = ListBox1.List(, 0)
    Unload Me
    Range(Sheet1.[A1], Sheet1.[A65536].End(xlUp)) _
    .Find(MyID, LookIn:=xlValues, LookAt:=xlWhole) _
    .Resize(, 3).Select
End Sub

Anh Nghĩa hoặc ai biết xin giúp em thêm chút nũa nhé. Em muốn việc tìm kiếm này theo 2 điều kiện đồng thời. Ví dụ như tìm đồng thời theo tên và theo đơn vị thì phải code thế nào. Tất nhiên, em biết khi đó trên Form không phải là OptionButton mà phải chuyển thành Checkbox. Loay hoay mãi mà em không làm ra.
 
Upvote 0
Xin hỏi?
Làm thế nào trong list ta chọn đối tượng cần tìm (đưa chuột vào đối tượng trong list được to đậm như trong list) khi nhấp đúp chuột thì hiện ra riêng đồi tượng đó trong Sheets hoặc trong form (nếu tạo form). Việc đó VBA Excel có thực hiện được không ? nếu được thì viết Code như thế nào.
Rất mong hướng dẫn, giúp đở thêm. Xin cám ơn.
 
Upvote 0
Xin hỏi?
Làm thế nào trong list ta chọn đối tượng cần tìm (đưa chuột vào đối tượng trong list được to đậm như trong list) khi nhấp đúp chuột thì hiện ra riêng đồi tượng đó trong Sheets hoặc trong form (nếu tạo form). Việc đó VBA Excel có thực hiện được không ? nếu được thì viết Code như thế nào.
Rất mong hướng dẫn, giúp đở thêm. Xin cám ơn.

Để lọc nhiều cột thì bạn thử xem code ở chủ đề sau có đáp ứng được không. Nhân tiện nhờ bạn test hộ và cho biết.
Số tôi không may thì phải. Mình thì sẵn sàng giúp nhiều người nhưng nhờ vả thì không ai giúp.

http://www.giaiphapexcel.com/forum/...cột-lọc-tùy-ý-cột-số-tới-2-điều-kiện
 
Upvote 0
Để lọc nhiều cột thì bạn thử xem code ở chủ đề sau có đáp ứng được không. Nhân tiện nhờ bạn test hộ và cho biết.
Số tôi không may thì phải. Mình thì sẵn sàng giúp nhiều người nhưng nhờ vả thì không ai giúp.

http://www.giaiphapexcel.com/forum/...cột-lọc-tùy-ý-cột-số-tới-2-điều-kiện


Hic, người khác không hỏi Thầy thì chớ, Thầy mà hỏi thì ai đủ trình độ để trả lời chứ trời?
 
Upvote 0
Web KT
Back
Top Bottom