Nhờ trợ giúp code tìm kiếm trong form (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

van_thanh_phong

Thành viên chính thức
Tham gia
25/6/08
Bài viết
87
Được thích
10
Nghề nghiệp
Giáo viên
Nhờ sự giúp đỡ nhiệt tình của bác Sealand mà tôi đã có một form nhập liệu hơn cả mong đợi.
Sau khi sử dụng lại nảy sinh vấn đề là
1. Tìm kiếm dữ liệu trong form thỏa mãn một số điều kiện
Có thể tìm theo tên học sinh,năm sinh,nữ,DT,MSHS(xem file đính kèm sẽ chi tiết hơn) hoặc nhiều điều kiện cùng một lúc
2. Sau khi tìm xong nếu click vào nút lệnh:"Trích xuất dữ liệu" sẽ tạo 1 sheet mới với nội dung là dữ liệu vừa tìm được
Rất mong được sự giúp đỡ của của các thành viên.
Chân thành cảm ơn !
 
Chỉnh sửa lần cuối bởi điều hành viên:
Yêu cầu của bạn mình cũng đã từng tham gia với 1 số bạn, nhưng mình thấy tầm hỏi của bạn chắc chưa thể sưu tầm tự làm được (Nếu không phải thông cảm nha), mình sẽ cùng bạn làm 1 lần nữa. Trước hết, 1 số vấn đề bạn phải thống nhất;
-Đúng sai cũng phải có ý kiến phản hồi để còn biêt mình làm đúng hay sai.
-Nhập thật nghiêm túc hồ sơ 10 học sinh trở lên. Nhiều vì còn Test lọc, nhập nghiêm túc vì nó sẽ ảnh hưởng đến kết qủa lọc
-Để dễ sử lý chỉ nên lọc 1 điều kiện mỗi lần lọc thôi. Khi nắm vũng sẽ triển khai lọc đa điều kiện
 
Upvote 0
Trước hết minh rất cảm ơn tấm chân tình tận tình giúp đỡ của Anh Sealand !Quả thực mình không biết phải cảm ơn như thế nào nữa,mình rất muốn học hỏi!
file trước của Sealand giúp mình rất nhiều về cod để mình học tập.Diễn đàn thực là một lớp học lí tưởng cho những ai có trình độ y tờ như mình!
( Tìm theo tên học sinh không phân biệt chữ hoa hay chữ thường)
Minh quên !file trước của bạn gởi cho mình còn 1 chỗ sót.Mình đã chạy thử và sửa lại rồi nên không thông báo cho bạn biết.thành thật xin lỗi bạn !
 
Lần chỉnh sửa cuối:
Upvote 0
-Đúng sai cũng phải có ý kiến phản hồi để còn biêt mình làm đúng hay sai.
-Nhập thật nghiêm túc hồ sơ 10 học sinh trở lên. Nhiều vì còn Test lọc, nhập nghiêm túc vì nó sẽ ảnh hưởng đến kết qủa lọc
-Để dễ sử lý chỉ nên lọc 1 điều kiện mỗi lần lọc thôi. Khi nắm vũng sẽ triển khai lọc đa điều kiện

Mình xin gửi đến bạn dữ liệu để tạo code tim kiếm (van_thanh_phong đã mở topic). dữ liệu có chữ hoa, chữ thường có ảnh hưởng gì không bạn? (nếu có bạn vui lòng chỉnh lại giúp-có 2 dòng thôi)

Mình nghĩ sao lại không để dữ liệu tự xuất hiện thay vì phải bấm "TIM KIEM", bạn thấy có hợp lý không?

Cám ơn bạn đã dành thời gian để giúp mình.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Rất cảm ơn bạn đã góp ý,mình thấy như vậy cũng rất tiện lợi.
Tìm theo tên không phân biệt chữ hoa hay chữ thường( đễ dễ dàng tìm kiếm !)
 
Upvote 0
Ở đây ta lọc theo tiếng Việt có dấu nên khi so sánh gặp rất nhiều khó khăn, mình cứ mạo muội đưa ra 1 phương án, các bạn tham khảo xem. Trên diễn đàn đã có hàm chuyển Tiếng Việt thành không dấu (Hình như của Hoang Danh thì phải) ta sưu tầm về ghép vào để tìm theo không dấu và không phân biệt Hoa-Thường cho tiện sử dụng.
Việc xoá và tạo mới 1 sheet Kqua theo minh không cần thiết mà làm chậm tốc độ sử lý. Ta cứ tạm dùng Sheet K/Quả
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Sealand đã nhiệt tình giúp đỡ !mình thấy như vậy là cũng tạm ổn rồi.Mình sẽ coi lại cod, có gì không hiểu mình sẽ nhờ Sealand trợ giúp !Mình biết hỏi nhiều sẽ làm các thành viên trong diễn đàn thấy ác cảm và khó chịu!Nhưng trình độ y tờ như mình thì............
Rất mong sự giúp đỡ của các thành viên trong diễn để mình ngày càng tiến bộ!
Chân thành cảm ơn !
 
Upvote 0
Bạn lại sai rồi, hoàn toàn không có vấn đề gì khi hỏi nhiều. Cái khó là bố trí thế nào để ngoài cái riêng của mỗi người, chúng ta cùng nhau làm được cái gì đó. Mình biết là nó rất nhỏ nhoi, nhưng nó cũng là niềm vui chứ. Chúng ta đều là những người kẻ trước người sau thôi.
 
Upvote 0
Để cho bắt mắt, tiện quan sát ta đổi sang dùng Listview thay cho ListBox. Nhưng ta phải sử lý tiếng Việt vì Listview không hỗ trợ Unicode. Tiện thể, mình cũng sử lý chỉ cần gõ lọc không dấu chữ thường là được.
Mình chép 2 hàm sử lý của anh Phạm Duy Long.
 

File đính kèm

Upvote 0
Cách viết của Sealand rất dễ hiểu.
Dùng chươngng trình con(tạm gọi như vậy), khi nào cần dùng thì gọi ra mà dùng như vậy rất dễ cho người học.Qua các file của Sealand tôi học học được rất nhiều.
Nhưng vì trình độ tôi y tờ quá nên có những chỗ đọc hoài mà như " nước đổ lá khoai".Sealand có thể giải thích giùm được không !
PHP:
Sub napDS()
Dim It As ListItem
Dim Rg As Range, Kt As Boolean
Dim i, j, k
If Me.L_Ds.ListItems.Count > 0 Then Me.L_Ds.ListItems.Clear
Set Rg = HS.Range("B5:M" & HS.[b65536].End(xlUp).Row)
For i = 1 To Rg.Rows.Count
If Ktra(i + 4, Me.C_cot.ListIndex + 2, dk1, dk3) Then
Set It = Me.L_Ds.ListItems.Add(, , i + 4)
For j = 1 To 12
It.SubItems(j) = UV(Rg.Cells(i, j))
Next
End If
Next
If Me.L_Ds.ListItems.Count > 0 Then Me.L_Ds.ListItems(1).Selected = True
End Sub

Và còn vài chỗ nữa mình cũng.....nhưng khi nào hiểu được cái này rồi mới tính tiếp và nhờ Sealand chỉ giúp !
Cảm ơn vì tấc cả những gì Sealand đã dạy cho mình!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Thông cảm mình rườm rà 1 chút, bạn dùng động từ dạy mà mình ngại quá, chỉ là chỉ bảo nhau chút thôi:

Mã:
Sub napDS()
Dim It As ListItem
  Dim Rg As Range, Kt As Boolean
Dim i, j, k
  ‘Khai báo các biến có liên quan
  
If Me.L_Ds.ListItems.Count > 0 Then Me.L_Ds.ListItems.Clear
  ‘Nếu List dã có dòng nào thì xoá đi để nạp mới
  
Set Rg = HS.Range("B5:M" & HS.[b65536].End(xlUp).Row)
  ‘Gán biến Rg cho vùng dữ liệu nguồn cần nạp
  
For i = 1 To Rg.Rows.Count
  ‘Lần lượt từng dòng trong vùng

If Ktra(i + 4, Me.C_cot.ListIndex + 2, dk1, dk3) Then
  ‘ Kiểm tra dữ liệu nếu đã đánh dấu nút lọc và chuỗi đk3 có tìm thấy thì
  
Set It = Me.L_Ds.ListItems.Add(, , i + 4)
  ‘Thêm 1 mục danh sách với tên mục bằng dòng dữ liệu trên Sheet
  
For j = 1 To 12
  It.SubItems(j) = UV(Rg.Cells(i, j))
  ‘Từ cột đến cột 12 điền giá trị ô 1 dến ô 12 dòng i


  Next
End If
Next
If Me.L_Ds.ListItems.Count > 0 Then Me.L_Ds.ListItems(1).Selected = True
  ‘Nếu có dòng DS thì đưa con trỏ về dòng đầu tiên
  
End Sub
Có 1 mẹo nhỏ ở đây: Cột đầu là cột trả về giá trị như =Listview1.ListItems(i)
Vậy thì ta gắm luôn cột 1 bằng i+4 tức là số TT dòng trong bảng tính, khi cần sử lý thì chỉ việc lấy số này là số dòng trong bảng tính. Nó đảm bảo chính xác tuyệt đối chứ không bị sai sót như sử dụng phương thức tìm kiếm khác.
 
Lần chỉnh sửa cuối:
Upvote 0
Khi tham khảo và sử dụng file của Sealand trợ giúp quả thực rất hữu ích trong quá trình học tập và ứng dụng.
Trong khi sử dụng lại nảy sinh yêu cầu là săp xếp lại cột họ và tên trong sheet KET QUA TIM KIEM theo thứ tự từ A -->Z
Ví dụ:Trần văn A tên là A
Nguyễn thị Minh Hằng tên là Hằng
Khi click vào nút lệnh ho va ten (trong file đính kèm ) sẽ sắp xếp lại cột họ và tên theo tên.Rất mong được sự trợ giúp của các thành viên trong diễn đàn .
Chân thành cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Cái vụ sắp xếp tiếng Việt này không đơn giản đâu nha. Nên để dịp khác tiêu hoá ổn rồi tính sau.
Tham khảo tiện ích của bác Phạm Duy Long với mã nguồn mở nha. Sau ta tích hợp code vào file và sử lý.
 
Upvote 0
Ta có thể dùng hàm để tách tên
PHP:
Private Function Tachten(ten As String, lg As Integer)
Dim j As Integer
Name = Trim(ten)
For j = Len(Name) To 1 Step -1
If Mid(Name, j, 1) = " " Then
If lg = "1" Then
Tachten = Right(Name, Len(Name) - j)
Else
Tachten = Left(Name, j)
End If
Exit For
End If
Next
End Function
Rồi gán tên vào một cột, sau đó sort cột đó.nhưng để viểt một nút lệnh hoàn chỉnh thì mình đành bó tay.Rất mong Sealand chỉ giúp
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cái hàm tách tên của bạn là chuyện ngày xưa mất rồi. Bạn không thấy tên diễn đàn sao?-GIAI PHAP
GPE không những cùng nhau tìm cách giải quyết vấn đề mà còn hoàn thiện nữa. Ví dụ hôm nay mình đưa ra 1 hàm tách tên khác tuy ngắn nhưng tốc độ chắc chắn hàm bạn nêu phải nể. Bạn xem nhé:

Mã:
Function Tachten(Hoten As String)
Dim tam
If InStr(1, Hoten, " ") = 0 Then Tachten = "": Exit Function
tam = Split(Hoten, " ")
Tachten = tam(UBound(tam))
End Function
 
Upvote 0
Trình độ y tờ của mình thì làm sao so sánh với Sealand được !.Quả thực hàm tách tên của Sealand làm mình thán phục !tốc độ rất nhanh
(Hàm này sẽ hoàn thiện hơn nếu bổ sung: hoten=trim(hoten) )
À! còn việc mình nhờ Sealand lúc trước thì sao !( Tạo nút lệnh sắp xếp theo tên ).Sealand giúp mình nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Mình nói vậy không phải không phải mình so sánh giữa mình và bạn mà ý mình là chúng ta gom nhặt được gì sau bao công tìm tòi của mọi người. Nói thực, đây là kết quả của nhiều lần Ndu và 1 số bạn khác giới thiệu 2 hàm sử lý chuỗi là Split và Join mình rất thích.
Còn sắp xếp thì mình làm sau 1 chút.

Bạn kiểm tra giùm nha (Cái này chỉ xếp theo tên như bạn yêu cầu)
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Thật tuyệt!
Sealand thật nhiệt tình quá !
Mình có vấn đề này nhờ Sealand chỉ thêm cho
Tại cell D3 minh nhập ngày tháng năm sinh. có thể dạng số hoặc dạng chuỗi kí tự: Vd:12/03/1998 hoặc 1998 đều được
Minh đã dùng công thức để tính tuổi tại cell E3 như sau:
=value(year(now())) - value(right(trim(D3),4))
nhưng khi dùng trong công thức này chung với sheet có cod thì chạy rất chậm( Khoảng 6s mới xong 1 Record )
Vậy có cách nào viết cod tính tuổi theo yêu cầu trên không ? (nhập tuổi dạng: dd/mm/yyyy hay yyyy đều được )
Chân thành cảm ơn !
 
Upvote 0
Bạn có thể bỏ 2 hàm value cũng được. Chắc là có vấn đề gì đó chứ mình cho đây là công thức nhanh rồi (Công thức gốc Exc mà)
Bạn nói đến 6s thì kỳ lạ thật.
 
Upvote 0
Mình gởi file để Sealand kiểm tra thử xem thế nào nha!
Nút lệnh OK trong EditRecord và nút lệnh sắp xếp họ và tên cũng rất chậm (khoảng 7 s).
Cảm ơn nhiều !
 
Upvote 0
Web KT

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

Back
Top Bottom