Làm thế nào để sử dụng Mảng VBA trong Excel?

Bạn có thể chạy macro từ Visual Basic Editor bằng cách đặt con trỏ vào macro và nhấn phím F5 hoặc từ Excel bằng cách mở hộp thoại Macro (ALT + F8) chọn macro để chạy và nhấp vào Chạy. Tốt nhất là chạy các macro này từ Visual Basic Editor bằng cách sử dụng Gỡ lỗi> Bước vào (bằng cách nhấn F8) để bạn có thể xem chúng hoạt động. Hướng dẫn Nếu Tab Nhà phát triển không có trong Ruy-băng .. Mở Excel.

  • Vào VBA Editor (nhấn Alt + F11)

  • Chuyển đến Cửa sổ ngay lập tức. (Ctrl + G)

  • Viết mã bên dưới.

Application.ShowDevTools = True

Cách chèn mã VBA trong Excel

Đi tới Tab nhà phát triển> Nhóm mã> * Visual Basic

Nhấp vào Chèn> * Mô-đun.

  • Sẽ mở một Mô-đun trống cho bạn.

  • Viết / Dán mã được cung cấp trong Mô-đun đó

Untitled-1

Cách chạy mã VBA trong Excel

Chọn bất kỳ vị trí nào giữa Mã, * Sub… End Sub

Bấm Chạy & Chạy Sub * hoặc

F5

Untitled-1

Biến mảng tĩnh Thay vì sử dụng một số biến duy nhất để lưu trữ thông tin, bạn có thể sử dụng một biến mảng.

Khi bạn biết bạn cần lưu trữ bao nhiêu phần tử trong mảng, bạn có thể sử dụng một biến mảng tĩnh như sau:

Sub TestStaticArray () 'lưu trữ 10 tên trong sổ làm việc trong biến mảng MyNames () Dim MyNames (1 đến 10) As String' khai báo một biến mảng tĩnh Dim iCount As Integer For iCount = 1 To ThisWorkbook. Sheets.Count MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name Debug.Print MyNames (iCount) Tiếp theo iCount Erase MyNames () 'xóa nội dung biến, giải phóng một số bộ nhớ End Sub ==== Giải mã

Dim MyNames (1 đến 10) dưới dạng chuỗi

Chúng tôi có thứ nguyên-ize một MyNames có thể xác minh được dưới dạng một Chuỗi, có thể chứa 10 mục trong đó. Vì vậy, MyNames có thể xác minh là một kiểu Mảng.

Dim iCount As Integer

Chúng tôi đã khai báo một biến iCount là một Số nguyên, chỉ có thể chứa kiểu Số nguyên Giá trị

Đối với iCount = 1 To ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count sẽ cung cấp cho chúng ta Số lượng Trang tính trong Sổ làm việc.

ThisWorkbook, đề cập đến Workbook, trong đó mã đã được viết.

MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name

Bằng cách sử dụng một vòng lặp, chúng tôi đang gán, tên của mỗi trang tính cho một tên MyNames có thể xác minh được. MyNames là một kiểu Array có thể xác minh được, vì vậy nó sẽ lưu trữ tên từng sheet trong mỗi mục của mảng.

Debug.Print MyNames (iCount)

Ngay sau khi gán giá trị vào mỗi mục của một mảng, nó sẽ in giống nhau trong Im InstantWindow, mặc định là ở cuối cửa sổ VBA.

Bạn có thể xem chỉ định của từng giá trị và hiển thị giá trị của nó trong Im InstantWindow.

Image

Tiếp theo iCount

Tiếp theo được sử dụng để ra lệnh For Loop trong Excel VBA, lặp lại tác vụ tương tự một lần nữa, bằng cách tăng iCount Counter, cho đến khi iCount đạt đến Total Number of Sheets, trong sổ làm việc.

Biến mảng động Biến mảng động hữu ích khi bạn không biết trước có bao nhiêu phần tử mà bạn cần lưu trữ thông tin.

Bạn khai báo các biến mảng động giống như một biến mảng tĩnh, ngoại trừ việc bạn không cung cấp bất kỳ thông tin nào về kích thước mảng.

Trong ví dụ trên (Dim MyNames (1 đến 10) As String) nếu Số tờ lớn hơn 10, nó sẽ xảy ra lỗi, vì MyNames sẽ không thể lưu trữ nhiều hơn 10 Mục.

Sub TestDynamicArray () 'lưu trữ tất cả các tên trong sổ làm việc trong biến mảng MyNames () Dim MyNames () As String' khai báo một biến mảng động Dim iCount As Integer Dim Max As Integer Max = ThisWorkbook.Sheets. Count 'tìm kích thước mảng tối đa ReDim MyNames (1 To Max)' khai báo biến mảng có kích thước cần thiết For iCount = 1 To Max MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name MsgBox MyNames (iCount) Next iCount Erase MyNames () 'xóa nội dung biến thể, giải phóng một số bộ nhớ End Sub ==== Giải mã

Dim MyNames () As String

Chúng tôi có thứ nguyên-ize một MyNames có thể xác minh duy nhất dưới dạng Chuỗi, là một loại Mảng, do cách ly mở và đóng, sau tên có thể xác minh, nhưng sẽ không thể lưu trữ bất kỳ dữ liệu nào trong đó, vì chúng tôi chưa cung cấp Cấp trên của nó.

ReDim MyNames (1 đến tối đa)

Redim được sử dụng để re-Dimension-ize Array, Bây giờ nó sẽ gán cấp trên của Array Type Veriable.

Trong trường hợp này, tổng số trang tính trong Workbook (Max = ThisWorkbook.Sheets.Count)

===

MsgBox MyNames (iCount)

Trong ví dụ trước, chúng ta đã in Giá trị trong các biến trong Cửa sổ ngay lập tức, lần này, chúng ta đang in giá trị trong MessageBox, sẽ xuất hiện như thế này ..

Image

Nếu bạn biết rằng bạn sẽ cần một biến mảng có 1000 mục, hãy sử dụng một biến tĩnh. Nhược điểm là bạn sẽ sử dụng bộ nhớ cho 1000 mục mỗi lần, cũng có trường hợp bạn chỉ lưu trữ thông tin khoảng 10 mục. Nếu bạn sử dụng một biến mảng động, bạn sẽ sử dụng bộ nhớ hiệu quả hơn.

Đôi khi không thể tính toán biến mảng sẽ cần lớn như thế nào. Trong những trường hợp này, kích thước của biến mảng cần được tăng lên khi cần thiết. Khi bạn sử dụng câu lệnh ReDim để thay đổi kích thước biến mảng, nội dung biến cũng bị xóa để tránh xóa nội dung biến khi bạn Redim biến mảng, bạn sẽ cần sử dụng câu lệnh ReDim Preserve.

Sub GetFileNameList () 'lưu trữ tất cả các tên tệp trong thư mục hiện tại Dim FolderFiles () As String' khai báo một biến mảng động Dim tmp As String, fCount As Integer fCount = 0 tmp = Dir (" D: \ Test \. ") Trong khi tmp <> Empty fCount = fCount + 1 ReDim Preserve FolderFiles (1 To fCount) 'khai báo lại biến mảng (size + 1) FolderFiles (fCount) = tmp tmp = Dir Wend MsgBox fCount &" tên tệp là tìm thấy trong thư mục "& CurDir Erase FolderFiles" xóa nội dung biến thể, giải phóng một số bộ nhớ End Sub ==== Giải mã

Dim FolderFiles () As String

Chúng tôi có kích thước-ize một FolderFiles có thể xác minh duy nhất dưới dạng Chuỗi, là một loại Mảng, do mở và đóng Cách ly, sau tên có thể xác minh, nhưng sẽ không thể lưu trữ bất kỳ dữ liệu nào trong đó, vì chúng tôi chưa cung cấp Cấp trên của nó.

tmp = Dir (“D: \ Test \.”)

Lệnh Dir hoạt động như một trình thám hiểm, có thể giữ tên của tất cả các tệp & thư mục trong một thư mục. Bạn cũng có thể giới hạn tất cả các tệp theo một số tiêu chí cụ thể. Dir (“D: \ Test \ *. Pdf”) sẽ giới hạn từ tất cả các tệp thành chỉ tệp PDF hoặc phần mở rộng.

Trong khi tmp <> Empty

Thay vì Đối với vòng lặp trong Excel VBA, lần này, chúng tôi đang lặp lại hành động tương tự, sử dụng Excel VBA WHILE LOOP, trong đó tiêu chí kết thúc vòng lặp được đặt là tmp không bằng rỗng. Vì vậy, cho đến khi, có bất kỳ giá trị nào trong tmp có thể xác minh, vòng lặp sẽ công việc.

ReDim Lưu trữ các tệp thư mục (1 đến số lượng)

Các tệp thư mục có thể xác minh mảng không có bất kỳ cấp cao hơn nào ở vị trí bắt đầu. Nhưng, trong mỗi lần đặt lại, tệp sẽ tăng mức trên của nó bằng lệnh ReDim. Trong lần đầu tiên chạy 1, sau đó 2 .. và cứ tiếp tục như vậy cho đến fCount.Tuy nhiên, với mỗi lần tăng mức trên, nó sẽ mất tất cả các biến đã được gán. Bằng cách sử dụng lệnh Preserve, chúng ta có thể giữ hoặc lưu trữ giá trị đã được gán.

Wend

Wend sử dụng để yêu cầu For Loops trong VBA, lặp lại cùng một tác vụ cho đến khi đáp ứng các tiêu chí.

MsgBox fCount & “tên tệp được tìm thấy trong thư mục” & CurDir

Tại mỗi lần lặp lại, fcout sẽ tăng lên với +1 và giá trị cuối cùng của nó sẽ tăng theo số lượng tệp được tìm thấy trên thư mục / Folder đó. Lệnh CurDir cung cấp tên của Thư mục hiện tại. Trong trường hợp này là “D: \ Test”

Image