Mảng VBA trong Excel là gì và cách lập trình một


VBA đã là một phần của bộ Microsoft Office trong nhiều năm. Mặc dù nó không có đầy đủ chức năng và sức mạnh của một ứng dụng VB đầy đủ, VBA cung cấp cho người dùng Office sự linh hoạt để tích hợp các sản phẩm Office và tự động hóa công việc bạn làm trong đó.

Một trong những công cụ mạnh nhất có sẵn trong VBA là khả năng tải toàn bộ phạm vi dữ liệu vào một biến duy nhất gọi là mảng. Bằng cách tải dữ liệu theo cách này, bạn có thể thao tác hoặc thực hiện các phép tính trên phạm vi dữ liệu đó theo nhiều cách khác nhau.

Vậy mảng VBA là gì? Trong bài viết này, chúng tôi sẽ trả lời câu hỏi đó và chỉ cho bạn cách sử dụng một câu hỏi trong kịch bản VBA của riêng bạn.

Mảng VBA là gì?

Sử dụng VBA mảng trong Excel rất đơn giản, nhưng hiểu khái niệm về mảng có thể hơi phức tạp nếu bạn chưa từng sử dụng một mảng.

Hãy nghĩ về một mảng giống như một hộp có các phần bên trong nó. Mảng một chiều là một hộp có một dòng các phần. Mảng hai chiều là một hộp có hai dòng phần.

Bạn có thể đặt dữ liệu vào từng phần của hộp này, theo bất kỳ thứ tự nào bạn muốn.

In_content_1 all: [300x250] / dfp: [640x360]->

Khi bắt đầu tập lệnh VBA của bạn, bạn cần xác định hộp điều này bằng cách xác định mảng VBA của bạn. Vì vậy, để tạo một mảng có thể chứa một bộ dữ liệu (mảng một chiều), bạn sẽ viết dòng sau.

Dim arrMyArray(1 To 6) As String

Sau đó trong chương trình của bạn, bạn có thể đặt dữ liệu vào bất kỳ phần nào của mảng này bằng cách tham chiếu phần bên trong dấu ngoặc đơn.

arrMyArray(1) = "Ryan Dube"

Bạn có thể tạo một mảng hai chiều bằng cách sử dụng dòng sau.

Dim arrMyArray(1 To 6,1 to 2) As Integer

Số đầu tiên đại diện cho hàng và số thứ hai là cột. Vì vậy, mảng trên có thể chứa một phạm vi với 6 hàng và 2 cột.

Bạn có thể tải bất kỳ phần tử nào của mảng này với dữ liệu như sau.

arrMyArray(1,2) = 3

Điều này sẽ tải 3 vào ô B1.

Một mảng có thể chứa bất kỳ loại dữ liệu nào dưới dạng một biến thông thường, chẳng hạn như chuỗi, boolean, số nguyên, float và hơn thế nữa.

số bên trong dấu ngoặc đơn cũng có thể là một biến. Các lập trình viên thường sử dụng Vòng lặp để đếm qua tất cả các phần của một mảng và tải các ô dữ liệu trong bảng tính vào mảng. Bạn sẽ thấy cách thực hiện điều này sau trong bài viết này.

Cách lập trình một mảng VBA trong Excel

Hãy xem một chương trình đơn giản mà bạn có thể muốn tải thông tin từ bảng tính thành một mảng nhiều chiều.

Ví dụ: hãy xem bảng tính bán sản phẩm, nơi bạn muốn rút tên, mặt hàng và tổng doanh số bán ra khỏi bảng tính.

Lưu ý rằng trong VBA khi bạn tham chiếu các hàng hoặc cột, bạn đếm hàng và cột bắt đầu từ trên cùng bên trái tại 1. Vì vậy, cột rep là 3, cột mục là 4 và tổng cột là 7.

Để tải ba cột này trên tất cả 11 hàng, bạn sẽ cần viết tập lệnh sau.

Dim arrMyArray(1 To 11, 1 To 3) As String
Dim i As Integer, j As Integer
For i = 2 To 12
For j = 1 To 3
arrMyArray(i-1, j) = Cells(i, j).Value
Next j
Next i

Bạn sẽ nhận thấy rằng để bỏ qua hàng tiêu đề, số hàng trong lần đầu tiên Đối với giao diện cần bắt đầu ở 2 thay vì 1. Điều này có nghĩa là bạn cần trừ 1 cho giá trị hàng của mảng khi bạn đang tải giá trị ô vào mảng bằng cách sử dụng các ô (i, j). Giá trị.

Nơi chèn tập lệnh mảng VBA của bạn

Để đặt chương trình tập lệnh VBA trong Excel, bạn cần sử dụng Biên tập viên VBA. Bạn có thể truy cập mục này bằng cách chọn menu Nhà phát triểnvà chọn Xem mãtrong phần Điều khiển của ruy-băng.

Nếu bạn không thấy Nhà phát triển trong menu, bạn sẽ cần thêm nó Để thực hiện việc này, chọn TệpTùy chọnđể mở cửa sổ Tùy chọn Excel.

Thay đổi các lệnh chọn từ thả xuống thành Tất cả các lệnh. Chọn Nhà phát triểntừ menu bên trái và chọn nút Thêmđể di chuyển nó vào khung bên phải. Chọn hộp kiểm để bật nó và chọn OKđể kết thúc.

Khi cửa sổ Trình chỉnh sửa mã mở ra, hãy đảm bảo trang tính mà dữ liệu của bạn được chọn trong ngăn bên trái. Chọn Bảng tínhtrong danh sách thả xuống bên trái và Kích hoạtở bên phải. Điều này sẽ tạo ra một chương trình con mới có tên Worksheet_Activate ().

Hàm này sẽ chạy bất cứ khi nào tệp bảng tính được mở. Dán mã vào ngăn tập lệnh bên trong chương trình con này.

Tập lệnh này sẽ hoạt động trong 12 hàng và sẽ tải tên đại diện từ cột 3, mục từ cột 4 và tổng doanh số từ cột 7.

Sau khi cả hai vòng lặp kết thúc, mảng hai chiều ArrayMyArray chứa tất cả dữ liệu bạn đã chỉ định từ trang tính ban đầu. và sau đó ghi tất cả dữ liệu vào một trang tính mới.

Bạn có thể thực hiện việc này bằng cách thêm một vòng lặp For khác sau lần đầu tiên, với lệnh ghi kết quả vào một trang tính mới.

For k = 2 To 12
Sheets("Sheet2").Cells(k, 1).Value = arrMyArray(k - 1, 1)
Sheets("Sheet2").Cells(k, 2).Value = arrMyArray(k - 1, 2)
Sheets("Sheet2").Cells(k, 3).Value = arrMyArray(k - 1, 3)
Sheets("Sheet2").Cells(k, 4).Value = arrMyArray(k - 1, 3) * 0.05
Next k

Điều này sẽ hủy tải toàn bộ mảng vào Sheet2, với một hàng bổ sung chứa tổng số nhân với 5% cho số tiền thuế.

kết quả sẽ giống như thế này.

Như bạn có thể thấy, mảng VBA trong Excel cực kỳ hữu ích và linh hoạt như bất kỳ thủ thuật Excel nào khác.

Ví dụ trên là cách sử dụng rất đơn giản cho một mảng. Bạn có thể tạo các mảng lớn hơn nhiều và thực hiện sắp xếp, tính trung bình hoặc nhiều hàm khác đối với dữ liệu bạn lưu trữ trong đó.

Nếu bạn muốn có được sáng tạo thực sự, bạn thậm chí có thể tạo hai mảng chứa một loạt các tế bào từ hai trang tính khác nhau và thực hiện tính toán giữa các thành phần của từng mảng.

Các ứng dụng chỉ bị giới hạn bởi trí tưởng tượng của bạn.

01- Tự học lập trình VBA trong Excel, thiết lập môi trường

bài viết liên quan:


18.01.2020