Как использовать массив Excel VBA?

Макросы можно запустить либо из редактора Visual Basic, поместив курсор в макрос и нажав клавишу F5, либо из Excel, открыв диалоговое окно «Макросы» (ALT + F8), выбрав макрос для запуска и нажав «Выполнить». Эти макросы лучше всего запускать из редактора Visual Basic, выбрав «Отладка»> «Шаг с заходом» (нажав F8), чтобы вы могли наблюдать за их работой. Инструкция Если вкладки «Разработчик» нет на ленте .. Откройте Excel.

  • Перейдите в редактор VBA (нажмите Alt + F11)

  • Перейти к немедленному окну. (Ctrl + G)

  • Напишите ниже Код.

Application.ShowDevTools = True

Как вставить код VBA в Excel

Перейдите на вкладку разработчика> Группа кода> * Visual Basic

Щелкните Вставить> * Модуль.

  • Откроет для вас пустой модуль.

  • Напишите / вставьте предоставленный код в этот модуль

Untitled-1

Как запустить код VBA в Excel

Выберите любое место между Code, * Sub… End Sub

Щелкните Run & Run Sub * или

F5

Untitled-1

Статические переменные массива Вместо использования нескольких уникальных переменных для хранения информации вы можете использовать переменную массива.

Когда вы знаете, сколько элементов вам нужно сохранить в массиве, вы можете использовать статическую переменную массива следующим образом:

Код Sub TestStaticArray () 'сохраняет 10 имен в книге в переменной массива MyNames () Dim MyNames (от 1 до 10) As String' объявляет статическую переменную массива Dim iCount как целое число For iCount = 1 To ThisWorkbook. Sheets.Count MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name Debug.Print MyNames (iCount) Next iCount Erase MyNames () 'удаляет содержимое переменной, освобождает память End Sub ==== Decode

Dim MyNames (от 1 до 10) как строка

У нас есть размерность одного проверяемого MyNames как String, которая может содержать 10 элементов. Итак, MyNames veriable — это тип массива.

Dim iCount как целое число

Мы объявили одну переменную iCount как целое число, которое может содержать только числовое целочисленное значение типа Value

Для iCount = 1 To ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count даст нам количество листов в книге.

ThisWorkbook относится к Workbook, в котором был написан код.

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

Используя цикл, мы присваиваем имя каждого листа одному верифицируемому имени MyNames. MyNames — это проверяемый тип массива, поэтому он будет хранить имя каждого листа в каждом элементе массива.

Debug.Print MyNames (iCount)

Сразу после присвоения значения каждому элементу массива он будет печатать то же самое в ImmediateWindow, по умолчанию в нижней части окна VBA.

Вы можете просмотреть назначение каждого значения и отобразить его значение в ImmediateWindow.

Image

Следующий iCount

Next используется для указания цикла For Loop в Excel VBA, чтобы повторить ту же задачу снова, увеличивая счетчик iCount, пока iCount не достигнет общего количества листов в книге.

Переменные динамического массива Переменные динамического массива полезны, когда вы заранее не знаете, сколько элементов вам нужно хранить информацию.

Вы объявляете переменные динамического массива так же, как переменную статического массива, за исключением того, что вы не даете никакой информации о размере массива.

В приведенном выше примере (Dim MyNames (от 1 до 10) As String), если количество листов больше 10, произойдет ошибка, так как MyNames не сможет сохранить более 10 элементов.

Код Sub TestDynamicArray () 'сохраняет все имена в книге в переменной массива MyNames () Dim MyNames () As String' объявляет переменную динамического массива Dim iCount как целое число Dim Max как целое число Max = ThisWorkbook.Sheets. Count 'находит максимальный размер массива ReDim MyNames (1 To Max)' объявляет переменную массива с необходимым размером For iCount = 1 To Max MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name MsgBox MyNames (iCount) Next iCount Erase MyNames () 'удаляет изменяемое содержимое, освобождает часть памяти End Sub ==== Decode

Dim MyNames () As String

У нас есть размерность одного проверяемого MyNames как String, который является типом Array, из-за открытия и закрытия Paranthesis после проверяемого имени, но мы не можем хранить в нем какие-либо данные, поскольку мы не предоставили его UpperLevel.

ReDim MyNames (от 1 до макс.)

Redim используется для изменения размеров массива. Теперь он назначит верхний уровень проверяемого типа массива.

В этом случае общее количество листов в Рабочей книге (Макс. = ThisWorkbook.Sheets.Count)

===

MsgBox MyNames (iCount)

В последнем примере мы напечатали значение в переменных в окне Immediate Window, на этот раз мы печатаем значение в MessageBox, которое будет выглядеть так ..

Image

Если вы знаете, что вам понадобится переменная массива с 1000 элементами, используйте статическую переменную. Обратной стороной является то, что вы будете использовать память для 1000 элементов каждый раз, даже в тех случаях, когда вы храните информацию только о 10 элементах. Если вы используете переменную динамического массива, вы будете использовать память более эффективно.

Иногда невозможно рассчитать, насколько большой должна быть переменная массива. В этих случаях размер переменной массива необходимо увеличить по мере необходимости. Когда вы используете ReDim-оператор для изменения размера переменной массива, содержимое переменной также стирается, чтобы избежать удаления содержимого переменной, когда вы Redim переменной массива, вам нужно будет использовать ReDim Preserve-statement.

Код Sub GetFileNameList () 'сохраняет все имена файлов в текущей папке. Dim FolderFiles () As String' объявляет переменную динамического массива Dim tmp As String, fCount As Integer fCount = 0 tmp = Dir (" D: \ Test \. ") Пока tmp <> Empty fCount = fCount + 1 ReDim Preserve FolderFiles (1 To fCount) 'снова объявляет переменную массива (размер + 1) FolderFiles (fCount) = tmp tmp = Dir Wend MsgBox fCount &" имена файлов являются найденный в папке "& CurDir Erase FolderFiles 'удаляет изменяемое содержимое, освобождает часть памяти End Sub ==== Decode

Dim FolderFiles () As String

У нас есть размерность одного проверяемого файла FolderFiles как String, который является типом массива, из-за открытия и закрытия Paranthesis после проверяемого имени, но мы не можем хранить в нем какие-либо данные, поскольку мы не предоставили его UpperLevel.

tmp = Dir («D: \ Test \.»)

Команда Dir работает как проводник, который может хранить имена всех файлов и папок в каталоге. Вы также можете ограничить все файлы определенными критериями. Dir («D: \ Test \ *. Pdf») ограничит все файлы только файлами PDF или расширениями.

Пока tmp <> Пусто

Вместо Для цикла в Excel VBA на этот раз мы повторяем то же действие, используя Excel VBA WHILE LOOP, где критерий завершения цикла был установлен как tmp, не равный пустому. Итак, пока не будет какое-либо значение в tmp veriable, цикл будет работает.

ReDim Preserve FolderFiles (1 To fCount)

Файлы FolderFiles, проверяемые массивом, не имеют верхнего уровня в начальной позиции. Но при каждом повторении он будет увеличьте его верхний уровень с помощью команды ReDim. При первом запуске 1, затем 2 …​ и так далее, пока fCount. Однако с каждым увеличением верхнего уровня он теряет все уже назначенные переменные. Используя команду Preserve, мы можем удерживать или сохранить уже присвоенное значение.

Wend

Wend обычно указывал For Loops в VBA, повторять ту же задачу снова, пока не будут выполнены критерии.

MsgBox fCount & «имена файлов находятся в папке» & CurDir

При каждом повторении fcout будет увеличиваться на +1, а его конечным значением будет количество файлов, найденных в этом каталоге / папке. Команда CurDir дает имя текущего каталога. В этом случае «D: \ Test»

Image