- 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.
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 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
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