Переменные типа массив с помощью VBA в Microsoft Excel 2010
Как использовать массив Excel VBA?
Макросы можно запустить либо из редактора Visual Basic, поместив курсор в макрос и нажав клавишу F5, либо из Excel, открыв диалоговое окно «Макросы» (ALT + F8), выбрав макрос для запуска и нажав «Выполнить». Эти макросы лучше всего запускать из редактора Visual Basic, выбрав «Отладка»> «Шаг с заходом» (нажав F8), чтобы вы могли наблюдать за их работой. Инструкция Если вкладки «Разработчик» нет на ленте .. Откройте Excel.
-
Перейдите в редактор VBA (нажмите Alt + F11)
-
Перейти к немедленному окну. (Ctrl + G)
-
Напишите ниже Код.
Application.ShowDevTools = True
Как вставить код VBA в Excel
Перейдите на вкладку разработчика> Группа кода> * Visual Basic
Щелкните Вставить> * Модуль.
-
Откроет для вас пустой модуль.
-
Напишите / вставьте предоставленный код в этот модуль
Как запустить код VBA в Excel
Выберите любое место между Code, * Sub… End Sub
Щелкните Run & Run Sub * или
F5
Статические переменные массива Вместо использования нескольких уникальных переменных для хранения информации вы можете использовать переменную массива.
Когда вы знаете, сколько элементов вам нужно сохранить в массиве, вы можете использовать статическую переменную массива следующим образом:
Код 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.
Следующий 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, которое будет выглядеть так ..
Если вы знаете, что вам понадобится переменная массива с 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»