Использование функции Split в VBA Excel, ее синтаксис и параметры. Значения, возвращаемые функцией Split. Примеры использования.
Функция Split предназначена в VBA Excel для разделения строки на подстроки по специальным меткам — разделителям. Разделителем может быть как отдельный символ, так и строка из нескольких символов. Функция Split по своему действию является обратной функции Join, которая создает одну строку из массива подстрок.
Синтаксис функции
1 |
Split (Expression,[Delimiter],[Limit],[Compare]) |
Обязательным параметром функции Split является Expression. Если остальные параметры явно не указаны, используются их значения по умолчанию.
Параметры функции
Параметр | Описание | Значение по умолчанию |
---|---|---|
Expression | Строка, содержащая подстроки и разделители | Нет |
Delimiter | Разделитель, представляющий один или более символов | Пробел |
Limit | Максимальное число подстрок, на которые должна быть разделена входная строка | -1 |
Compare* | Определяет, какое используется сравнение, двоичное — CompareMethod.Binary (0) или текстовое — CompareMethod.Text (1) | 0 |
*Если используется двоичное сравнение (0 или CompareMethod.Binary), функция чувствительна к регистру букв. Если используется текстовое сравнение (1 или CompareMethod.Text), функция не чувствительна к регистру букв.
Возвращаемые значения
Функция Split возвращает одномерный массив с индексацией от нуля, который содержит указанное параметром Limit число подстрок. Чаще всего, функция Split используется со значением параметра Limit по-умолчанию, равному -1, когда возвращаются все найденные в исходной строке подстроки.
Пример 1
1 2 3 4 5 |
Sub Test1() Dim a() As String a = Split("vremya ne zhdet") MsgBox a(0) & vbNewLine & a(1) & vbNewLine & a(2) End Sub |
Результат в MsgBox:
ne
zhdet
В первом примере используются Delimiter и Limit по-умолчанию.
Пример 2
1 2 3 4 5 |
Sub Test2() Dim a() As String a = Split("vremya-ne-zhdet","-", 2) MsgBox a(0) & vbNewLine & a(1) End Sub |
Результат в MsgBox:
ne-zhdet
Во втором примере Delimiter = «-«, а Limit = 2.
Для присваивания результатов функции Split используется предварительно объявленный текстовый динамический массив, который можно использовать в строке присваивания с пустыми скобками или без них. В представленных выше примерах массив указан без скобок.
Вы можете скопировать коды из приведенных примеров в модуль VBA своей рабочей книги Excel, посмотреть, как они работают. Поэкспериментируйте, подставляя свои данные, чтобы на практике ознакомиться с возможностями функции Split.
Это — невероятно круто!
И вы очень хорошо иллюстрируете примерами.
Спасибо!
Попытался сделать в стандартном модуле простую функцию, которая бы брала строку из ячейки и делила ее посредством Split, а потом извлекала из созданного массива по номеру аргумента нужное значение. Не вышло… Выдает №ЗНАЧ!
Если возможно, скажите, что не так.
Добрый день, Сергей!
Внесите небольшие изменения, и функция будет работать:
Учтите, что нумерация массива начинается с нуля, то есть первая подстрока будет возвращена при Номер = 0.
Огромное спасибо. Думал, что можно все вместе объявить в начале )
Здравствуйте, а если необходимо с помощью Split выбрать компонент из Исходной строки, где Delimiter = «,» и в последующем еще раз разделить Исходную строку с помощью Delimiter = «;», перенеся ее в следующую строку
Пример, 1563,484,466;151,01,52
Результат
1563 484 466
151 01 52
Здравствуйте, Алина!
Можно сделать так:
Интересно, имеются ли ограничения на длину исходной строки, подстроки?
Точно сказать не могу, но переменная типа String переменной длины может содержать до ≈2 млрд символов. Возможно, это и есть ограничение для исходных строк функции Split.
Здравствуйте. А «нулевую» индексацию изменить никак нельзя, верно? В моем случае приходится городить следующее:
Т.е. мне необходимо, чтобы первый индекс массива был не нулевым. Option Base1 тут не помогает. Есть ли другой способ, кроме, описанного мной выше.
Добрый день, Артем!
Упростить ваш код можно следующим образом:
Да, в примере, который я привел, можно упростить. Но это в нем и не требуется, это лишь пример того, как я «избавляюсь» от нулевого индекса. В моем «настоящем» макросе все довольно сложно, именно из-за этого нулевого индекса. Поэтому я задал вопрос, вдруг есть такая возможность, а я о ней не знаю. Как вариант, можно и без функции split обойтись, но тогда код на пару-тройку строк длиннее будет.
Могу предложить такой вариант:
Спасибо за подсказку. Вышел из положения следующим образом:
Не знал, что нижние индексы можно сдвигать в паре с верхними по типу:
ReDim Preserve a(n To UBound(a) + n)
, где n = 1,2,3 и т.д.Добрый день! Подскажите как выполнить такую задачу. Есть Эксель документ Книга1, в ней 1 столбец. Нужно разделить все ячейки в этом столбце и записать в Эксель документ Книга2. Первая часть массива разделенного текста в один столбец, вторая часть в другой. Спасибо
'А можно так:
a = Split("надо_неНадо", "_")(0) 'а= надо
a = Split("надо_неНадо", "_")(1) 'а= неНадо
Обсуждение закрыто.