Lọc dữ liệu không trùng đưa vào Combobox bằng DIC (1 người xem)

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

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

DMQ

Thành viên dốt
Tham gia
21/3/12
Bài viết
722
Được thích
57
Giới tính
Nam
Em có tên của nhiều loại vật liệu trong cột A, sheet2(tất nhiên có trùng), bây giờ em muốn lọc tên vật liệu không trùng đưa vào Combobox(Trong Form). Em cũng tập tành bắt chước Code của các AC :
Mã:
 Sub nap_List ()
  Dic as Object, Arr(), r as Long
Set dic(r) = CreateObject("Scripting.Dictionary")
 Arr = Sheet2.Range("A65536").End(xlUp).Row).Value             
 For r = 1 To UBound(Arr)
If Not dic(Arr).exists(Arr) Then dic(Arr).Add Arr, ""  
 Next r  
Combobox1.List = WorksheetFunction.Transpose(dic(Arr).keys)
End Sub
Nhung không được, mong các AC chỉ giáo cho em học hỏi. Em cũng tìm trên DD rồi, nhưng không hiểu(Vì dốt quá).
 
Em có tên của nhiều loại vật liệu trong cột A, sheet2(tất nhiên có trùng), bây giờ em muốn lọc tên vật liệu không trùng đưa vào Combobox(Trong Form). Em cũng tập tành bắt chước Code của các AC :
Mã:
 Sub nap_List ()
  Dic as Object, Arr(), r as Long
Set dic(r) = CreateObject("Scripting.Dictionary")
 Arr = Sheet2.Range("A65536").End(xlUp).Row).Value             
 For r = 1 To UBound(Arr)
If Not dic(Arr).exists(Arr) Then dic(Arr).Add Arr, ""  
 Next r  
Combobox1.List = WorksheetFunction.Transpose(dic(Arr).keys)
End Sub
Nhung không được, mong các AC chỉ giáo cho em học hỏi. Em cũng tìm trên DD rồi, nhưng không hiểu(Vì dốt quá).
Có lẽ khai báo arr của bạn chưa đúng
Mã:
Arr = Sheet2.Range("A65536").End(xlUp).Row).Value
Sửa thành thế này xem sao
Mã:
Arr = Sheet2.Range("A1",Sheet2.Range("A65536").End(xlUp)).Value

---
Mã:
If Not dic(Arr).exists(Arr) Then dic(Arr).Add Arr, ""  
 Next r  
Combobox1.List = WorksheetFunction.Transpose(dic(Arr).keys)
Arr trong đoạn trên không có chỉ số phần tử.

Không có file đoán đại vậy. Tốt nhất là gửi file lên sẽ cụ thể hơn.
 
Lần chỉnh sửa cuối:
Upvote 0
Em có tên của nhiều loại vật liệu trong cột A, sheet2(tất nhiên có trùng), bây giờ em muốn lọc tên vật liệu không trùng đưa vào Combobox(Trong Form). Em cũng tập tành bắt chước Code của các AC :
Mã:
 Sub nap_List ()
  Dic as Object, Arr(), r as Long
Set dic(r) = CreateObject("Scripting.Dictionary")
 Arr = Sheet2.Range("A65536").End(xlUp).Row).Value             
 For r = 1 To UBound(Arr)
If Not dic(Arr).exists(Arr) Then dic(Arr).Add Arr, ""  
 Next r  
Combobox1.List = WorksheetFunction.Transpose(dic(Arr).keys)
End Sub
Nhung không được, mong các AC chỉ giáo cho em học hỏi. Em cũng tìm trên DD rồi, nhưng không hiểu(Vì dốt quá).

ca này nặng . sai trên 80% tổng số dòng Code ......
 
Upvote 0
Em bệnh quá nặng, mong các Bác Sĩ chữa giúp.>>>-=09=+-+-+-+)*&^)//**/__--__//////)(&&@@/-*+/
 
Upvote 0
Em bệnh quá nặng, mong các Bác Sĩ chữa giúp.>>>-=09=+-+-+-+)*&^)//**/__--__//////)(&&@@/-*+/

Tôi sửa giúp bạn đây. Bạn thử cái này xem:

Mã:
Sub nap_List()
   Dim Dic As Object, Arr(), r As Long
   Set Dic = CreateObject("Scripting.Dictionary")
   With Sheet2
      Arr = .Range(.Range("A2"), .Range("A65536").End(xlUp)).Value
      For r = 1 To UBound(Arr)
         If Len(Arr(r, 1)) Then
            If Not Dic.exists(Arr(r, 1)) Then Dic.Add Arr(r, 1), ""
         End If
      Next r
      .ComboBox1.List = Dic.keys
   End With
End Sub
 
Upvote 0
Cám Ơn Bác Sĩ mhung12005, nhưng phải bỏ dấu chấm trước "Combobox1.List = Dic.Keys".
 
Upvote 0
Các AC cho em hỏi tý: Sao em thấy code của các AC thường là sử dụng " WorkSheetFuction.Tranpose.Dic.Key", của bạn mhung12005 không có dòng đó. Mong các AC giải thích dùm em cho rỏ ah!!!!!
 
Upvote 0
Các AC cho em hỏi tý: Sao em thấy code của các AC thường là sử dụng " WorkSheetFuction.Tranpose.Dic.Key", của bạn mhung12005 không có dòng đó. Mong các AC giải thích dùm em cho rỏ ah!!!!!

trả lời đại nha, nghĩ sao nói vậy chứ ko theo sách vở
dic.key hay dic item giống như cái mảng một chiều (chắc giống collection), giống như trên sheet nó là một dòng.
vì vậy khi bân nạp nó vào combobox list hay list bõx nó có tính chất giống nhau, tức là na ná như cái mảng một chiều
vì vậy bạn ko cần phải transpose (quay nó lại)
nhưng khi bạn đâp xuống sheet cho nó thành một cột thì bạn phải quay nó lại, còn nếu bạn để trên một dòng thi cũng ko cần tránpose
 
Upvote 0
Các AC giải thích dùm em đoạn:
Mã:
[COLOR=#000000]If Len(Arr(r, 1)) Then
[/COLOR][COLOR=#000000]If Not Dic.exists(Arr(r, 1)) Then Dic.Add Arr(r, 1), ""[/COLOR]
có phải là : Nếu chiều dài của mảng Arr bằng 1(Số 1 trong "Arr(r,1) là bằng 1 hay cột 1) thì Dic nạp dữ liệu của mảng, còn không thì bằng khoảng trắng. Phải không Ah?????
Mong các AC giải thích giúp!!!!
 
Upvote 0
Các AC giải thích dùm em đoạn:
Mã:
[COLOR=#000000]If Len(Arr(r, 1)) Then
[/COLOR][COLOR=#000000]If Not Dic.exists(Arr(r, 1)) Then Dic.Add Arr(r, 1), ""[/COLOR]
có phải là : Nếu chiều dài của mảng Arr bằng 1(Số 1 trong "Arr(r,1) là bằng 1 hay cột 1) thì Dic nạp dữ liệu của mảng, còn không thì bằng khoảng trắng. Phải không Ah?????
Mong các AC giải thích giúp!!!!

mảng nó y chang như là trên sheet
arr(r,1) giống cell(dong,cot)
có nghĩa duyệt qua các phân tử trong cột thứ 1 trong mảng
len(arr(r,1)) xét xem phân tử này có chiều dài không, nếu phần từ rổng thì chiều dài =0 khi đó sẻ không thực thi các dòng lệnh bên trong if
cái này cũng nguy hiểm, nếu arr(r,1) là một khoảng trống " ", phím space thì nó vẫn cho chiều dài, cẩn thận hơn thì có thể thêm hàm trim
len(trim(arr(r,1)))
=========
còn nạp dic thì như vậy
dic.add key,item
do người ta không xài item nên cho item bằng ""

dictionary là một quyển tự điển, một từ thì chỉ xuất hiện một lần, như có thể có nhiều nghĩa
khi sử dụng thành thạo thì cái item nó rất lợi hại
 
Lần chỉnh sửa cuối:
Upvote 0
Em thấy có một số code của các AC, bỏ luôn đoạn" If Len(Arr(r,1) Then" vào thẳng luôn "If not Dic.Exit". vậy code trên có cần If Len(Arr(r,1)" không vậy các AC.
 
Upvote 0
Em thấy có một số code của các AC, bỏ luôn đoạn" If Len(Arr(r,1) Then" vào thẳng luôn "If not Dic.Exit". vậy code trên có cần If Len(Arr(r,1)" không vậy các AC.

"cẩn tất vô ái náy", ko cho vô, thì lở trong dữ liệu có khoảng trống thì nó nạp vào trong dic luôn, cứ thử đi khắc biết thôi mà
sau khi nạp dic xong, bạn kiểm tra trong dic có những giống gì
Mã:
for each v in dic.key
     msgbox v
next
 
Upvote 0
Ah, em thấy Thầy nói tới key với item, em có đọc bài "Tổng quan về Scipting Dictionary" của Anh kyo, nhưng em chưa thực sự hiểu rỏ về Key và Item. Theo em thì có phải key là "Chìa Khóa" vào nhà(Chìa khóa thì duy nhất) và vào nhà thì có nhiều Ghế(Item) phải không Thầy????Và Thầy có nói đến cái lợi hại của Item, Xin Thầy ví dụ cho em hiểu với!!!!
 
Upvote 0
Ah, em thấy Thầy nói tới key với item, em có đọc bài "Tổng quan về Scipting Dictionary" của Anh kyo, nhưng em chưa thực sự hiểu rỏ về Key và Item. Theo em thì có phải key là "Chìa Khóa" vào nhà(Chìa khóa thì duy nhất) và vào nhà thì có nhiều Ghế(Item) phải không Thầy????Và Thầy có nói đến cái lợi hại của Item, Xin Thầy ví dụ cho em hiểu với!!!!

ậy, đừng kêu tôi bằng thầy chứ bạn (kêu vậy bạn hạ thấp mấy ông thầy quá....hihihih)
đúng rồi key là cái duy nhất
bạn tìm đọc những bài sumif bằng code vba, bạn sẻ thấy người ta xài item như thế nào
 
Upvote 0
Vậy em ví Item như các cái Ghế trong nhà có phải không Anh(Đổi Thầy bằng Anh) ?????
 
Upvote 0
Web KT

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

Back
Top Bottom