Làm việc với Mảng cho lập trình VBA trong Excel 2016

0
6

Hầu hết các ngôn ngữ lập trình đều hỗ trợ mảng, bao gồm cả VBA. Một mảng là một nhóm các biến có chung tên. Bạn tham khảo một biến cụ thể trong mảng bằng cách sử dụng tên mảng và số chỉ mục trong ngoặc đơn. Ví dụ: bạn có thể xác định một mảng gồm 12 biến chuỗi để giữ tên của các tháng trong năm. Nếu bạn đặt tên cho mảng là DateNames , bạn có thể tham khảo phần tử đầu tiên của mảng là MonthNames (1), phần tử thứ hai là DateNames (2), v.v.

Khai báo mảng

Trước khi bạn có thể sử dụng một mảng, bạn phải khai báo nó. Không có ngoại lệ. Không giống như các biến thông thường, VBA rất nghiêm ngặt về quy tắc này. Bạn khai báo một mảng bằng câu lệnh Dim hoặc Public, giống như bạn khai báo một biến thông thường. Tuy nhiên, bạn cũng cần chỉ định số lượng phần tử trong mảng. Bạn làm điều này bằng cách chỉ định số chỉ mục đầu tiên, từ khóa Đến và số chỉ mục cuối cùng – tất cả bên trong dấu ngoặc đơn. Ví dụ sau đây cho thấy cách khai báo một mảng gồm 100 số nguyên:

Dim MyArray(1 To 100) As Integer

Khi bạn khai báo một mảng, bạn có thể chọn chỉ định chỉ mục trên. Nếu bạn bỏ qua chỉ mục thấp hơn, VBA sẽ giả sử là 0. Do đó, cả hai câu lệnh sau đều khai báo cùng một mảng 101 phần tử:

Dim MyArray (0 To 100) As Integer
Dim MyArray (100) As Integer

Nếu bạn muốn VBA giả định rằng 1 (chứ không phải 0) là chỉ mục thấp hơn cho các mảng của bạn, hãy bao gồm câu lệnh sau trong phần Tuyên bố ở đầu mô-đun của bạn:

Option Base 1

Câu lệnh này buộc VBA sử dụng 1 làm số chỉ mục đầu tiên cho các mảng chỉ khai báo chỉ mục trên. Nếu câu lệnh này có mặt, các câu lệnh sau giống hệt nhau, cả hai đều khai báo một mảng 100 phần tử:

Dim MyArray (1 To 100) As Integer
Dim MyArray (100) As Integer

Mảng nhiều chiều

Các mảng được tạo trong các ví dụ trước là tất cả các mảng một chiều. Hãy nghĩ về mảng một chiều như là một dòng giá trị. Mảng bạn tạo trong VBA có thể có tới 60 thứ nguyên – mặc dù bạn hiếm khi cần nhiều hơn hai hoặc ba chiều trong một mảng. Ví dụ sau khai báo một mảng 81 số nguyên có hai chiều:

Dim MyArray (1 To 9, 1 To 9) As Integer

Bạn có thể nghĩ mảng này chiếm một ma trận 9 x 9 – hoàn hảo để lưu trữ tất cả các số trong câu đố Sudoku.

Để tham chiếu đến một phần tử cụ thể trong mảng này, bạn cần chỉ định hai số chỉ mục (tương tự như hàng Row của nó và cột Cột của nó trong ma trận). Ví dụ sau đây cho thấy cách bạn có thể gán giá trị cho một phần tử trong mảng này:

MyArray (3, 4)= 125

Câu lệnh này gán một giá trị cho một phần tử trong mảng. Nếu bạn đang nghĩ về mảng theo ma trận 9 x 9, thì điều này sẽ gán 125 cho phần tử nằm ở hàng thứ ba và cột thứ tư của ma trận.

Dưới đây là cách khai báo mảng ba chiều, với 1.000 phần tử:

Dim My3DArray (1 To 10, 1 To 10, 1 To 10) As Integer

Bạn có thể nghĩ về một mảng ba chiều như một khối lập phương. Hình dung một mảng nhiều hơn ba chiều là khó khăn hơn.

Mảng động

Bạn cũng có thể tạo các mảng động . Một mảng động không có số lượng phần tử đặt trước. Khai báo một mảng động với một bộ dấu ngoặc rỗng:

Dim MyArray () As Integer

Trước khi bạn có thể sử dụng mảng này, bạn phải sử dụng câu lệnh ReDim để cho VBA biết mảng đó có bao nhiêu phần tử. Thông thường, số lượng phần tử trong mảng được xác định trong khi mã của bạn đang chạy. Bạn có thể sử dụng câu lệnh ReDim bất kỳ số lần, thay đổi kích thước của mảng thường xuyên khi cần thiết. Ví dụ sau đây cho thấy cách thay đổi số lượng phần tử trong một mảng động. Nó giả định rằng biến NumElements chứa một giá trị mà mã của bạn đã tính.

ReDim MyArray (1 To NumElements)

Khi bạn sắp xếp lại một mảng bằng cách sử dụng ReDim, bạn xóa sạch mọi giá trị hiện được lưu trữ trong các phần tử mảng. Bạn có thể tránh phá hủy các giá trị cũ bằng cách sử dụng từ khóa Bảo tồn. Ví dụ sau đây cho thấy cách bạn có thể bảo tồn các giá trị của mảng khi bạn sắp xếp lại mảng:

ReDim Preserve MyArray (1 To NumElements)

Nếu MyArray hiện có mười phần tử và bạn thực thi câu lệnh trước với NumElements bằng 12, thì mười phần tử đầu tiên vẫn còn nguyên và mảng có chỗ cho hai phần tử bổ sung (tối đa là số có trong NumElements biến). Tuy nhiên, nếu NumElements bằng 7, bảy phần tử đầu tiên được giữ lại nhưng ba phần tử còn lại đáp ứng sự sụp đổ của chúng.

Xem thêm: VBA Excel là gì? Lập trình VBA trong Excel là gì?

Tham khảo khóa học VBA Excel tại NIIT-ICT Hà Nội

LEAVE A REPLY

Please enter your comment!
Please enter your name here