Vấn đề lọc danh sách trong Combobox

Liên hệ QC

Ếch Xanh

Thành viên tích cực
Tham gia
12/8/09
Bài viết
865
Được thích
1,572
Em có một danh sách, Làm sao em có thể tạo một Combobox (trên Form) gọi danh sách (danhsach) kia lên, nhưng không được trùng tên và không có dòng trắng?
Kính xin các Anh Chị, Thầy Cô hướng dẫn.
Em xin cảm ơn.
 

File đính kèm

Em có một danh sách, Làm sao em có thể tạo một Combobox (trên Form) gọi danh sách (danhsach) kia lên, nhưng không được trùng tên và không có dòng trắng?
Kính xin các Anh Chị, Thầy Cô hướng dẫn.
Em xin cảm ơn.
Cái này chắc bạn phải dùng một cột phụ để lọc duy nhất sau đó lấy cột phụ này làm nguồn cho Combobox thôi.
 
Upvote 0
Em có một danh sách, Làm sao em có thể tạo một Combobox (trên Form) gọi danh sách (danhsach) kia lên, nhưng không được trùng tên và không có dòng trắng?
Kính xin các Anh Chị, Thầy Cô hướng dẫn.
Em xin cảm ơn.

Vấn đề của bạn cũng là vấn đề tôi đang rất cần nên đã từng cố gắng mò (vì tất cả kiến thức về excel của tôi toàn do mò mà học được thôi, mong mọi người đừng cười nhé!-\\/.-\\/.) và đã từng thưc hiện theo cách làm cột phụ giống như anh huuthang_bd đã nói.Tôi làm cái này cho bạn tham khảo cái tôi đã biết và cũng rất mong được các thầy cô, anh chị trên diễn đàn xem và hướng dẫn thêm!Xin cảm ơn!
 

File đính kèm

Upvote 0
Vấn đề của bạn cũng là vấn đề tôi đang rất cần nên đã từng cố gắng mò (vì tất cả kiến thức về excel của tôi toàn do mò mà học được thôi, mong mọi người đừng cười nhé!-\\/.-\\/.) và đã từng thưc hiện theo cách làm cột phụ giống như anh huuthang_bd đã nói.Tôi làm cái này cho bạn tham khảo cái tôi đã biết và cũng rất mong được các thầy cô, anh chị trên diễn đàn xem và hướng dẫn thêm!Xin cảm ơn!

Tôi khen bạn thật nhiệt tình, tuy nhiên Bạn làm như vậy vẫn chẳng ăn thua, vì khi tác giả muốn làm cột phụ và đã xác định rõ số lượng tên trong danh sách, thì chẳng dại gì mà hỏi đúng không bạn, tên khách hàng có thể phát sinh thêm chứ đâu có cố định vài người? Tôi nghĩ là vẫn làm theo theo cách của Anh HuuThang_bd, tuy nhiên, làm cột phụ (auto filter) là tạm thời (dùng name động) khi Form kích hoạt, sau đó khi thoát Form, cột phụ này tự động xóa.
 
Upvote 0
Em có một danh sách, Làm sao em có thể tạo một Combobox (trên Form) gọi danh sách (danhsach) kia lên, nhưng không được trùng tên và không có dòng trắng?
Kính xin các Anh Chị, Thầy Cô hướng dẫn.
Em xin cảm ơn.

Tạm thời, tôi có thể gán danh sách cho combobox của bạn như sau:
1) Sắp xếp theo ABC
2) Lọc tên không trùng

Trường hợp không có dòng trắng tôi đang nghiên cứu, kính nhờ các Thầy, Cô, Anh, Chị giúp đỡ cho phần này!
 

File đính kèm

Upvote 0
Thế ta có cái UDF này để làm gì?
PHP:
Private Function UniqueList(ListRange As Range)
  Dim Clls As Range, Dic
  On Error Resume Next
  Set Dic = CreateObject("Scripting.Dictionary")
  For Each Clls In ListRange
    If Not IsEmpty(Clls) Then Dic.Add Clls.Value, ""
  Next Clls
  UniqueList = Dic.Keys
End Function
PHP:
Private Sub UserForm_Initialize()
  With Range([A2], [A65536].End(xlUp))
    ComboBox1.List() = UniqueList(.Cells)
  End With
End Sub
Xóa Define nameRow Source Properties đi nhé
----------
Bạn minhthien dùng Advanced Filter để lọc, sao không nạp luôn vào ComboBox, dùng cột phụ làm gì chứ
 

File đính kèm

Upvote 0
Tôi khen bạn thật nhiệt tình, tuy nhiên Bạn làm như vậy vẫn chẳng ăn thua, vì khi tác giả muốn làm cột phụ và đã xác định rõ số lượng tên trong danh sách, thì chẳng dại gì mà hỏi đúng không bạn, tên khách hàng có thể phát sinh thêm chứ đâu có cố định vài người? Tôi nghĩ là vẫn làm theo theo cách của Anh HuuThang_bd, tuy nhiên, làm cột phụ (auto filter) là tạm thời (dùng name động) khi Form kích hoạt, sau đó khi thoát Form, cột phụ này tự động xóa.

tại anh không để ý là cái cột phụ đó tôi dùng advanced filter sẽ tự cập nhật danh sách mỗi lần mở file (vì đặt trong biến cố workbook open).Vấn đề là tôi đang tìm cách làm sao để khỏi làm cột phụ và bây giờ thì bài của thầy Ndu đã làm được rồi.Mặc dù nhìn vào chưa hiểu lắm nhưng lần nữa rất cảm ơn thầy Ndu!Có lẽ phải đi mua cuốn sách VBA của GPE thôi!--=0.Chúc cả nhà một ngày vui vẻ và thành công!
@ thầy NDU: Thầy có thể hướng dẫn thêm cho em cách nạp cái advanced filter trực tiếp vào combobox được không?
P/s: dù sao cũng cảm ơn anh nhiều nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
tại anh không để ý là cái cột phụ đó tôi dùng advanced filter sẽ tự cập nhật danh sách mỗi lần mở file (vì đặt trong biến cố workbook open).Vấn đề là tôi đang tìm cách làm sao để khỏi làm cột phụ và bây giờ thì bài của thầy Ndu đã làm được rồi.Mặc dù nhìn vào chưa hiểu lắm nhưng lần nữa rất cảm ơn thầy Ndu!Có lẽ phải đi mua cuốn sách VBA của GPE thôi!--=0.Chúc cả nhà một ngày vui vẻ và thành công!
P/s: dù sao cũng cảm ơn anh nhiều nhé!
Nè... nếu bạn dùng Advanced Filter cũng không cần cột phụ ---> Bạn làm như sau:
- Gọi Advanced Filter lên, lọc tại chổ, không copy sang nơi khác (Filter the list, in-place)
- Tiếp theo dùng vòng lập quét qua các cell đang hiện, cái nào không rổng thì Add vào ComboBox
Đại khái thế này:
PHP:
Private Sub UserForm_initialize()
  Dim Clls As Range
  On Error Resume Next
  With Range(Sheet1.[A1], Sheet1.[A65536].End(xlUp))
    .AdvancedFilter 1, , , True
    For Each Clls In Intersect(.Cells, .Offset(1)).SpecialCells(12)
      If Not IsEmpty(Clls) Then ComboBox1.AddItem Clls
    Next Clls
    .Parent.ShowAllData
  End With
End Sub
Không dùng name và bất cứ cột phụ nào!
 

File đính kèm

Upvote 0
Đúng là giải quyết triệt để được vấn đề em đang cần (em bị bí vì không biết cách showAllDta như vậy). Cảm ơn thầy rất nhiều!Chúc thầy luôn mạnh khỏe để có nhiều bài viết hay cho diễn đàn!
 
Upvote 0
Đúng là giải quyết triệt để được vấn đề em đang cần (em bị bí vì không biết cách showAllDta như vậy). Cảm ơn thầy rất nhiều!Chúc thầy luôn mạnh khỏe để có nhiều bài viết hay cho diễn đàn!
Bạn lưu ý vấn đề này (khá quan trọng)
- Dùng Advanced Filter là lọc trực tiếp, xét điều kiện, nếu thỏa mãn thì add vào Combo ---> Chính vì lẽ đó, bạn sẽ có cảm giác code chạy hơi chậm (nếu sheet có nhiều dử liệu)
- Dùng UDF như bài đầu tiên của tôi thì khác ---> Tìm dử liệu, nếu thỏa điều kiện nó sẽ add vào 1 Array ---> sau khi xong việc nó mới Add toàn bộ Array này vào Combo
- 1 vấn đề mà ít người biết đến: Vì dùng Advanced Filter lọc tại chổ nên đương nhiên ta phải dùng SpecialCells (để lấy những cell Visible = true) ---> Với dử liệu vài ngàn dòng, SpecialCells sẽ không hoạt động
Tôi cho rằng về mặc tốc độ thì cách dùng UDF sẽ nhanh hơn
Bạn cứ test thử với dử liệu lớn xem sao nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Thầy NDU rất rất nhiều! Bài của Thầy giúp em được học thêm nhiều điều mới mẽ!
Kính chúc Thầy có một ngày Chủ Nhật thật nhiều hạnh phúc.
 
Upvote 0
Xin chào cả nhà,
Mình muốn lọc danh sách trong ComboBox có 2 cột thì phải làm sao? Mình có dùng thử code của Thầy NDU thì thấy chạy rất tốt nhưng dữ liệt chỉ ghi vào có 1 cột thôi.
Mọi người giúp mình với!
 
Upvote 0
Xin chào cả nhà,
Mình muốn lọc danh sách trong ComboBox có 2 cột thì phải làm sao? Mình có dùng thử code của Thầy NDU thì thấy chạy rất tốt nhưng dữ liệt chỉ ghi vào có 1 cột thôi.
Mọi người giúp mình với!

Bạn gửi File lên đi, cũng có thể trong thuộc tính Prperties của Combobox bạn đã chỉ chọn Column Count là 1, nếu vậy bạn chọn là 2.
 
Upvote 0
Xin chảo cả nhà!
Mình có một "Danh sách công trình" bao gồm cột Mã CT, tên công trình và muốn tạo một Form mà khi mình gõ một số ký tự vào Textbox thì những công trình có tên chứa những ký tự đó sẽ được add vào ComboBox. Và ComboBox sẽ hiển thị 2 cột là Mã CT và tên công trình. Khi chọn trong ComboBox và nhấn nút OK thì kết quả sẽ trả về là Mã CT.
Mình nói có thể khó hiểu nên mọi người xem file và tư vấn giúp mình.
Xin chân thành cảm ơn.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom