Mảng VBA

Trong VBA, một Mảng là một biến duy nhất có thể chứa nhiều giá trị. Hãy nghĩ về một mảng giống như một dải ô: mỗi ô có thể lưu trữ một giá trị. Mảng có thể là một chiều (nghĩ về một cột duy nhất), hai chiều (nghĩ về nhiều hàng & cột) hoặc đa chiều. Các giá trị của mảng có thể được truy cập theo vị trí của chúng (số chỉ mục) trong mảng.

Trang tính nhanh mảng VBA

Mảng

Sự miêu tảMã VBATạo raDim arr (1 đến 3) làm biến thể
arr (1) = “một”
arr (2) = “hai”
arr (3) = “ba”Tạo từ ExcelDim arr (1 đến 3) làm biến thể
Làm mờ ô dưới dạng phạm vi, tôi là số nguyên
i = LBound (arr)
Đối với mỗi ô trong phạm vi (“A1: A3”)
i = i + 1
arr (i) = cell.value
Ô tiếp theoĐọc tất cả các mụcDim tôi as Long
Đối với i = LBound (arr) Đến UBound (arr)
MsgBox arr (i)
Tiếp theo tôiTẩy xóaXóa arrMảng thành chuỗiDim sName As String
sName = Tham gia (arr, “:”)Tăng kích thướcReDim Bảo tồn arr (0 đến 100)Đặt giá trịarr (1) = 22

Ví dụ nhanh về mảng VBA

Hãy xem một ví dụ đầy đủ trước khi chúng ta đi sâu vào chi tiết cụ thể:

12345678910 Mảng conExample ()Dim strNames (1 đến 4) dưới dạng chuỗistrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"msgbox strNames (3)Kết thúc Sub

Ở đây, chúng tôi đã tạo mảng chuỗi một chiều: strNames với kích thước bốn (có thể chứa bốn giá trị) và gán bốn giá trị. Cuối cùng, chúng tôi hiển thị giá trị thứ 3 trong Hộp thông báo.

Trong trường hợp này, lợi ích của việc sử dụng Mảng là rất nhỏ: chỉ cần khai báo một biến thay vì bốn biến.

Tuy nhiên, hãy xem một ví dụ sẽ cho thấy sức mạnh thực sự của một mảng:

12345678 Mảng conExample2 ()Dim strNames (1 đến 60000) dưới dạng chuỗiDim i As LongĐối với i = 1 đến 60000strNames (i) = Các ô (i, 1). Giá trịTiếp theo tôiKết thúc Sub

Ở đây, chúng tôi đã tạo Mảng có thể chứa 60.000 giá trị và chúng tôi đã nhanh chóng điền mảng từ Cột A của một trang tính.

Lợi ích của mảng? - Tốc độ, vận tốc!

Bạn có thể nghĩ về Mảng tương tự như trang tính Excel:

  • Mỗi ô (hoặc mục trong một mảng) có thể chứa giá trị riêng của nó
  • Mỗi ô (hoặc mục trong một mảng) có thể được truy cập theo vị trí hàng & cột của nó.
    • Trang tính Ex. ô (1,4) .value = “Hàng 1, Cột 4”
    • Mảng Ex. arrVar (1,4) = “Hàng 1, Cột 4”

Vậy tại sao phải bận tâm với Mảng? Tại sao không chỉ đọc và ghi giá trị trực tiếp vào các ô trong Excel? Một từ: Tốc độ, vận tốc!

Đọc / ghi vào các ô Excel là một quá trình chậm. Làm việc với Mảng nhanh hơn nhiều!

Tạo / Khai báo một mảng (Dim)

Lưu ý: Mảng có thể có nhiều "thứ nguyên". Để giữ cho mọi thứ đơn giản, chúng ta sẽ bắt đầu bằng cách chỉ làm việc với mảng một chiều. Phần sau của hướng dẫn, chúng tôi sẽ giới thiệu cho bạn về mảng nhiều chiều.

Mảng tĩnh

Mảng tĩnh là những mảng không thể thay đổi kích thước. Ngược lại, Mảng động có thể thay đổi kích thước. Chúng được khai báo hơi khác một chút. Đầu tiên, hãy xem xét các mảng tĩnh.

Lưu ý: Nếu kích thước mảng của bạn không thay đổi, hãy sử dụng một mảng tĩnh.

Khai báo một biến mảng tĩnh rất giống với khai báo một biến thông thường, ngoại trừ việc bạn phải xác định kích thước của mảng. Có một số cách khác nhau để đặt kích thước của một mảng.

Bạn có thể khai báo rõ ràng vị trí bắt đầu và kết thúc của một mảng:

123456789101112 Sub StaticArray1 ()'Tạo mảng với các vị trí 1,2,3,4Dim arrDemo1 (1 đến 4) dưới dạng chuỗi'Tạo mảng với các vị trí 4,5,6,7Dim arrDemo2 (4 đến 7)'Tạo mảng với các vị trí 0,1,2,3Dim arrDemo3 (0 đến 3) miễn làKết thúc Sub

Hoặc bạn chỉ có thể nhập kích thước mảng:

123456 Sub StaticArray2 ()'Tạo mảng với các vị trí 0,1,2,3Dim arrDemo1 (3) Dưới dạng chuỗiKết thúc Sub

Quan trọng! Lưu ý rằng theo mặc định, Mảng bắt đầu ở vị trí 0. Vì vậy Dim arrDemo1 (3) tạo một mảng với các vị trí 0,1,2,3.

Bạn có thể khai báo Tùy chọn Cơ sở 1 ở đầu mô-đun của bạn để mảng bắt đầu ở vị trí 1 thay vào đó:

12345678 Tùy chọn Cơ sở 1Sub StaticArray3 ()'Tạo mảng với các vị trí 1,2,3Dim arrDemo1 (3) Dưới dạng chuỗiKết thúc Sub

Tuy nhiên, tôi thấy rằng sẽ dễ dàng hơn nhiều (và ít khó hiểu hơn) nếu chỉ khai báo rõ ràng vị trí bắt đầu và kết thúc của mảng.

Bạn mệt mỏi với việc tìm kiếm ví dụ về mã VBA? Hãy thử AutoMacro!

Mảng động

Mảng động là các mảng có kích thước có thể thay đổi được (hoặc kích thước của nó không cần xác định).

Có hai cách để khai báo một Mảng động.

Mảng biến thể

Cách đầu tiên để khai báo một Mảng động là đặt mảng thành kiểu Khác nhau.

1 Dim arrVar () Dưới dạng biến thể

Với một Arra biến thểy, bạn không cần xác định kích thước mảng. Kích thước sẽ tự động điều chỉnh. Chỉ cần nhớ rằng Mảng bắt đầu với vị trí 0 (trừ khi bạn thêm Tùy chọn Cơ sở 1 vào đầu mô-đun của mình)

12345678910111213 Sub VariantArray ()Dim arrVar () Dưới dạng biến thể'Xác định giá trị (Kích thước = 0,1,2,3)arrVar = Mảng (1, 2, 3, 4)'Thay đổi giá trị (Kích thước = 0,1,2,3,4)arrVar = Mảng ("1a", "2a", "3a", "4a", "5a")'Vị trí đầu ra 4 ("5a")MsgBox arrVar (4)Kết thúc Sub

Mảng động không biến thể

Với mảng không biến thể, bạn phải xác định kích thước mảng trước khi gán giá trị cho mảng. Tuy nhiên, quá trình tạo mảng hơi khác một chút:

1234567 Sub DynamicArray1 ()Dim arrDemo1 () As String'Thay đổi kích thước mảng với các vị trí 1,2,3,4ReDim arrDemo1 (1 đến 4)Kết thúc Sub

Đầu tiên, bạn khai báo mảng, tương tự như mảng tĩnh, ngoại trừ bạn bỏ qua kích thước mảng:

1 Dim arrDemo1 () As String

Bây giờ khi bạn muốn đặt kích thước mảng, bạn sử dụng ReDim lệnh kích thước mảng:

12 'Thay đổi kích thước mảng với các vị trí 1,2,3,4ReDim arrDemo1 (1 đến 4)

ReDim thay đổi kích thước mảng. Đọc bên dưới để biết sự khác biệt giữa ReDim và ReDim Preserve.

ReDim so với ReDim Preserve

Khi bạn sử dụng ReDim lệnh bạn xóa tất cả các giá trị hiện có khỏi mảng. Thay vào đó bạn có thể sử dụng Bảo tồn ReDim để bảo toàn giá trị mảng:

12 'Thay đổi kích thước mảng với các vị trí 1,2,3,4 (Giữ nguyên các giá trị hiện có)ReDim Bảo tồn arrDemo1 (1 đến 4)

Khai báo mảng được đơn giản hóa

Bạn có thể cảm thấy choáng ngợp sau khi đọc mọi thứ ở trên. Để giữ cho mọi thứ đơn giản, chúng tôi chủ yếu sẽ làm việc với các mảng tĩnh trong phần còn lại của bài viết.

Đặt giá trị mảng

Đặt giá trị mảng rất dễ dàng.

Với một mảng tĩnh, bạn phải xác định từng vị trí của mảng, từng vị trí một:

12345678 Mảng conExample ()Dim strNames (1 đến 4) dưới dạng chuỗistrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Kết thúc Sub

Với Mảng biến thể, bạn có thể xác định toàn bộ mảng bằng một dòng (chỉ thực tế cho các mảng nhỏ):

123456 Mảng conExample_1Line ()Dim strNames () Như một biến thểstrNames = Array ("Shelly", "Steve", "Neema", "Jose")Kết thúc Sub

Nếu bạn cố gắng xác định giá trị cho một vị trí mảng không tồn tại, bạn sẽ nhận được lỗi Chỉ số nằm ngoài phạm vi:

1 strNames (5) = "Shannon"

Trong phần 'Gán phạm vi cho mảng' Dưới đây chúng tôi sẽ hướng dẫn bạn cách sử dụng vòng lặp để nhanh chóng gán số lượng lớn giá trị cho mảng.

Nhận giá trị mảng

Bạn có thể tìm nạp các giá trị mảng theo cùng một cách. Trong ví dụ dưới đây, chúng tôi sẽ viết các giá trị mảng vào các ô:

1234 Phạm vi ("A1"). Giá trị = strNames (1)Phạm vi ("A2"). Giá trị = strNames (2)Phạm vi ("A3"). Giá trị = strNames (3)Phạm vi ("A4"). Giá trị = strNames (4)

Lập trình VBA | Code Generator làm việc cho bạn!

Gán Phạm vi cho Mảng

Để gán một Phạm vi cho một Mảng, bạn có thể sử dụng một vòng lặp:

12345678 Phạm vi conToArray ()Dim strNames (1 đến 60000) dưới dạng chuỗiDim i As LongĐối với i = 1 đến 60000strNames (i) = Các ô (i, 1). Giá trịTiếp theo tôiKết thúc Sub

Thao tác này sẽ lặp qua các ô A1: A60000, gán giá trị ô cho mảng.

Đầu ra Mảng thành Dải ô

Hoặc bạn có thể sử dụng một vòng lặp để gán một mảng cho một phạm vi:

123 Đối với i = 1 đến 60000Các ô (i, 1) .Value = strNames (i)Tiếp theo tôi

Điều này sẽ làm ngược lại: gán giá trị mảng cho các ô A1: A60000

Mảng 2D / Đa chiều

Cho đến nay, chúng tôi đã làm việc riêng với mảng một chiều (1D). Tuy nhiên, mảng có thể có tối đa 32 thứ nguyên.

Hãy nghĩ về mảng 1D giống như một hàng hoặc cột duy nhất của các ô Excel, mảng 2D giống như toàn bộ trang tính Excel với nhiều hàng và cột và mảng 3D giống như toàn bộ sổ làm việc, chứa nhiều trang tính, mỗi trang chứa nhiều hàng và cột (Bạn cũng có thể nghĩ về một mảng 3D giống như một Khối Rubik).

Ví dụ về mảng đa chiều

Bây giờ, hãy trình bày các ví dụ về cách làm việc với các mảng có kích thước khác nhau.

Lập trình VBA | Code Generator làm việc cho bạn!

Ví dụ về mảng 1D

Thủ tục này kết hợp các ví dụ mảng trước đó thành một thủ tục, minh họa cách bạn có thể sử dụng mảng trong thực tế.

1234567891011121314 Mảng conEx_1d ()Dim strNames (1 đến 60000) dưới dạng chuỗiDim i As Long'Gán giá trị cho mảngĐối với i = 1 đến 60000strNames (i) = Các ô (i, 1). Giá trịTiếp theo tôi'Xuất giá trị mảng thành phạm viĐối với i = 1 đến 60000Trang tính ("Đầu ra"). Ô (i, 1) .Value = strNames (i)Tiếp theo tôiKết thúc Sub

Ví dụ về mảng 2D

Quy trình này chứa một ví dụ về mảng 2D:

123456789101112131415161718 Mảng conEx_2d ()Dim strNames (1 đến 60000, 1 đến 10) dưới dạng chuỗiDim i As Long, j As Long'Gán giá trị cho mảngĐối với i = 1 đến 60000Đối với j = 1 đến 10strNames (i, j) = Các ô (i, j). Giá trịTiếp theo jTiếp theo tôi'Xuất giá trị mảng thành phạm viĐối với i = 1 đến 60000Đối với j = 1 đến 10Trang tính ("Đầu ra"). Ô (i, j) .Value = strNames (i, j)Tiếp theo jTiếp theo tôiKết thúc Sub

Ví dụ về mảng 3D

Quy trình này chứa một ví dụ về mảng 3D để làm việc với nhiều trang tính:

12345678910111213141516171819202122 Mảng conEx_3d ()Dim strNames (1 đến 60000, 1 đến 10, 1 đến 3) dưới dạng chuỗiDim i As Long, j As Long, k As Long'Gán giá trị cho mảngĐối với k = 1 đến 3Đối với i = 1 đến 60000Đối với j = 1 đến 10strNames (i, j, k) = Sheets ("Trang tính" & k) .Cells (i, j) .ValueTiếp theo jTiếp theo tôiTiếp theo k'Xuất giá trị mảng thành phạm viĐối với k = 1 đến 3Đối với i = 1 đến 60000Đối với j = 1 đến 10Trang tính ("Đầu ra" & k) .Cells (i, j) .Value = strNames (i, j, k)Tiếp theo jTiếp theo tôiTiếp theo kKết thúc Sub

Chiều dài / Kích thước mảng

Cho đến nay, chúng tôi đã giới thiệu cho bạn các loại mảng khác nhau và dạy bạn cách khai báo mảng và lấy / đặt giá trị mảng. Tiếp theo chúng ta sẽ tập trung vào các chủ đề cần thiết khác để làm việc với mảng.

Lập trình VBA | Code Generator làm việc cho bạn!

Chức năng UBound và LBound

Bước đầu tiên để nhận chiều dài / kích thước của một mảng là sử dụng các hàm UBound và LBound để lấy các giới hạn trên và dưới của mảng:

123456 Sub UBoundLBound ()Dim strNames (1 đến 4) dưới dạng chuỗiMsgBox UBound (strNames)MsgBox LBound (strNames)Kết thúc Sub

Trừ hai (và thêm 1) sẽ cho bạn độ dài:

1 GetArrLength = UBound (strNames) - LBound (strNames) + 1

Hàm độ dài mảng

Đây là một hàm để lấy độ dài của mảng một chiều:

1234567 Chức năng công cộng GetArrLength (a As Variant) As LongNếu IsEmpty (a) ThìGetArrLength = 0KhácGetArrLength = UBound (a) - LBound (a) + 1Kết thúc nếuChức năng kết thúc

Cần tính toán kích thước của một mảng 2D? Hãy xem hướng dẫn của chúng tôi: Tính Kích thước của Mảng.

Vòng qua mảng

Có hai cách để lặp qua một mảng. Các vòng lặp đầu tiên qua các số nguyên tương ứng với các vị trí số của mảng. Nếu bạn biết kích thước mảng, bạn có thể chỉ định nó trực tiếp:

12345678910111213 Mảng conExample_Loop1 ()Dim strNames (1 đến 4) dưới dạng chuỗiDim i As LongstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Đối với i = 1 đến 4MsgBox strNames (i)Tiếp theo tôiKết thúc Sub

Tuy nhiên, nếu bạn không biết kích thước mảng (nếu mảng là động), bạn có thể sử dụng các hàm LBound và UBound từ phần trước:

12345678910111213 Mảng conExample_Loop2 ()Dim strNames (1 đến 4) dưới dạng chuỗiDim i As LongstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Đối với i = LBound (strNames) Đến UBound (strNames)MsgBox strNames (i)Tiếp theo tôiKết thúc Sub

Đối với mỗi vòng lặp mảng

Phương pháp thứ hai là với For Each Loop. Điều này lặp lại qua từng mục trong mảng:

12345678910111213 Mảng conExample_Loop3 ()Dim strNames (1 đến 4) dưới dạng chuỗiDim mặt hàngstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Đối với mỗi mục trong strNamesMục MsgBoxMục tiếp theoKết thúc Sub

Vòng lặp Cho Mỗi mảng sẽ hoạt động với các mảng nhiều chiều ngoài các mảng một chiều.

Lập trình VBA | Code Generator làm việc cho bạn!

Vòng lặp qua mảng 2D

Bạn cũng có thể sử dụng các hàm UBound và LBound để lặp qua một mảng đa chiều. Trong ví dụ này, chúng ta sẽ lặp qua một mảng 2D. Lưu ý rằng Hàm UBound và LBound cho phép bạn chỉ định thứ nguyên nào của mảng để tìm giới hạn trên và giới hạn dưới (1 cho thứ nguyên đầu tiên, 2 cho thứ nguyên thứ hai).

1234567891011121314151617181920 Mảng conExample_Loop4 ()Dim strNames (1 đến 4, 1 đến 2) dưới dạng chuỗiDim i As Long, j As LongstrNames (1, 1) = "Shelly"strNames (2, 1) = "Steve"strNames (3, 1) = "Neema"strNames (4, 1) = "Jose"strNames (1, 2) = "Shelby"strNames (2, 2) = "Steven"strNames (3, 2) = "Nemo"strNames (4, 2) = "Jesse"Đối với j = LBound (strNames, 2) Đến UBound (strNames, 2)Đối với i = LBound (strNames, 1) Đến UBound (strNames, 1)MsgBox strNames (i, j)Tiếp theo tôiTiếp theo jKết thúc Sub

Nhiệm vụ mảng khác

Xóa mảng

Để xóa toàn bộ mảng, hãy sử dụng Câu lệnh Xóa:

1 Xóa strNames

Ví dụ sử dụng:

12345678910 Mảng conExample ()Dim strNames (1 đến 4) dưới dạng chuỗistrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"Xóa strNamesKết thúc Sub

Ngoài ra, bạn cũng có thể ReDim mảng để thay đổi kích thước của nó, xóa một phần của mảng:

1 ReDim strNames (1 đến 2)

Thao tác này thay đổi kích thước mảng thành kích thước 2, xóa vị trí 3 và 4.

Mảng đếm

Bạn có thể đếm số vị trí trong mỗi chiều của mảng bằng cách sử dụng Hàm UBound và LBound (đã thảo luận ở trên).

Bạn cũng có thể đếm số mục đã nhập (hoặc mục đáp ứng các tiêu chí nhất định) bằng cách lặp qua mảng.

Ví dụ này sẽ lặp qua một mảng đối tượng và đếm số chuỗi không trống được tìm thấy trong mảng:

123456789101112131415 Mảng conLoopandCount ()Dim strNames (1 đến 4) dưới dạng chuỗiDim i As Long, n As LongstrNames (1) = "Shelly"strNames (2) = "Steve"Đối với i = LBound (strNames) Đến UBound (strNames)Nếu strNames (i) "" thìn = n + 1Kết thúc nếuTiếp theo tôiMsgBox n & "các giá trị không trống được tìm thấy."Kết thúc Sub

Lập trình VBA | Code Generator làm việc cho bạn!

Loại bỏ các bản sao

Tại một số điểm, bạn có thể muốn xóa các bản sao khỏi Mảng. Thật không may, VBA không có một tính năng tích hợp để làm điều này. Tuy nhiên, chúng tôi đã viết một hàm để xóa các bản sao khỏi Mảng (quá dài để đưa vào hướng dẫn này, nhưng hãy truy cập liên kết để tìm hiểu thêm).

Lọc

Chức năng Bộ lọc VBA cho phép bạn Lọc một mảng. Nó làm như vậy bằng cách tạo một mảng mới chỉ có các giá trị được lọc. Dưới đây là một ví dụ nhanh, nhưng hãy nhớ đọc bài viết để biết thêm các ví dụ cho các nhu cầu khác nhau.

1234567891011121314 Sub Filter_Match ()'Xác định mảngDim strNames As VariantstrNames = Array ("Steve Smith", "Shannon Smith", "Ryan Johnson")'Mảng lọcDim strSubNames As VariantstrSubNames = Bộ lọc (strNames, "Smith")'Đếm mảng đã lọcMsgBox "Đã tìm thấy" & UBound (strSubNames) - LBound (strSubNames) + 1 & "tên."Kết thúc Sub

Hàm IsArray

Bạn có thể kiểm tra xem một biến có phải là một mảng hay không bằng cách sử dụng Hàm IsArray:

123456789101112 Sub IsArrayEx ()'Tạo mảng với các vị trí 1,2,3Dim arrDemo1 (3) Dưới dạng chuỗi'Tạo biến chuỗi thông thườngDim str As StringMsgBox IsArray (arrDemo1)MsgBox IsArray (str)Kết thúc Sub

Tham gia Array

Bạn có thể nhanh chóng "nối" toàn bộ một mảng cùng với Chức năng Nối:

123456789101112 Mảng con_Join ()Dim strNames (1 đến 4) dưới dạng chuỗiDim joinNames As StringstrNames (1) = "Shelly"strNames (2) = "Steve"strNames (3) = "Neema"strNames (4) = "Jose"joinNames = Tham gia (strNames, ",")MsgBox joinNamesKết thúc Sub

Lập trình VBA | Code Generator làm việc cho bạn!

Chia chuỗi thành mảng

Hàm tách VBA sẽ chia một chuỗi văn bản thành một mảng chứa các giá trị từ chuỗi ban đầu. Hãy xem một ví dụ:

123456789 Mảng con_Split ()Dim tên () Dưới dạng chuỗiDim tham gia Names As StringjoinNames = "Shelly, Steve, Nema, Jose"Names = Split (JoinNames, ",")Tên MsgBox (1)Kết thúc Sub

Ở đây chúng tôi chia chuỗi văn bản “Shelly, Steve, Nema, Jose” này thành một mảng (kích thước 4) bằng cách sử dụng dấu phân cách bằng dấu phẩy (, ”).

Mảng Const

Một mảng không thể được khai báo như một hằng số trong VBA. Tuy nhiên, bạn có thể giải quyết vấn đề này bằng cách tạo một hàm để sử dụng như một Mảng:

123456789 'Xác định ConstantArrayHàm ConstantArray ()ConstantArray = Mảng (4, 12, 21, 100, 5)Chức năng kết thúc'Truy xuất giá trị ConstantArraySub RetrieveValues ​​()MsgBox ConstantArray (3)Kết thúc Sub

Sao chép mảng

Không có cách tích hợp nào để sao chép Mảng bằng VBA. Thay vào đó, bạn sẽ cần sử dụng một vòng lặp để gán các giá trị từ mảng này sang mảng khác.

12345678910111213141516171819 Sub CopyArray ()Dim Arr1 (1 đến 100)Dim Arr2 (1 đến 100)Dim i As Long'Tạo Mảng1Đối với i = 1 đến 100Arr1 (i) = iTiếp theo tôi'CopyArray1 đến Array2Đối với i = 1 đến 100Arr2 (i) = Arr1 (i)Tiếp theo tôiMsgBox Arr2 (74)Kết thúc Sub

Transpose

Không có chức năng VBA tích hợp nào cho phép bạn Chuyển đổi một mảng. Tuy nhiên, chúng tôi đã viết một hàm để chuyển đổi một mảng 2D. Đọc bài viết để tìm hiểu thêm.

Lập trình VBA | Code Generator làm việc cho bạn!

Mảng trả về hàm

Một câu hỏi phổ biến của các nhà phát triển VBA là làm thế nào để tạo một hàm trả về một mảng. Tôi nghĩ rằng hầu hết những khó khăn được giải quyết bằng cách sử dụng Mảng biến thể. Chúng tôi đã viết một bài báo về chủ đề: Mảng trả về hàm VBA.

Sử dụng Mảng trong Access VBA

Hầu hết các ví dụ về Mảng ở trên hoạt động giống hệt nhau trong Access VBA cũng giống như trong VBA Excel. Một điểm khác biệt chính là khi bạn muốn điền một mảng bằng cách sử dụng dữ liệu Access, bạn sẽ cần phải lặp qua đối tượng RecordSet chứ không phải đối tượng Phạm vi.

1234567891011121314151617181920212223 Phạm vi phụToArrayAccess ()Khi có lỗi Tiếp tục tiếp theoDim strNames () Dưới dạng chuỗiDim i As LongDim iCount As LongLàm mờ dbs dưới dạng cơ sở dữ liệuDim đầu tiên As RecordsetĐặt dbs = CurrentDbĐặt rst = dbs.OpenRecordset ("tblClients", dbOpenDynaset)Với đầu tiên.MoveLast.MoveFirstiCount = .RecordCountReDim strNames (1 Đến iCount)Đối với i = 1 Đến iCountstrNames (i) = rst.Fields ("Tên máy khách").MoveNextTiếp theo tôiKết thúc vớiđầu tiên. ĐóngĐặt đầu tiên = Không có gìĐặt dbs = Không có gìKết thúc Sub
Hướng dẫn về mảng
Array Mega-Guideđúng
Nhận kích thước mảng
Xóa mảng
Mảng lọc
Mảng Transpose
Mảng trả về hàm
Loại bỏ các bản sao

Bạn sẽ giúp sự phát triển của trang web, chia sẻ trang web với bạn bè

wave wave wave wave wave