Очистить массив Vba Excel

Обновлено: 05.07.2024

В этом руководстве мы расскажем, как создавать и очищать массивы в VBA Excel.
Массивы в основном представляют собой группу переменных со схожими свойствами. Вместо использования нескольких переменных лучше использовать один массив. Используя массивы, мы можем использовать одну переменную для нескольких значений. Он может хранить от 1 до более тысячи значений в зависимости от размера программы. Массивы используют функцию цикла для работы, которая помогает хранить, извлекать и изменять значения в нем. Также рекомендуется очищать массивы в программах VBA в конце, чтобы освободить память, используемую для их хранения. Это очень полезно при работе с большими данными или электронными таблицами, так как снижает общую производительность программы. Здесь мы используем массивы в VBA Excel для ввода более одного значения в одну переменную с помощью макросов.


Шаг 1. Вставьте оператор Arrays < br />Теперь давайте поработаем над простым кодом, который запрашивает имя ученика и вводит его на лист.
В VBA мы объявляем массив так же, как объявляем одну переменную, то есть с помощью оператора Dim.
Название массива здесь — имя ученика. Кроме того, мы определили массив как строку.
Далее мы будем использовать цикл «для следующего», чтобы мы могли принять 5 входных данных для значения. Теперь вместо того, чтобы хранить каждый ввод в отдельной переменной, мы вызвали массив, который мы создали ранее, для хранения и представления значения на экране.

Шаг 2. Вставьте значение, которое нужно ввести в ячейку.
Теперь вернемся к листу и посмотрим, как это работает. Здорово! макрос попросил нас ввести. Обратите внимание, что когда мы вводим имена, данные вводятся на листе.

Шаг 3. Вставьте функцию цикла.
Аналогичным образом вы можете назначить несколько массивов, разделив их запятой.
Давайте воспользуемся тем же кодом, но вместо одного массива мы объявим 3 массива для разных значений: имени учащегося, идентификатора учащегося и его оценок.
После этого мы включим имена массивов в цикл «для следующего», чтобы пользователю также предлагалось ввести идентификатор и метки.

Шаг 4. Введите значения для ввода в ячейку
Давайте откроем лист Excel и дважды щелкните в любом месте, чтобы запустить код. Здесь вы заметите, что после имени пользователю предлагается ввести идентификатор и метки.

Шаг 5. Очистите массивы с помощью ключевого слова Erase.
Вы также можете очистить массив в VBA в конце кода, используя ключевое слово Erase, за которым следует имя массива, который вы хотите удалить. Чисто. Это в основном освободит память, используемую для хранения значения.
Если вы запустите код сейчас, он запросит у вас данные, но не сохранит ни одно из введенных значений.
В основном именно так вы можете создавать и очищать массив с помощью VBA в Excel.

Похожие сообщения:

Опубликовано 11 мая 2014 г. пользователем XZoLMLRU2Pg . Эта запись была размещена в Office и помечена как Excel, VBA. Добавьте постоянную ссылку в закладки.

Как очистить весь массив? Как насчет коллекции?


8 ответов 8

Для очистки массива можно использовать операторы Erase или ReDim. Примеры каждого показаны в документации MSDN. Например:

Чтобы удалить коллекцию, вы перебираете ее элементы и используете метод Remove:


Sarfraz, почему бы вам не сказать: MyCollection = new Collection. Зачем перебирать это?

что, если я просто вызову ReDim ? Он просто обнуляет значения или выделяет новый массив? Меня беспокоит производительность по времени при вызове ReDim для сброса большого массива в цикле

Для удаления динамического массива в VBA используйте инструкцию Erase .


Что послужило причиной публикации ответа через два года после того, как был задан вопрос, при условии, что этот самый ответ уже был опубликован?

Бесполезные комментарии для вас обоих. Отсутствие ответа демонстрирует стирание. Кроме того, прошел почти год после того, как Андрес опубликовал свой ответ, и он фактически дал мне однострочное кодовое решение, которое я искал. Если бы я мог поставить минус обоим вашим комментариям, я бы это сделал.

Добавленные комментарии полезны для тех из нас, кто просматривает их позже, например, я использовал этот ответ в декабре 2018 года. Спасибо, Андрес, что нашли время опубликовать.

Это так же просто, как :

Найди себе лучшее применение: обычно я проверяю, не является ли вариант пустым, и все вышеперечисленные методы терпят неудачу при проверке. Я обнаружил, что вы можете сделать вариант пустым:

таким образом я получаю желаемое поведение


Тогда массив будет без содержимого и может быть снова заполнен.


Это изменит размер массива до нуля и сотрет все данные.


я столкнулся с проблемой очистки всего массива с помощью dim/redim :

имея 2 массива на уровне модуля, Private внутри пользовательской формы,

Один массив динамический и использует модуль класса, другой фиксированный и имеет специальный тип.

И у меня есть подпрограмма, объявленная общедоступной, для очистки этих массивов (и связанных с ними элементов управления, созданных во время выполнения) внутри и снаружи пользовательской формы, например:

Обычная переменная VBA — это заполнитель, в котором хранится значение отдельных данных. Он имеет отношение 1 к 1, т. е. 1 переменная для 1 значения.

Теперь представьте, что вы храните несколько значений одного типа. Вместо того, чтобы создавать несколько переменных, вы можете просто создать одну переменную и хранить все одинаковые типы значений. Эта переменная называется МАССИВОМ.

Массивы в VBA

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

Что вы узнаете:

Массив VBA

Массивы – это переменная особого типа, которая может хранить несколько значений одного и того же типа данных.

Например, если у вас есть имена 100 сотрудников, то вместо создания 100 переменных строкового типа данных вы можете просто создать одну переменную массива строкового типа и присвоить 100 значений той же самой переменной массива.

Одномерный массив

Массив, все элементы которого расположены в одной строке или в одном столбце, называется одномерным массивом. Список имен всех учащихся класса в одном столбце является примером одномерного массива. Он объявлен, как показано ниже.

Тусклое имя массива (нижняя граница — верхняя граница) как тип данных

Существует несколько способов объявить массив. Ниже приведены несколько примеров.

Пример:

Создает массив с адресами 0,1,2,3, который будет принимать целочисленные значения.

По умолчанию от 0 до 3 и создает массив с расположением 0,1,2,3, который будет принимать строковые значения.

Создает массив, начиная с 13, т. е. 13, 14 и 15, и принимает значения типа Double. Мы упомянули, что нижняя граница равна 13, поэтому массив начнет выделять значения с позиции 13, а не с 0.

Давайте создадим простой код и разберемся во всех трех способах объявления массива.

Примечание. Чтобы написать код VB, откройте Microsoft Excel (поддерживаемые версии: Excel 2007, 2010, 2013, 2016, 2019). Перейдите на вкладку «Разработчик» -> Visual Basic (в качестве альтернативы используйте сочетание клавиш Alt + F11). В редакторе VB нажмите «Вставить» -> «Модуль» и вставьте приведенный ниже код.

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

Нажмите F5 или нажмите кнопку запуска на панели инструментов, чтобы выполнить код.

Одномерный массив — вывод

Обычная переменная и переменная-массив

Теперь мы знаем, как работает одномерный массив. Итак, давайте на минутку разберемся, почему массивы так важны в языках программирования.

Предположим, что вам нужно ввести зарплату 5 сотрудников. Чтобы добиться этого с помощью обычной переменной, вам нужно создать 5 переменных.

Теперь давайте создадим тот же код, используя переменную Array.

Здесь мы только что использовали одну переменную массива, в которой будут храниться имена всех сотрудников. Предположим, вам нужно добавить еще 100 имен сотрудников, тогда вам просто нужно изменить размер массива и не нужно создавать новую переменную.

Это уменьшит количество строк в коде и сделает его понятным и читабельным.

Двумерный массив

Двумерный массив имеет 2 индекса: первый индекс представляет строки, а второй индекс представляет столбец. Он состоит из нескольких строк и столбцов и обычно представлен в виде таблицы.

Объявление двухмерного массива выглядит следующим образом:

Dim ArrayName(FirstIndex to LastIndex, FirstIndex to LastIndex) As DataType.

Рассмотрим пример хранения оценок 2 учащихся, полученных по 3 предметам. Итак, мы создадим двумерный массив, состоящий из 2 строк и 3 столбцов.

Мы начнем массив со строки 1 до строки 2 и столбца 1 до столбца 3.

Нажмите F5 или нажмите кнопку запуска на панели инструментов, чтобы выполнить код.

Строка 2 и столбец 2

Двумерный массив — пример

Строка 1 и столбец 3

Двухмерный Массив - вывод

Фиксированные массивы

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

Фиксированные массивы обычно используются, когда вы уверены в размере массива. Например, для количества дней в неделе вы можете создать массив с нижней границей 0 и верхней границей 6 и быть уверенным, что вы никогда не измените его размер.

Динамические массивы

Динамические массивы позволяют изменять размер массива во время выполнения. Они полезны, когда вы не уверены в размере массива. Предположим, что при поступлении в колледж вы можете не знать, сколько студентов на самом деле получат допуск, поэтому вы не можете определить размер во время проектирования или объявления.

Объявление динамического массива похоже на объявление статического массива с пустыми скобками.

Dim Employee() как строка

УМЕНЬШИТЬ

Когда мы хотим изменить размер, необходимый для использования REDIM, мы должны отметить, что нижняя граница не может быть изменена, мы можем изменить только верхнюю границу массива.

REDIM

Теперь мы знаем, что можем изменить размер массива во время выполнения, поэтому мы можем использовать оператор ReDim всякий раз, когда нам нужно увеличить ubound массива. Попробуем еще раз увеличить размер массива и добавить новое имя ученика.

Пример REDim

Вы бы заметили, что в результате не отображаются имена студентов, добавленных ранее, он дает нулевое значение. Это связано с тем, что оператор Redim создаст новый массив нового размера и уничтожит старые значения.

Заповедник ReDim

Выражение Represerve помогает нам преодолеть ограничение ReDim, сохраняя старые значения и тем самым увеличивая размер массива.

Давайте перепишем приведенный выше код, используя ReDim Preserve.

REDim Preserve

Поскольку мы использовали ключевое слово save, введенные ранее значения не теряются, а новое значение добавляется успешно.

Массив вариантов

До сих пор мы видели массив, принимающий значения одного и того же типа. Теперь давайте объявим массив как вариант и сохраним различные типы данных, такие как String, Date, Long, Integer, в одном массиве.

Пример:

Variant Array

Методы массива VBA

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

<таблица> Sl. НетИмяСинтаксисОписание 1ArrayArray(arglist)Преобразует обычный вариант
переменной в массив. 2EraseErase arraynameИспользуется для повторной инициализации массива фиксированного размера
и освобождения памяти для динамического массива. 3IsArrayIsArray (имя переменной)Определяет, является ли переменная массивом. 4LboundLBound( ArrayName, [Dimension] )Возвращает нижний индекс
массива. 5UboundUBound( ArrayName, [Dimension] )Возвращает самый высокий индекс < br />массива. 6РазделитьРазделить(выражение, [ разделитель, [ предел, [ сравнить ] ]])Делит строку на несколько подстрок и возвращает массив, начинающийся с нуля. 7JoinПрисоединяйтесь(кислый cearray, [ разделитель ])Объединяет несколько подстрок в массиве и возвращает строковое значение. 8Фильтр td>Filter(sourcearray, match, [include, [compare]])Filter позволит нам искать
указанное совпадение в массиве.

Давайте подробно обсудим каждый из них на примере.

Давайте объявим обычную переменную варианта и будем использовать ее как массив.Если вы хотите преобразовать обычную вариантную переменную в массив, нам нужно использовать функцию МАССИВ, как показано в приведенном ниже примере.

Функции массива принимают аргумент, содержащий значения, разделенные запятыми. Эти значения присваиваются как элемент массива.

Array

Вы должны идентифицировать переменную массива с помощью индекса, поэтому в приведенном выше примере значения извлекаются как varData(0) varData(2) varData(3).

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

Синтаксис: стереть имя массива

Стирание работает по-разному для разных типов данных, как показано ниже.

  • Для фиксированного числа: все значения обнуляются.
  • Для фиксированного строкового типа данных: все значения сбрасываются до нулевой длины.
  • Для динамического массива: освобождает память, используемую массивом.

Пример:

Результат перед использованием функции стирания

Результат перед использованием функции стирания

Результат после использования функции "Стереть"

Эта функция используется для определения того, является ли данная входная переменная массивом или нет. Возвращает true, если введенная переменная верна, иначе возвращает false.

Синтаксис: IsArray (имя переменной)

Пример:

Результат из первого Msgbox

Результат из второго окна сообщения

Он возвращает самый нижний индекс массива, указанного в качестве аргумента для функции Lbound.

Синтаксис: LBound(ArrayName, [Dimension])

ArrayName – это имя массива.

Размер – это необязательное целочисленное значение. Если массив имеет несколько измерений, вы можете указать, для какого измерения вы хотите определить Lbound.

Пример:

lbound

Он возвращает верхний индекс массива, указанного в качестве аргумента в функции Ubound.

Синтаксис: UBound(ArrayName, [Dimension])

ArrayName – это имя массива.

Размер – это необязательное целочисленное значение. Если массив имеет несколько измерений, вы можете указать, какое измерение вы хотите определить для Ubound.

Пример:

Ubound

Он возвращает массив с количеством подстрок, полученных из заданной целой строки.

Синтаксис: Split(выражение, [ разделитель, [ предел, [ сравнение ]]])

Пример. В приведенном ниже примере мы используем разделитель как – и предел как 3.

Следовательно, функция разделения разделит всю строку на подстроку на основе разделителя. Но мы также упомянули предел 3, поэтому подстроки не будут формироваться после предела 3. Таким образом, последний разделитель – будет пропущен.

Это обратная сторона разделения. Объединение создаст одну строку путем объединения нескольких подстрок.

Синтаксис: Join(исходный массив, [ разделитель ])

Sourcearray: одномерный массив строк, которые вы хотите объединить в одну.

Разделитель: указанный разделитель будет добавлен после каждой строки при объединении.

Пример:

Все 3 значения объединяются, а \ помещается между каждым словом, как мы уже упоминали \ в качестве разделителя.

Join

Фильтр позволит нам искать указанное совпадение в массиве. На основе критериев фильтра будет возвращено подмножество массива строк.

Синтаксис: Filter(исходный массив, совпадение, [включение, [сравнение]])

Пример:

В этом примере будет выполняться поиск слова «помощь» во всей строке массива с использованием функции фильтра.

Filter

Часто задаваемые вопросы

Ответ: Чтобы получить длину массива, мы используем функцию Ubound. Эта функция даст нам верхний индекс указанного массива.

Ответ: Одномерный массив объявлен, как показано ниже.

Тусклое имя массива (нижняя граница — верхняя граница) как тип данных

Пример: Dim Myarray (от 0 до 2) как целое число

Двумерный массив объявляется, как показано ниже.

Dim ArrayName(FirstIndex to LastIndex, FirstIndex to LastIndex) As DataType.

Пример: затемнение меток (от 1 до 3, от 0 до 2) в виде целого числа

Ответ: мы можем использовать функцию Transpose для преобразования диапазона в массив. Этот код создаст Mys[10]

преобразовать ширину диапазона в массив

Ответ: вариантный массив будет принимать все типы данных для своего индекса, т. е. вы можете хранить различные типы значений в одном массиве.

Пример:

Ответ: используется для объявления нижнего индекса массива и используется при запуске модуля. По умолчанию нижний индекс равен 0, если вы объявляете Option Base 1 на уровне модуля, тогда для всех массивов нижний индекс по умолчанию будет равен 1.

Заключение

В этом руководстве мы узнали, как массивы используются в VBA, и увидели, чем массивы отличаются от обычных переменных. Мы рассмотрели одномерные и двумерные массивы на примерах. Мы также обсудили фиксированные и динамические массивы.

На примерах обсуждались способы изменения размера массива во время выполнения, а также сохранения значений с помощью redim save. Наконец, мы изучили методы массива, которые помогут нам в выполнении нескольких операций.

Программные решения В сети

Как проверить, пуст ли массив в VBA

Когда список или набор элементов с одинаковым типом данных хранится в непрерывных ячейках памяти, мы называем это массивом. Массивы — это полезные объекты, которые широко используются в разработке программного обеспечения для организации данных. Некоторые реальные примеры того, где вы можете их использовать, могут включать:

  1. В онлайн-играх, таких как шахматы, используются двумерные массивы.
  2. Кривая ЭКГ — это пример использования массива в реальном времени.

Я покажу вам пару примеров массивов, а затем мы рассмотрим, как проверить, пуст ли он.

Вывод в Excel для массива с чудесами света

Вот еще один пример создания массива в результате использования функции Split.

Приведенный выше код выводит список дней при переборе массива, созданного при разделении и сохранении строки.

Типы массивов

В VBA массивы могут быть статическими или динамическими.

Статические массивы

Размер массива фиксирован и не может быть изменен.

Динамические массивы

Размер массива не является фиксированным и может быть изменен в зависимости от ваших требований.

Проверить, является ли массив пустым или содержит данные

В VBA, если мы сначала не определим размер массива, мы не сможем использовать функции Lbound() и UBound. Это выдаст ошибку. Итак, нам нужно использовать ключевое слово Redim и определить размер, как только мы объявим массив.

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

Ниже приведены несколько методов, которые вы можете использовать.

Функция присоединения

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

Исходный массив – это имя массива, элементы которого нужно соединить.

Разделитель — это символ, который будет помещен между конкатенацией каждых двух элементов при объединении элементов массива. Это необязательный параметр, и если он не указан, по умолчанию используется пробел " ".

Если в качестве разделителя указана строка нулевой длины «», объединение происходит без вставки каких-либо символов во время конкатенации.

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

Приведенный ниже фрагмент кода можно добавить к приведенному выше примеру кода, чтобы уведомить вас о том, пуст ли массив или нет.

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

Перебрать все элементы в массиве

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

Функция Ubound + обход ошибки

Поскольку, если мы используем функцию Ubound или Lbound для пустого массива, будет выдана ошибка, мы собираемся использовать оператор «On Error Resume Next» и поймать номер ошибки, чтобы проверить, пуст ли массив. Здесь массив считается пустым, если для него не определен размер. Я создал функцию, которая поможет вам лучше понять код и использовать его.

Результаты тестирования на пустой массив с использованием ubound/lbound

Функция StrPtr() для массива байтов

Байтовый массив — это не что иное, как последовательность или символы. Строка может быть напрямую назначена массиву байтов. Два элемента массива используются для выделения места для символа из строки. Приведенный ниже код должен помочь вам понять дальше.

Объяснение вывода:

Изначально массив пуст, поэтому StrPtr(arr1) возвращает значение true.

Нулевой символ Ascii

Значение "o" в кодировке Ascii равно 111

Нулевой символ Ascii

Значение "f" в кодировке Ascii равно 102

Нулевой символ Ascii

Значение "f" в кодировке Ascii равно 102

Нулевой символ Ascii

Значение "e" в кодировке Ascii равно 101

Нулевой символ Ascii

Значение "e" в кодировке Ascii равно 101

Нулевой символ Ascii

Наконец, массив не пуст, поэтому StrPtr(arr1) возвращает false.

Результаты проверки массива с помощью функции strptr.

Заключение

В VBA, кроме функции StrPtr() для байтовых массивов, нет прямых методов, позволяющих определить, пуст массив или нет. Однако наш лучший друг, Magical VBA, предлагает гибкие функции, которые можно комбинировать с вашей собственной логикой для проверки размера массива или наличия или отсутствия данных в массиве любого типа данных.

Значение «ПУСТОЙ» здесь зависит от пользователя. Это может быть либо массив, размер которого не определен, либо массив определенного размера, но без данных.

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

Если вы хотите узнать, как проверить, пуста ли ячейка, ознакомьтесь с нашей статьей здесь.

Об авторе Лакшми Рамакришнан

Лакшми Рамакришнан – специалист по автоматизации с опытом работы тренером, архитектором решений, тестировщиком и разработчиком. Она создала инструменты VBA для самых разных целей, от бухгалтерского учета до ИТ, и с удовольствием делится своим опытом и знаниями, чтобы помочь новичкам.

Читайте также: