VBA - Điền mảng với các giá trị duy nhất từ ​​cột

Hướng dẫn này sẽ dạy bạn cách điền một mảng với các giá trị duy nhất từ ​​một cột trong VBA.

Điền vào mảng với các giá trị duy nhất từ ​​cột

Lấy một danh sách các giá trị từ một trang tính Excel vào một Mảng là vấn đề của việc lặp qua các hàng trong Excel và điền vào mảng.

Hãy xem xét danh sách khách hàng sau đây trong một trang tính Excel.

Sử dụng một vòng lặp, chúng ta có thể điền một Mảng trong VBA. Tuy nhiên, một vòng lặp tiêu chuẩn sẽ lặp qua mỗi hàng, bao gồm các hàng trùng lặp và bạn sẽ kết thúc với các giá trị trùng lặp trong Mảng của mình.

Giải pháp để lặp qua các ô và điền vào một đối tượng Bộ sưu tập với các giá trị như một đối tượng bộ sưu tập sẽ không cho phép các bản sao. Sau đó, bạn có thể sử dụng đối tượng bộ sưu tập đó để điền vào mảng của mình.

1234567891011121314151617181920212223242526 Sub PopulateUniqueArray ()Dim StrCustomers () Dưới dạng chuỗiDim Col As New CollectionDim valCell As StringDim i As IntegerDim n As Integer'đếm các hàng trong phạm vin = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count'Điền Bộ sưu tập Tạm thờiKhi có lỗi Tiếp tục tiếp theoĐối với i = 0 Đến nvalCell = Range ("A1"). Offset (i, 0) .ValueCol.Add valCell, valCellTiếp theo tôiErr.ClearLỗi GoTo 0'Thay đổi kích thước nn = Col.Count'Khai báo lại mảngReDim StrCustomers (1 đến n)'Điền mảng bằng cách lặp qua bộ sưu tậpĐối với i = 1 Đến Col.CountStrCustomers (i) = Col (i)Tiếp theo tôiDebug.Print Tham gia (StrCustomers (), vbCrLf)Kết thúc Sub

Điền mảng w / Giá trị duy nhất - Hàm

Ví dụ trên cho thấy một thủ tục sẽ thực hiện các hành động mong muốn của bạn. Nhưng thay vào đó, bạn có thể thích một Hàm di động để thực hiện tác vụ:

123456789101112131415161718192021222324 Hàm CreateUniqueList (n Bắt đầu càng lâu, nEnd càng lâu) với tư cách là Biến thểDim Col As New CollectionLờ mờ arrTemp() Như DâyDim valCell As StringDim i As Integer'Điền Bộ sưu tập Tạm thờiKhi có lỗi Tiếp tục tiếp theoĐối với i = 0 Đến nEndvalCell = Range ("A" & nStart) .Offset (i, 0) .ValueCol.Add valCell, valCellTiếp theo tôiErr.ClearLỗi GoTo 0'Thay đổi kích thước nnEnd = Col.Count'Khai báo lại mảngReDim arrTemp(1 Đến nEnd)'Điền mảng tạm thời bằng cách lặp qua bộ sưu tậpĐối với i = 1 Đến Col.CountarrTemp(i) = Col (i)Tiếp theo tôi'trả lại mảng tạm thời cho kết quả của hàmCreateUniqueList = arrTemp()Chức năng kết thúc

Để sử dụng Hàm, bạn sẽ cần gọi nó từ một Thủ tục phụ:

123456789 Sub PopulateArray ()Dim StrCustomers () Dưới dạng chuỗiDim strCol dưới dạng Bộ sưu tậpDim n As Long'đếm các hàng trong phạm vin = Range ("A1", Range ("A1"). End (xlDown)). Rows.Count'chạy hàm để tạo một mảng các giá trị duy nhấtstrCustomers () = CreateUniqueList (1, n)Kết thúc Sub
wave wave wave wave wave