Giúp đỡ không lọc được dữ liệu với hàm Filter2DArray

Liên hệ QC

Mr.hieudoanxd

Thành viên thường trực
Tham gia
25/10/19
Bài viết
322
Được thích
150
Chào các anh/chị trên diễn đàn!
Em đang tập sử dụng Userform trong việc tra cứu truy vấn định mức kèm theo TT12 -BXD phục vụ mục đích tra cứu các mã hiệu xây dựng mà không cần mở phần mềm dự toán. Trong quá trình thao tác, em đã nạp được dữ liệu vào các mảng và một số thứ liên quan. Tuy nhiên gặp những vấn đề sau:
1. Khi sử dụng hàm Filter2DArray của anh ndu96081631 để lọc dữ liệu từ mảng nhằm mục đính tìm kiếm nhanh thì code không chạy, không rõ lỗi lầm ở đâu. Mong các anh tìm giúp và hướng dẫn sửa giúp.
2. File em test em sử dụng phương pháp mở file để đọc dữ liệu đưa vào mảng, tuy nhiên khi mở file tốc độ khá chậm (do dung lượng file "TT12-BXD.xlsx" khá cao). Nếu đưa toàn bộ dữ liệu của file "TT12-BXD.xlsx" vào file Test "lay dinh muc cong viec.xlsb" thì lại làm tăng dung lượng file lên khá nhiều. Vậy mong các anh/chị giúp em phương án nào tốt hơn, tốc độ nhanh hơn ạ.
Các anh/chị vui lòng download về và mở file "lay dinh muc cong viec.xlsb" ạ
Em chân thành cảm ơn!
 

File đính kèm

  • Lay dinh muc cong viec.zip
    3.6 MB · Đọc: 9
Chào các anh/chị trên diễn đàn!
Em đang tập sử dụng Userform trong việc tra cứu truy vấn định mức kèm theo TT12 -BXD phục vụ mục đích tra cứu các mã hiệu xây dựng mà không cần mở phần mềm dự toán. Trong quá trình thao tác, em đã nạp được dữ liệu vào các mảng và một số thứ liên quan. Tuy nhiên gặp những vấn đề sau:
1. Khi sử dụng hàm Filter2DArray của anh ndu96081631 để lọc dữ liệu từ mảng nhằm mục đính tìm kiếm nhanh thì code không chạy, không rõ lỗi lầm ở đâu. Mong các anh tìm giúp và hướng dẫn sửa giúp.
2. File em test em sử dụng phương pháp mở file để đọc dữ liệu đưa vào mảng, tuy nhiên khi mở file tốc độ khá chậm (do dung lượng file "TT12-BXD.xlsx" khá cao). Nếu đưa toàn bộ dữ liệu của file "TT12-BXD.xlsx" vào file Test "lay dinh muc cong viec.xlsb" thì lại làm tăng dung lượng file lên khá nhiều. Vậy mong các anh/chị giúp em phương án nào tốt hơn, tốc độ nhanh hơn ạ.
Các anh/chị vui lòng download về và mở file "lay dinh muc cong viec.xlsb" ạ
Em chân thành cảm ơn!
Trong file bạn gửi không thấy có hàm Filter2DArray.
Mình đoán lỗi là do sai tên Textbox, bạn thử sửa lại Name Textbox: txbtimkiem > txbSearch cho đúng với Private Sub txbSearch_Change() thì sự kiện mới thực hiện khi gõ nội dung vào ô tìm kiếm.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn sửa lại Name Textbox: txbtimkiem > txbSearch cho đúng với Private Sub txbSearch_Change() thì sự kiện mới thực hiện khi gõ nội dung vào ô tìm kiếm.
Vâng ạ, là lỗi của em, do em tạo file test nhưng không sửa hết. Em đã sửa lại rồi tuy nhiên em thử tìm từ khóa bê tông chẳng hạn, kết quả lại ra không đúng anh ạ!
 

File đính kèm

  • Lay dinh muc cong viec.zip
    3.7 MB · Đọc: 6
Upvote 0
Vâng ạ, là lỗi của em, do em tạo file test nhưng không sửa hết. Em đã sửa lại rồi tuy nhiên em thử tìm từ khóa bê tông chẳng hạn, kết quả lại ra không đúng anh ạ!
Private Sub txbSearch_Change()

Dim artempt()
On Error Resume Next
If Len(Trim(txbSearch.Value)) = 0 Then Me.lbResult.List() = arDM: Exit Sub
artempt = Filter2DArray(arDM, 1, "*" & txbSearch.Value & "*", False)
If Not IsArray(artempt) Then
artempt = Filter2DArray(arDM, 2, "*" & txbSearch.Value & "*", False)
If Not IsArray(artempt) Then Exit Sub
End If
Me.lbResult.List() = IIf(Trim(txbSearch.Text) = "", arDM, artempt)

End Sub

Bạn sửa chỗ mầu đỏ số 1 thành 2 chứ lọc ở cột 1 chỉ có mã định mức sao ra Bê tông ở cột 2 được.
 
Upvote 0
Cảm ơn anh!. Có lẽ em nên tạo thêm 1 cột nữa để tra cứu theo tên mã hiệu định mức.
Tiện anh đã xem qua bài của em rồi anh, anh có phương án nào tăng tốc code nạp dữ liệu vào không ạ!
 
Upvote 0
Cảm ơn anh!. Có lẽ em nên tạo thêm 1 cột nữa để tra cứu theo tên mã hiệu định mức.
Tiện anh đã xem qua bài của em rồi anh, anh có phương án nào tăng tốc code nạp dữ liệu vào không ạ!
Bạn có thể thêm 1 Checkbox vào, khi nào tìm kiếm mã định mức thì đánh dấu check vào ô (Thường khi mình làm form kiểu tìm kiếm như vậy mình hay kết hợp Checkbox thay cho Label luôn)
Select Case CheckBox1
Case True: artempt = Filter2DArray(arDM, 1, "*" & txbSearch.Value & "*", False)
Case False: artempt = Filter2DArray(arDM, 2, "*" & txbSearch.Value & "*", False)
End Select
Tốc độ thì mình không để ý, quen làm việc với file trên 20mb rồi nên mở file của bạn mình thấy bình thường không thấy chậm (không biết do máy tính không). File danh mục đó cỡ 20k dòng thì đưa luôn vào 1 file cho tiện chứ tách 2 file mắc công.
 
Upvote 0
Rất cảm ơn anh!. Có 1 vấn đề em mới phát hiện ra. khi em click chọn đối tượng trên lbResult kết quả tại 3 listbox: lbNC, lbVL, lbMay ra kết quả đúng, tuy nhiên khi lọc dữ liệu với txbSearch, các kết quả hiển thị lại không đúng nữa
Ví dụ anh gõ thử bê tông và chọn vào AF.42117 phần vật liệu hiện thêm gạch bê tông 9,5..., máy có thêm máy trộn vữa
còn khi select tại lbresult không chọn thì kết quả lại ra đúng
. Soi mãi mà không tìm được nguyên nhân. :(( học mãi vẫn ngu
 

File đính kèm

  • Lay dinh muc cong viec3.zip
    3.7 MB · Đọc: 18
Upvote 0
Rất cảm ơn anh!. Có 1 vấn đề em mới phát hiện ra. khi em click chọn đối tượng trên lbResult kết quả tại 3 listbox: lbNC, lbVL, lbMay ra kết quả đúng, tuy nhiên khi lọc dữ liệu với txbSearch, các kết quả hiển thị lại không đúng nữa
Ví dụ anh gõ thử bê tông và chọn vào AF.42117 phần vật liệu hiện thêm gạch bê tông 9,5..., máy có thêm máy trộn vữa
còn khi select tại lbresult không chọn thì kết quả lại ra đúng
. Soi mãi mà không tìm được nguyên nhân. :(( học mãi vẫn ngu
Private Sub lbResult_Change()
...
vtri = lbResult.ListIndex + 1
...
Khi Sort theo giá trị tìm kiếm thì mảng trong Listbox lbResult vị trí sẽ khác với mảng nạp từ sheet Xay Dung thì kết quả hiện ra tại lbNC sẽ không đúng vị trí. Thường để đơn giản khi nạp mảng mình thêm 1 cột Số thứ tự, cột này sẽ ghi nhớ vị trí thứ tự dòng ban đầu, khi muốn tra lại vị trí thì đối chiếu số thứ tự đó để xác định lại vị trí ban đầu.
 
Upvote 0
Private Sub lbResult_Change()
...
vtri = lbResult.ListIndex + 1
...
Khi Sort theo giá trị tìm kiếm thì mảng trong Listbox lbResult vị trí sẽ khác với mảng nạp từ sheet Xay Dung thì kết quả hiện ra tại lbNC sẽ không đúng vị trí. Thường để đơn giản khi nạp mảng mình thêm 1 cột Số thứ tự, cột này sẽ ghi nhớ vị trí thứ tự dòng ban đầu, khi muốn tra lại vị trí thì đối chiếu số thứ tự đó để xác định lại vị trí ban đầu.
Em làm được rồi, mọi thứ trông có vẻ đơn giản nhưng do không hiểu bản chất nên cứ loay hoay mãi. Cảm ơn anh!
 
Upvote 0
Web KT

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

Back
Top Bottom