Vba excel разделить строку по разделителям

Обновлено: 04.07.2024

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

Его можно использовать, если вы читаете строку из значения, разделенного запятыми (CSV-файл), или если у вас есть почтовый адрес, состоящий из одной строки, но вы хотите, чтобы он отображался в виде нескольких строк.

Функция разделения VBA имеет четыре параметра:

  • Выражение — строка текста, которую вы хотите разделить на разные части.
  • Разделитель(необязательно)– строка или непечатаемый символ – определяет символ-разделитель, который будет использоваться для разделения. Если символ-разделитель не указан, используется пробел по умолчанию.
  • Лимит(необязательно) – число – определяет количество разделений. Если пусто, все доступные разбиения будут сделаны в пределах строки. Если установлено значение 1, то разделения производиться не будет. По сути, это позволяет вам выделить определенное количество значений, начиная с начала строки, например. где строка очень длинная и вам нужны только первые три разбиения.
  • Сравнить(необязательно). Если ваш разделитель является текстовым символом, то это используется для переключения, учитывается ли разделитель с учетом регистра или нет. Значения: vbBinaryCompare (с учетом регистра) и vbTextCompare (без учета регистра).

Функция разделения всегда возвращает массив.

Простой пример функции разделения

В этом примере разделитель не указан, поскольку между всеми словами есть пробел, поэтому можно использовать разделитель по умолчанию (пробел).

Массив не имеет размеров и задается как строка. Переменная I, которая используется в цикле For…Next, должна иметь размерность как вариант.

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

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

Вы можете решить эту проблему, используя функцию "Заменить", чтобы заменить любые двойные пробелы одним пробелом:

Конечный или начальный пробел также может вызывать проблемы, создавая пустое разделение. Часто их очень трудно увидеть. Вы можете удалить эти лишние пробелы с помощью функции обрезки:

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

Можно использовать в качестве разделителя точку с запятой (;). Это часто встречается в строках адресов электронной почты для разделения адресов. Вам может быть отправлено электронное письмо, которым поделились с несколькими коллегами, и вы хотите увидеть в своем рабочем листе список тех, кому оно было отправлено. Вы можете легко скопировать адреса электронной почты из полей "Кому" или "Копировать" в свой код.

Обратите внимание, что цикл For…Next используется для перебора массива. Первый элемент в массиве всегда начинается с нуля, и для получения максимального количества элементов используется функция «Верхняя граница».

После запуска этого кода ваш рабочий лист будет выглядеть так:

PIC 01

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

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

После того, как вы запустите этот код, ваш рабочий лист будет выглядеть следующим образом:

PIC 02

Отдельно отображаются только первые три значения разделения. Последние три значения отображаются как одна длинная строка и не разделяются.

Если вы выберете предельное значение, превышающее количество разделителей в строке, это не приведет к ошибке. Строка будет разделена на все составные части, как если бы предельное значение не было указано.

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

Параметр Compare определяет, является ли разделитель чувствительным к регистру или нет. Это неприменимо, если разделителями являются запятые, точки с запятой или двоеточия.

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

В этом примере разделяемая строка использует символ "X" в качестве разделителя. Однако в этой строке есть смесь символов «X» верхнего и нижнего регистра.Параметр «Сравнить» в функции «Разделить» использует символ «X» в верхнем регистре.

Если для параметра Compare установлено значение vbBinaryCompare, символы нижнего регистра «x» будут игнорироваться, и ваш рабочий лист будет выглядеть следующим образом:

PIC 03

Если для параметра Compare установлено значение vbTextCompare, то в разделении будут использоваться символы нижнего регистра «x», и ваш рабочий лист будет выглядеть следующим образом:

PIC 04

Обратите внимание, что значение в ячейке A6 усечено, поскольку оно содержит символ «x» в нижнем регистре. Поскольку разделение не чувствительно к регистру, любой разделитель, являющийся частью подстроки, вызовет разделение.

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

Использование непечатаемых символов в качестве символа-разделителя

В качестве разделителя можно использовать непечатаемые символы, например возврат каретки (разрыв строки).

Здесь мы используем vbCr для указания возврата каретки >

В этом примере строка создается с использованием vbCr (символ возврата каретки) в качестве разделителя.

При выполнении этого кода ваш рабочий лист будет выглядеть следующим образом:

PIC 05

Программирование VBA стало проще

automacro

Прекратите искать код VBA в Интернете. Узнайте больше об AutoMacro — конструкторе кода VBA, который позволяет новичкам создавать процедуры с нуля с минимальными знаниями в области кодирования и множеством функций, позволяющих сэкономить время для всех пользователей!

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

Функция соединения повторно соединит все элементы массива, но с использованием указанного разделителя. Если символ-разделитель не указан, будет использоваться пробел.

Этот код разбивает строку с разделителями-запятыми на массив и объединяет их вместе, используя разделители с запятой.

После запуска этого кода ваш рабочий лист будет выглядеть следующим образом:

PIC 06

Ячейка A1 содержит исходную строку с разделителями-запятыми, а ячейка A2 содержит новую объединенную строку с разделителями точками с запятой.

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

Учитывая, что строковая переменная в Excel VBA может иметь длину до 2 ГБ, вы можете использовать функцию разделения для подсчета слов в фрагменте текста. Очевидно, Microsoft Word делает это автоматически, но это может быть полезно для простого текстового файла или текста, скопированного из другого приложения.

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

Код использует функции «Заменить» и «Обрезать», чтобы удалить эти лишние пробелы.

В последней строке кода отображается количество слов, найденных с помощью функции UBound, чтобы получить максимальное количество элементов массива, а затем увеличить его на 1. Это связано с тем, что первый элемент массива начинается с нуля.

Разбиение адреса на ячейки листа

Почтовые адреса часто представляют собой длинные текстовые строки с разделителями-запятыми. Вы можете разделить каждую часть адреса на отдельную ячейку.

Выполнение этого кода будет использовать разделитель-запятую для помещения каждой строки адреса в отдельную ячейку:

PIC 07

Если вы хотите вернуть только почтовый индекс (последний элемент массива), вы можете использовать код:

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

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

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

После выполнения кода рабочий лист будет выглядеть следующим образом:

Разбить строку на ячейки листа

Вы можете скопировать массив Split в ячейки рабочего листа с помощью всего одной команды:

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

PIC 09

Создание новой функции для разделения из заданной точки

Параметр Limit в функции Split позволяет указать только верхний предел, при котором разделение прекращается. Он всегда начинается с начала строки.

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

Вы можете легко создать функцию (называемую SplitSlicer) самостоятельно в VBA, чтобы сделать это:

Эта функция состоит из четырех параметров:

  • Цель — строка — это входная строка, которую вы хотите разделить
  • Del — строка или непечатаемый символ — это символ-разделитель, который вы используете, например. запятая, двоеточие
  • Начало — число — это начальное разделение вашего фрагмента
  • N – число – это количество разделений, которое вы хотите сделать в своем фрагменте.

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

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

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

Затем строка снова разбивается на массив, используя N в качестве предельной переменной. Это означает, что строки будут разделены до позиции N, после чего оставшаяся часть строки станет последним элементом массива.

Операция ReDim используется для удаления последнего элемента, поскольку нам нужны только определенные элементы, оставшиеся в массиве. Обратите внимание, что используется параметр Preserve, иначе все данные в массиве будут потеряны.

Затем новый массив возвращается в код, из которого он был вызван.

Обратите внимание, что код «защищен от ошибок». Пользователи часто будут делать странные вещи, о которых вы не подумали. Например, если они попытаются использовать функцию с параметром Start или N, превышающим доступное количество разбиений в строке, это может привести к сбою функции.

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

При работе с VBA в Excel может возникнуть необходимость разделить строку на разные части на основе разделителя.

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

РАЗДЕЛИТЬ – это встроенная строковая функция в Excel VBA, которую можно использовать для разделения текстовой строки на основе разделителя.

Это руководство охватывает:

Функция Excel VBA SPLIT — синтаксис

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

Пример 1. Разделение слов в предложении

Допустим, у меня есть текст — «Быстрая коричневая лиса перепрыгивает через ленивую собаку».

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

Код ниже будет для этого:

Хотя код не делает ничего полезного, он поможет вам понять, что делает функция Split в VBA.

Функция Split разделяет текстовую строку и присваивает каждому слову массив Result.

Итак, в этом случае:

  • Результат(0) сохраняет значение «The»
  • Результат(1) сохраняет значение «Быстро»
  • Результат(2) сохраняет значение "Коричневый" и т. д.

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

Важное примечание:

  1. Функция VBA SPLIT возвращает массив, который начинается с базы 0.
  2. Когда результат функции SPLIT присваивается массиву, этот массив должен быть объявлен как тип данных String. Если вы объявите его как тип данных Variant, он покажет ошибку несоответствия типа). Обратите внимание, что в приведенном выше примере я объявил Result() как тип данных String.

Пример 2. Подсчет количества слов в предложении

Вы можете использовать функцию РАЗДЕЛИТЬ, чтобы получить общее количество слов в предложении. Хитрость здесь заключается в подсчете количества элементов в массиве, который вы получаете, когда разделяете текст.

Приведенный ниже код покажет окно сообщения с количеством слов:

В этом случае функция UBound сообщает нам верхнюю границу массива (т. е. максимальное количество элементов в массиве). Поскольку основание массива равно 0, для получения общего количества слов добавляется 1.

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

Приведенный ниже код создаст эту функцию:

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

VBA Split Function - формула подсчета слов

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

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

Пример 3. Использование разделителя, отличного от пробела

В предыдущих двух примерах мы использовали только один аргумент в функции SPLIT, а остальные были аргументами по умолчанию.

Если вы используете какой-либо другой разделитель, вам необходимо указать его в формуле SPLIT.

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

В приведенном выше коде я использовал цикл For Next, чтобы пройтись по каждому элементу массива Result и назначить его переменной DisplayText.

Пример 4. Разделение адреса на три части

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

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

Например, если у меня есть следующий адрес:

Я могу использовать функцию Split в VBA, чтобы разделить этот адрес на три части.

Функция разделения VBA — указание количества элементов

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

Для этого подойдет следующий код:

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

Разделить функцию в VBA-адрес в формуле отдельных строк

Эта функция принимает один аргумент — ссылку на ячейку с адресом.

Обратите внимание: чтобы результирующий адрес отображался в трех разных строках, необходимо применить к ячейкам формат переноса текста (он находится на вкладке «Главная» в группе «Выравнивание»). Если формат «Перенос текста» не включен, вы увидите весь адрес в виде одной строки.

Пример 5. Получение названия города из адреса

С помощью функции Split в VBA вы можете указать, какую часть результирующего массива вы хотите использовать.

Например, предположим, что я разбиваю следующий адрес на основе запятой в качестве разделителя:

Результирующий массив будет выглядеть примерно так, как показано ниже:

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

Ниже приведен код пользовательской функции, в которой вы можете указать число, и она вернет этот элемент из массива. Например, если мне нужно название штата, я могу указать 3 (поскольку это третий элемент в массиве).

Приведенная выше функция принимает два аргумента: ссылку на ячейку с адресом и номер элемента, который вы хотите вернуть. Функция Split разделяет элементы адреса и присваивает их переменной Result.

Затем он возвращает номер элемента, который вы указали в качестве второго аргумента. Обратите внимание, что поскольку основание равно 0, ElementNumber-1 используется для возврата правильной части адреса.

Функция разделения VBA — адрес элемента по номеру

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

Вы можете еще больше упростить код, как показано ниже:

В приведенном выше коде вместо использования переменной Result возвращается только указанный номер элемента.

Поэтому, если у вас есть Split("Доброе утро")(0), он вернет только первый элемент, то есть "Доброе".

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

VBA, как и любой другой язык, предоставляет набор функций для выполнения различных операций со строками. И VBA Split — одна из таких строковых функций. Microsoft представила функцию разделения в VBA версии 6 (в Office 2000).

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

Разделить — это одна из многих функций работы с подстроками, которые можно использовать в VBA. Я написал целую статью об этих функциях Substring, вы можете прочитать ее здесь.

Функция разделения VBA

Оглавление

Определение и синтаксис функции разделения VBA

Split можно определить как функцию, которая может разделить текстовую строку на массив, используя символ-разделитель. Он возвращает отсчитываемый от нуля одномерный массив, содержащий части исходной текстовой строки.

Синтаксис оператора разделения VBA следующий:

Здесь ‘ text_string ’ относится к строке, которую нужно разорвать.

‘разделитель’ относится к символу, который разделяет строку на части. Это необязательный аргумент, символ пробела « » считается разделителем по умолчанию.

‘limit’ — необязательный параметр. Он определяет максимальное количество частей, на которые должна быть разделена входная строка. Значение по умолчанию равно -1, что означает, что строка должна быть разделена при каждом появлении ‘ разделителя ’.

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

КонстантаЗначениеОписание
CompareMethod.Binary< /td>0Выполняет бинарное сравнение, т.е. каждый символ должен соответствовать только самому себе.
CompareMethod.Text 1Выполняет текстовое сравнение.

Некоторые важные моменты о функции разделения

  • Функция разделения возвращает массив строк, а не строку.
  • Если вы не укажете аргумент «сравнить», то по умолчанию оператор разделения будет использовать метод двоичного сравнения.
  • Если text_string, который вы передаете в Split, является строкой нулевой длины, он возвращает одноэлементный массив, содержащий строку нулевой длины.
  • Если «разделитель» не найден нигде в «текстовой_строке», функция «Сплит» возвращает одноэлементный массив, содержащий «текстовую_строку», как есть.

Как использовать функцию разделения VBA

Хорошо, теперь давайте посмотрим, как можно использовать функцию "Разделить":

Цель: допустим, у нас есть строка: «Как дела?», и теперь наша цель — разбить эту строку, чтобы разделить слова.

Итак, мы попробуем применить к нему оператор разделения следующим образом:

‘ text_string ’: в этом случае наша ‘text_string’ будет «Как дела».

« разделитель »: в этом случае нашим разделителем будет символ пробела (« »). Но, как я и предсказывал, разделителем по умолчанию является пробел, поэтому я оставлю этот аргумент пустым.

‘ limit ’: мы также оставим аргумент ‘limit’ пустым, потому что нам нужно отделить все слова от данной ‘text_string’.

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

Итак, окончательной функцией разделения будет:

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

Итак, окончательный код будет таким:

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

Теперь давайте перейдем к некоторым примерам операторов разделения:

Пример 1. Разделение списка значений, разделенных вертикальной чертой, например A|B|C|D.

Ниже приведен код для этого:

Пример 2. Разбейте строку (например, «Добро пожаловать в Excel Trick») на отдельные слова с помощью функции разделения. И отобразите содержимое массива, возвращенного Split, с помощью окна сообщения.

Ниже приведен код, который может выполнить эту задачу:

vba_split_function_example

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

Пример 3: используйте приведенный выше пример, но после разделения строки нам нужно просто отобразить ее третью часть. Чтобы было понятнее, скажем, если я разделю строку («Добро пожаловать в Excel Trick»), то в этом случае мне просто нужен вывод как «Excel», т.е. третье слово в строке.

Итак, код будет таким:

vba_split_function_example-02

В этом коде вы могли заметить, что вместо использования массива строк для приема возврата из функции разделения я взял строковую переменную. Это связано с тем, что, написав оператор Split как: WrdString = Split(text_string)(2) , мы указываем ему возвращать только третий элемент массива (который является строкой), а не весь массив.

Пример 4. Теперь используйте тот же код из примера 2, просто измените его, чтобы продемонстрировать использование аргумента limit.

vba_split_function_example -03

Приведенный выше код очень похож на тот, который мы видели в примере 2. Единственное отличие состоит в том, что мы предоставили аргумент limit функции Split.

Примечание. Из-за аргумента limit функция "Разделить" делит текстовую строку на 3 части вместо 4.

Пример 5. Напишите код с помощью функции Split, которая может подсчитывать количество слов в строке.

Ниже приведен код, который может это сделать:

vba_split_function_example-04

В этом примере мы использовали функцию UBound для получения верхней границы WrdArray() . Оператор UBound(WrdArray()) дает длину WrdArray() . Но, как мы все знаем, массив начинается с индекса 0, поэтому нам нужно добавить 1 к его верхней границе, чтобы получить фактическое количество слов.

Пример 6. Напишите код, который может импортировать CSV в электронную таблицу.

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

vba_split_function_example-06

Ниже приведен код для этого:

vba_split_function_example_6


Пояснение:

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

Итак, с моей стороны это было все о функции разделения VBA. Не стесняйтесь оставлять свои комментарии по теме.

Подпишитесь и станьте частью нашей семьи, насчитывающей более 15 000 человек!

Теперь подпишитесь на Excel Trick и получите бесплатную копию нашей электронной книги "200+ ярлыков Excel" (формат для печати), которая резко повысит вашу продуктивность.

Функция разделения VBA используется для разделения строки текста на массив. Текст разбивается на основе заданного разделителя — например. запятая, пробел, двоеточие и т. д.

Например, представьте, что у нас есть следующая строка:

Вы можете видеть, что каждый элемент разделен знаком двоеточия. Мы называем двоеточие разделителем

.

Мы можем разделить эту строку на массив:

Когда он находится в массиве, к каждому элементу легко получить доступ:

VBA Split

Глоссарий

Массив — структура для хранения группы похожих переменных.

Ubound — эта функция возвращает последнюю позицию массива.

Lbound — эта функция возвращает первую позицию массива. Для массива, возвращаемого функцией Split, первая позиция равна нулю.

Instr — эта функция используется для поиска строки в строке и возврата позиции.

InStrRev — то же, что и Instr, но ищет строку с конца.

Разделить синтаксис

Выражение разделения, разделитель[необязательный], предел[необязательный], сравнение[необязательный]

Разделить возвращаемое значение

Функция Split возвращает массив.

Параметры функции разделения

выражение — это текстовая строка, которую нужно разделить.

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

limit [необязательно] — это позволяет нам установить количество элементов в результате. Если мы используем 1 в качестве ограничения, разделения не происходит и возвращается полная строка.

сравнить [необязательно] — если мы используем буквы в качестве разделителя, это определяет, будем ли мы учитывать регистр букв.

Разделение VBA — простой пример

В следующем коде показан пример использования функции "Разделить" и вывода результата в окно интерпретации:

Вывод
Джон
Джейн
Пол
Софи

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

Split возвращает массив, который начинается с нулевой позиции. Если мы хотим использовать оператор For для чтения массива, мы можем использовать LBound и UBound, чтобы получить первую и последнюю позиции массива:

Параметр ограничения разделения

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

В приведенной ниже таблице показаны результаты использования различных ограничений для этого образца строки:

Вы можете попробовать код самостоятельно:

Раздельный параметр сравнения

Параметр Сравнить используется для разделителей, состоящих из одной или нескольких букв.

Например, представьте, что мы хотим использовать букву x в качестве разделителя в следующей строке:

  1. Если мы хотим разделить по x только в нижнем регистре, мы используем vbBinaryCompare.
  2. Если мы хотим разделить по x в верхнем или нижнем регистре, мы используем vbTextCompare.
  3. vbUseCompareOption используется по умолчанию и сообщает split, что нужно использовать настройки модуля Compare. Подробнее о настройках модуля сравнения читайте здесь.

В следующем коде показано, как мы используем параметр Compare:

В следующей таблице показаны результаты различных аргументов сравнения:

StringОграничениеРезультат
"Джон:Джейн:Пол:Софи"1Джон:Джейн:Пол:Софи
"Джон:Джейн: Пол:Софи"2Джон
Джейн:Пол:Софи
"Джон:Джейн:Пол: Софи"3Джон
Джейн
Пол:Софи
"Джон :Джейн:Пол:Софи"4Джон
Джейн
Пол
Софи
СтрокаРазделительСравнить типРезультат
"12x34X45"xvbCompareText12
34
45
"12x34X45"xvbCompareBinary12
34X45

Обратное разделение

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

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

В этом примере показано, как использовать соединение:

См. раздел «Пример разделения — использование соединения», где приведен пример использования функции соединения с функцией разделения.

Разделить пример — имена

Действительно отличный пример Split — работа с именами.

Представьте, что у нас есть имя «Джон Генри Смит», и мы хотим извлечь каждое имя.

Мы можем использовать Left и Instr, чтобы получить имя:

Получить фамилию немного сложнее:

Получение имен, которые не находятся в первой или последней позиции, действительно становится очень запутанным. Однако с помощью Split мы можем упростить весь процесс:

На самом деле нам не нужно использовать массив, как мы можем видеть в следующем примере. Неэффективно вызывать функцию Split 3 раза вместо 1, но в этом примере это выглядит красиво:

Пример разделения — имена файлов

В следующем примере мы используем Split, чтобы получить часть расширения имени файла:

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

Например, для «C:\MyDocs\Jan\MyResume.Doc» мы хотим извлечь MyResume.

Вывод

Пример разделения — копирование в диапазон

Поскольку результатом Split является массив, мы легко копируем его в диапазон.

Разделение примера — подсчет элементов

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

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

Пример разделения — использование объединения

Это интересный способ, который вы можете попробовать сами. Возьмите три строки ниже:

123.3456.96.345
1234.1156.7.345
1273.9998.123.345

Мы хотим добавить единицу к третьему числу в каждой строке. Например, первая строка должна стать 123.3456.97.345.

Прежде чем попробовать себя, дам одну подсказку. Вы можете использовать функцию Join, чтобы отменить операцию разделения. Он принимает массив и разделитель и создает строку.

Вы можете начать с этого кода:

Вот как это сделать:

Вывод

123.3456.100.345
1234.1156.8.345
1273.9998.124.345

Дополнительная литература

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

Что дальше?

Бесплатный учебник по VBA Если вы новичок в VBA или хотите отточить свои навыки работы с VBA, почему бы не попробовать The Ultimate VBA Tutorial.

Соответствующее обучение: получите полный доступ к обучающим веб-семинарам Excel VBA и ко всем учебным пособиям.

(ПРИМЕЧАНИЕ. Планируете создать приложение VBA или управлять им? Узнайте, как создать 10 приложений Excel VBA с нуля.)

Пол,
В своем последнем кодировании, можете ли вы объяснить эту строку….
‘ Добавьте единицу к числу
arr(2) = CStr(CLng(arr(2)) + 1)
Что такое CStr и Clng?

На самом деле CStr и CLng в данном случае не нужны. Я обновил код на:

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

Меня всегда поражают ясность и необычная простота вашего изложения знаний.

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