VBA ReDim | Xử lý mảng động bằng cách sử dụng VBA ReDim Preserve

Câu lệnh ReDim trong Excel VBA

Câu lệnh VBA Redim tương tự như câu lệnh dim nhưng sự khác biệt là nó được sử dụng để lưu trữ hoặc phân bổ thêm không gian lưu trữ hoặc giảm không gian lưu trữ mà một biến hoặc một mảng có với nó, bây giờ có hai khía cạnh quan trọng được sử dụng với câu lệnh là Preserve, nếu dùng câu lệnh này thì bảo toàn sẽ tạo ra một mảng mới với kích thước khác và nếu không sử dụng bảo tồn với câu lệnh này thì nó chỉ thay đổi kích thước mảng của biến hiện tại.

Mảng là một phần quan trọng của mã hóa VBA. Sử dụng mảng, chúng ta có thể lưu trữ nhiều hơn một giá trị trong cùng một biến mà chúng ta đã xác định. Giống như cách chúng ta khai báo biến bằng từ “Dim”, tương tự, chúng ta cũng cần khai báo tên mảng bằng cách sử dụng “Dim”.

Để khai báo tên mảng, trước tiên chúng ta cần xác định loại mảng mà chúng ta sẽ định nghĩa. Trong mảng, chúng ta có 5 loại.

  1. Mảng tĩnh
  2. Mảng động
  3. Một mảng chiều
  4. Mảng hai chiều
  5. Mảng đa chiều

Trong mảng tĩnh trong excel, chúng ta sẽ quyết định trước giá trị dưới và giá trị trên của mảng trong khi khai báo biến. Ví dụ, hãy xem ví dụ dưới đây.

Mã:

 Sub ReDim_Example1 () Dim MyArray (1 đến 5) làm chuỗi kết thúc Sub 

Ở đây MyArray là tên của mảng có thể giữ giá trị từ 1 đến 5. MyArray có thể chứa 5 kết quả khác nhau trong đó như hình dưới đây.

Mã:

 Sub ReDim_Example1 () Dim MyArray (1 đến 5) As String MyArray (1) = "Hi" MyArray (2) = "Good" MyArray (3) = "Morning" MyArray (4) = "Have a" MyArray (5) = "Nice Day" End Sub 

Mảng động với câu lệnh ReDim

Nhưng trong mảng Động thì không phải như vậy, chúng ta sẽ không quyết định trước giá trị dưới và giá trị trên mà chúng ta chỉ xác định tên mảng và gán kiểu dữ liệu.

 Sub ReDim_Example1 () Dim MyArray () As String End Sub 

Để làm cho tên mảng động, chúng ta cần khai báo nó với từ “Dim” trước nhưng không quyết định trước kích thước của mảng. Chúng ta chỉ đặt tên một mảng với các giá trị trống bên trong dấu ngoặc đơn (). Khi mảng không bao gồm kích thước thì nó được coi là một mảng động.

Dim MyArray () Dưới dạng chuỗi

Thời điểm bạn đề cập đến kích thước của mảng bên trong dấu ngoặc đơn, nó sẽ trở thành một mảng tĩnh. Dim MyArray (1 đến 5) dưới dạng chuỗi

Trong mảng động, chúng tôi luôn thay đổi kích thước kích thước mảng bằng cách sử dụng từ “ReDim” trong dòng tiếp theo của mã.

ReDim MyArray (1 đến 6) dưới dạng chuỗi

Bất kỳ giá trị nào được lưu trữ cho tên mảng trong các bước trước đó, tức là sử dụng câu lệnh “Dim” là null và kích thước chúng ta đã khai báo bằng cách sử dụng “ReDim” sẽ trở thành kích thước mới của mảng.

Ví dụ để sử dụng VBA Redim Statement

Bạn có thể tải Mẫu VBA ReDim Excel này tại đây - Mẫu VBA ReDim Excel

Ví dụ 1

Hãy xem ví dụ về việc sử dụng câu lệnh “ReDim” trong thực tế. Làm theo các bước dưới đây để áp dụng “ReDim”.

Bước 1: Tạo tên macro trước.

Bước 2: Khai báo tên mảng dưới dạng chuỗi.

Mã:

 Sub ReDim_Example1 () Dim MyArray () As String End Sub 

Bước 3: Bây giờ sử dụng từ “Redim” và gán kích thước của mảng.

Mã:

 Sub ReDim_Example1 () Dim MyArray () Như chuỗi ReDim MyArray (1 đến 3) Kết thúc Sub 

Bước 4: Vì vậy, bây giờ tên mảng “MyArray” có thể chứa tối đa 3 giá trị ở đây. Gán giá trị cho 3 mảng này như hình dưới đây.

Mã:

 Sub ReDim_Example1 () Dim MyArray () Như chuỗi ReDim MyArray (1 đến 3) MyArray (1) = "Chào mừng" MyArray (2) = "to" MyArray (3) = "VBA" End Sub 

Vì vậy, mảng đầu tiên bằng từ “Chào mừng”, mảng thứ hai bằng từ “đến” và mảng thứ ba bằng từ “VBA”.

Bước 5: Bây giờ lưu trữ các giá trị mảng này trong các ô.

Mã:

 Sub ReDim_Example1 () Dim MyArray () Như chuỗi ReDim MyArray (1 đến 3) MyArray (1) = "Chào mừng" MyArray (2) = "to" MyArray (3) = "VBA" Range ("A1"). Giá trị = MyArray (1) Range ("B1"). Value = MyArray (2) Range ("C1"). Value = MyArray (3) End Sub 

Bước 6: Nếu bạn chạy mã này, chúng ta sẽ có các giá trị này trong ô A1, B1 và ​​C1 tương ứng.

Ví dụ # 2 - Thay đổi kích thước Kích thước Mảng trong khi Nhớ các Giá trị Cũ.

Sau khi tên mảng được gán giá trị, chúng ta cũng có thể thay đổi kích thước bất kỳ lúc nào trong quy trình bằng cách sử dụng từ “ReDim Preserve”.

Giả sử bạn đã khai báo tên mảng và gán các giá trị cho tên mảng đó như hình dưới đây.

Bây giờ bạn muốn tăng độ dài mảng lên 2 tức là 5. Trong trường hợp này, chúng ta có thể sử dụng từ VBA “ReDim Preserve” để thay đổi kích thước độ dài mảng để ghi nhớ các giá trị cũ.

Mã:

 Sub ReDim_Example2 () Dim MyArray () Như chuỗi ReDim MyArray (3) MyArray (1) = "Chào mừng" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Bảo tồn MyArray (4) MyArray (4) = Dải "Ký tự 1" ("A1"). Giá trị = MyArray (1) Dải ("B1"). Giá trị = MyArray (2) Dải ("C1"). Giá trị = MyArray (3) Dải ("D1"). Giá trị = MyArray (4) Kết thúc Sub 

Bây giờ chúng ta có thể gán thêm hai giá trị cho mảng.

Mã:

 Sub ReDim_Example2 () Dim MyArray () Như chuỗi ReDim MyArray (3) MyArray (1) = "Chào mừng" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Bảo tồn MyArray (4) MyArray (4) = Dải "Ký tự 1" ("A1"). Giá trị = MyArray (1) Dải ("B1"). Giá trị = MyArray (2) Dải ("C1"). Giá trị = MyArray (3) Dải ("D1"). Giá trị = MyArray (4) Kết thúc Sub 

Bây giờ lưu trữ các giá trị này trong các ô.

Mã:

 Sub ReDim_Example2 () Dim MyArray () Như chuỗi ReDim MyArray (3) MyArray (1) = "Chào mừng" MyArray (2) = "to" MyArray (3) = "VBA" ReDim Bảo tồn MyArray (4) MyArray (4) = Dải "Ký tự 1" ("A1"). Giá trị = MyArray (1) Dải ("B1"). Giá trị = MyArray (2) Dải ("C1"). Giá trị = MyArray (3) Dải ("D1"). Giá trị = MyArray (4) Kết thúc Sub 

Bây giờ hãy chạy macro và xem điều gì sẽ xảy ra

Vì vậy, chúng tôi có từ mới trong ô D1.

Lý do tại sao chúng ta cần sử dụng từ “bảo tồn” vì mảng nên nhớ các giá trị cũ của mảng trong thủ tục.

Thời điểm bạn bỏ qua từ “bảo tồn” nó sẽ không nhớ đến những giá trị cũ.

Những điều cần nhớ ở đây

  • ReDim chỉ có thể giữ giá trị cuối cùng của mảng chứ không phải nhiều giá trị. Ví dụ, chúng tôi không thể sử dụng mã này “ReDim Preserve MyArray (4 đến 5)”, điều này sẽ gây ra lỗi.
  • Chúng ta không thể ReDim các mảng tĩnh. Thời điểm bạn chỉ định kích thước của mảng bên trong dấu ngoặc đơn, nó sẽ trở thành một mảng tĩnh.
  • Sử dụng ReDim chúng ta không thể thay đổi kiểu dữ liệu. Mảng có thể chứa bất kỳ kiểu dữ liệu nào mà chúng ta đã gán trong khi khai báo mảng.

$config[zx-auto] not found$config[zx-overlay] not found