Lấy những giá trị duy nhất từ một danh sách (3 người xem)

Liên hệ QC

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

levanduyet

Hãy để gió cuốn đi.
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,798
Được thích
4,706
Giới tính
Nam
Đang làm một ứng dụng cần lọc lấy các giá trị duy nhất từ một danh sách. Làm đi làm lại, lấy các thủ tục trên các website cũng không ứng ý. Vào một forum hỏi, và được trả lời, thấy hay xin chia sẻ cùng các bạn.

Để thực hiện chức năng này, người trả lời có đề nghị sử dụng đối tượng Dictionary. Đây là một phần của Windows Scripting Host(WSH). Từ lúc xuất hiện Internet Explorer 3.0, nó đã có trong các máy tính sử dụng Window. WSH hổ trợ hai lọai scripting. Đó là VBScript (VBS) and JavaScript (JS). VBS cung cấp hai kiểu đối tượng. Đó là FileSystemObject và Dictionary. Đối tượng Dictionary gần giống như đối tượng Collection mà chúng ta đã biết từ VBA.
Mã:
Sub FilterUniqueNumbers3() 
   Dim vValue As Variant, vVals As Variant 
   Dim myRange As Range 
   Dim i As Long 
   Dim dArr() As Double 
   Dim oDic As Object 
   Set myRange = Worksheets(1).Range("A1:A10") 
   'The Dictionary object is always present in Windows so it can always be created
   Set oDic = CreateObject("scripting.dictionary") 
   oDic.comparemode = vbTextCompare 
   'Read the values from a range into vVals
   vVals = myRange.Value 
   'ReDim dArr and make it two dimensional by adding the second argument 1 To 1
   'otherwise you can't dump it in a worksheet later.
   ReDim dArr(UBound(vVals) - 1, 1 To 1) 
   For Each vValue In vVals 
      'Note the use of the Dictionary object to exclude double values
      If Not IsEmpty(vValue) And Not oDic.exists(vValue) Then 
         dArr(i, 1) = vValue 
         oDic.Add vValue, Nothing 
         i = i + 1 
      End If 
   Next vValue 
   'Free memory by removing the Dictionary object and vVals from memory
   Set oDic = Nothing 
   Erase vVals 
   'Remove old data
   myRange.Clear 
   'Dump dArr values in worksheet
   myRange.Resize(i).Value = dArr 
End Sub
Nguồn tham khảo từ:
http://scriptorium.serve-it.nl/view.php?sid=60

Bạn có thể tham khảo các Properties và Method của đối tượng này tại đây:
http://msdn2.microsoft.com/en-us/library/x4k5wbx4.aspx

Lê Văn Duyệt
 
Thực ra mình mới học VBA nên đọc code không thế này cũng k hiểu rõ lắm. Nhưng nếu chỉ để tìm 1 giá trị trong 1 danh sách thì cũng có thể dùng Find() mà? Find cũng cho ra kết quả duy nhất nếu dùng tùy chọn.
 
Upvote 0
Thực ra mình mới học VBA nên đọc code không thế này cũng k hiểu rõ lắm. Nhưng nếu chỉ để tìm 1 giá trị trong 1 danh sách thì cũng có thể dùng Find() mà? Find cũng cho ra kết quả duy nhất nếu dùng tùy chọn.

Vậy bạn làm thử 1 file ví dụ gửi lên đây xem
 
Upvote 0
Web KT

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

Back
Top Bottom