Đánh giá lequocthai.com:
- Các bài viết có liên quan:
- VBA Excel sử dụng Scripting Dictionary
- VBA Excel Hộp thoại thông báo
- Các bài viết liên quan:
- Sách Excel 2016 Formulas – John Wiley & Sons (2016) pdf
- Sách Programming Excel with VBA Flavio Morgado pdf
- Sách EXCEL TIPS AND TRICKS
- Sách Excel Pivot Tables and Charts pdf
- Sách Excel 2019 Power Programming with VBA
- Sách VBA Excel 2016 power programming with vba (pdf)
- Sách Excel 2013 Power Programming with VBA pdf
- Sách Excel 2007 VBA Programmer’s Reference pdf
- Sách Excel 2019 For Dummies pdf
- Microsoft Excel 2019 All in one for Dummies ( 8 books in one ) pdf
- Sách Lean Excel Top Functions Quick Reference Guide with 500 Examples
- Add-ins Kutools for Excel Full Active
- FREE 101 Ready Made Excel Templates
- Sách Microsoft Excel 2016 Data Analysis and Business Modeling
- Excel Dashboards and Reports for Dummies
- Code VBA Excel đọc số ra chữ
- Tải các tiện ích Excel Add-ins hay nhất
- Một số kinh nghiệm trong bảng tính Excel
- Cách dùng hàm SumProduct và Công thức mảng
- 7 Cuốn sách lập trình VBA Excel hay nhất từ cơ bản đến nâng cao
- Loạt các bài viết có liên quan chuyên đề VBA:
- VBA Excel Hộp thoại thông báo
- VBA Excel Biến trong VBA Excel
- VBA Excel sử dụng Scripting Dictionary
- VBA Excel Biến trong VBA Excel
- VBA Excel Workbook, worksheet
- VBA Excel Range, Cells
- VBA Excel Hàm trong Excel VBA
- VBA Excel Events, Application Object
- VBA Excel Function and Sub Excel VBA
- VBA Excel Array Mảng trong Excel VBA
- VBA Excel FileSystemObject trong Excel VBA
- VBA Excel Collection trong Excel VBA
- VBA Excel Hashtable trong Excel VBA
- VBA Excel Stack trong Excel VBA
- VBA Excel Queue trong Excel VBA
- VBA Excel SortedList Excel VBA
- VBA Excel ArrayList Excel VBA
- VBA Excel Ví dụ về Scripting Dictionary
- Sách VBA Excel 2016 power programming with vba (pdf)
Collection trong VBA là một cấu trúc dữ liệu đơn giản có sẵn trong VBA để lưu trữ các đối tượng. Các collections trong VBA linh hoạt hơn so với Array trong VBA vì chúng không giới hạn ở kích cỡ của chúng vào bất kỳ thời điểm nào và không yêu cầu phải dò lại kích thước bằng tay.
Collection rất hữu dụng khi ta không muốn sử dụng các cấu trúc dữ liệu phức tạp hơn (nhưng khá tương tự) như ArrayList hay Dictionary.
1. Khai báo Collection
Dim myCol As CollectionSet myCol = New Collection2. Các phương thức (có 4 phương thức)
2.1. Add
myCol.Add (Item, [Key], [Before], [After])Thêm một Item vào collection.
Item: Bắt buộc. Item nhận kiểu dữ liệu là số hoặc chuỗi bất kỳ, giá trị đơn hoặc một mảng (array).
Key: Không bắt buộc. Nếu có nhập Key thì yêu cầu Key đó chưa tồn tại trong collection, Key chỉ nhận giá trị kiểu chuỗi.
Before: Không bắt buộc. Chỉ định vị trí của Item thêm vào trước một Item đã có trong collection (theo chỉ số của Item đó).
After: Không bắt buộc. Chỉ định vị trí của Item thêm vào đứng sau một Item đã có trong collection (theo chỉ số của Item đó).
Ví dụ:
Sub AddMethod() Dim myCol As Collection Set myCol = New Collection 'mycol.Add (Item, [Key], [Before], [After]) ' myCol.Add 2 'Item: 2 ' myCol.Add "B" 'Item: 2, "B" ' myCol.Add "C", key:="KeyC" 'Items: 2, "B", "C" ' myCol.Add "A", "KeyA", before:=2 'Items: 2, "A","B","C" ' myCol.Add 1, , After:=4 'Items: 2, "A","B","C",1 ' myCol.Add Array(5, 20) 'Items: 2, "A","B","C",1, array(5,20)'End Sub2.2. Count
myCol.CountTrả về số Items có trong collection.
Ví dụ:
Sub CountMethod() Dim myCol As Collection, i As Long Set myCol = New Collection For i = 1 To 10 myCol.Add i Next i MsgBox myCol.CountEnd Sub2.3. Item
myCol.Item (Index)'Hoặc:myCol(Index)'Hoặc:myCol(Key)Gọi tới Item của collection theo chỉ số của Item hoặc theo Key ứng với Item đó.
Ví dụ:
Sub ItemMethod() Dim myCol As Collection Set myCol = New Collection myCol.Add "A", "KeyA" MsgBox myCol.Item(1) MsgBox myCol(1) MsgBox myCol("KeyA")End Sub2.4. Remove
mycol.Remove(Index)'Hoặcmycol.Remove(Key)Xóa một Item trong collection theo chỉ số của Item hoặc Key ứng với Item đó.
Ví dụ:
Sub Remove() Dim myCol As Collection Set myCol = New Collection myCol.Add "A", "KeyA" myCol.Add 10, "2" myCol.Add 20, "Key3" myCol.Remove (2) myCol.Remove ("Key3") MsgBox myCol.CountEnd Sub3. Ứng dụng
– Lọc loại trùng
– Sắp xếp dữ liệu
'// Kiem tra su ton tai cua mot key trong Collection'Public Function KeyExists(myCol As Collection, ByVal keyCheck As String) As Boolean KeyExists = False On Error GoTo EndFunction myCol.Item keyCheck KeyExists = TrueEndFunction:End Function'// Loc loai trung mot cot'Public Function UniqueColumnCollection(ByVal Rng As Range) As Variant If Rng.Count = 1 Then UniqueColumnCollection = Rng.Value: Exit Function Dim myCol As Collection, i As Long, j As Long, arr(), Result(), sKey As Variant Set myCol = New Collection arr = Rng.Value For i = LBound(arr, 1) To UBound(arr, 1) sKey = arr(i, 1) If sKey <> "" Then If KeyExists(myCol, sKey) = False Then myCol.Add "", sKey j = j + 1 ReDim Preserve Result(1 To j) Result(j) = sKey End If End If Next i UniqueColumnCollection = ResultEnd Function'// Sort A-Z cac Item trong Collection'Public Sub SortingCollection(myCol As Collection, firstIndex As Long, lastIndex As Long) Dim valCentre As Variant, vTemp As Variant Dim valMin As Long Dim valMax As Long valMin = firstIndex valMax = lastIndex valCentre = myCol((firstIndex + lastIndex) \ 2) Do While valMin <= valMax Do While myCol(valMin) < valCentre And valMin < lastIndex valMin = valMin + 1 Loop Do While valCentre < myCol(valMax) And valMax > firstIndex valMax = valMax - 1 Loop If valMin <= valMax Then ' Swap values vTemp = myCol(valMin) myCol.Add myCol(valMax), After:=valMin myCol.Remove valMin myCol.Add vTemp, before:=valMax myCol.Remove valMax + 1 ' Move to next positions valMin = valMin + 1 valMax = valMax - 1 End If Loop If firstIndex < valMax Then SortingCollection myCol, firstIndex, valMax If valMin < lastIndex Then SortingCollection myCol, valMin, lastIndexEnd Sub'// Truyen cac Items cua Collection vao Array (2 chieu)Public Function CollectionToArray(myCol As Collection) As Variant Dim arr() As Variant, i As Long ReDim arr(1 To myCol.Count, 1 To 1) For i = 1 To myCol.Count arr(i, 1) = myCol.Item(i) Next i CollectionToArray = arrEnd FunctionTải file ví dụ: Collection








Great blog here! Also your site loads up fast! What web host are you using?
Can I get your affiliate link to your host? I wish my web site loaded up as quickly as yours lol
Chào bạn Lê Quốc Thái,
Bạn làm ơn cho mình hỏi 1 vấn đề như sau:
Ví dụ mình có 1 mảng 2 chiều (5 cột và 2 dòng) với các giá trị tương ứng:
Hàng 1 có các giá trị: A, B, D, E, C
Hàng 1 có các giá trị: 1,5,7, 9, Q, H
Mình muốn sắp xếp (Index/ Sort) theo hàng 1 để mảng này có thứ tự từ nhỏ đến lớn (hàng 1 sẽ là: A,B,C,D,E) và hàng 2 sẽ tương ứng thay đổi theo (Bằng công cụ VBA của Excel)
Cám ơn bạn.
Nếu được, bạn gửi cho mình về [email protected] nhé
Trân trọng!