Аналог trim в excel

Функция СЖПРОБЕЛЫ (TRIM) в Excel используется для удаления лишних пробелов в тексте.

Содержание

  1. Что возвращает функция
  2. Синтаксис
  3. Аргументы функции
  4. Примеры использования функции СЖПРОБЕЛЫ в Excel
  5. Пример 1. Убираем лишние пробелы перед словами, после слов, двойные пробелы
  6. Пример 2. Корректно подсчитываем количество слов в тексте с учетом лишних пробелов

Что возвращает функция

Текст без лишних пробелов.

Синтаксис

=TRIM(text) — английская версия

=СЖПРОБЕЛЫ(текст) — русская версия

Аргументы функции

  • text (текст) — текст из которого нужно удалить лишние пробелы. Он может быть введен вручную, быть ссылкой на ячейку с текстом. Например, если нам нужно удалить лишние пробелы из текста в ячейке «А1», то нам поможет формула: =TRIM(A1) или =СЖПРОБЕЛЫ(A1).

Примеры использования функции СЖПРОБЕЛЫ в Excel

Пример 1. Убираем лишние пробелы перед словами, после слов, двойные пробелы

На примере ниже текст наполненный массой лишних пробелов.

Функция СЖПРОБЕЛЫ в Excel

С помощью функции  СЖПРОБЕЛЫ мы легко уберем все лишнее:

=TRIM(A1) — английская версия

=СЖПРОБЕЛЫ(A1) — русская версия

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

Telegram Logo Больше лайфхаков в нашем Telegram Подписаться

Функция СЖПРОБЕЛЫ в Excel

Пример 2. Корректно подсчитываем количество слов в тексте с учетом лишних пробелов

Пробелы это хороший индикатор при подсчете слов в тексте.

Например, если нам нужно понять, какое количество слов во фразе «Как посчитать количество слов в тексте?» то нам поможет формула:

=LEN(A1)-LEN(SUBSTITUTE(A1,» «,»»))+1 — английская версия

=ДЛСТР(A1)-ДЛСТР(СЦЕПИТЬ(A1;» «;»»))+1 — русская версия

Суть формулы заключается в том, что она считает количество пробелов во фразе и вычитывает «1», таким образом получая количество слов в тексте.

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

Избежать ошибки и убрать лишние пробелы мы можем с помощью функции СЖПРОБЕЛЫ:

=LEN(TRIM(A1))-LEN(SUBSTITUTE(A1,» «,»»))+1 — английская версия

=ДЛСТР(СЖПРОБЕЛЫ(A1))-ДЛСТР(СЦЕПИТЬ(A1;» «;»»))+1 — русская версия

Skip to content

Функция СЖПРОБЕЛЫ — как пользоваться и примеры

Вы узнаете несколько быстрых и простых способов, чтобы удалить начальные, конечные и лишние пробелы между словами, а также почему функция Excel СЖПРОБЕЛЫ (TRIM в английской версии)  не работает и как это исправить.

Вы сравниваете два столбца на предмет наличия дубликатов, но ваши формулы не могут найти ни одной повторяющейся записи? Или вы складываете два столбца чисел, но получаете только нули? И почему, черт возьми, ваша очевидно правильная формула ВПР возвращает только кучу ошибок Н/Д? Это лишь несколько примеров проблем, на которые вы, возможно, ищете ответы. И все это вызвано дополнительными пробелами, скрытыми до, после или между числовыми и текстовыми значениями в ваших ячейках.

  • Как удалить лишние пробелы в столбце?
  • Удаление ведущих пробелов
  • Как сосчитать лишние пробелы?
  • Выделение цветом ячеек с лишними пробелами
  • А если СЖПРОБЕЛЫ не работает?
  • Инструмент Trim Spaces — удаляйте лишние пробелы одним щелчком мыши.

Microsoft Excel предлагает несколько различных способов очистки данных. В этом руководстве мы исследуем возможности функции СЖПРОБЕЛЫ как самого быстрого и простого способа удаления пробелов в Excel.

Итак, функция СЖПРОБЕЛЫ в Excel применяется, чтобы удалить лишние интервалы из текста. Она удаляет все начальные, конечные и промежуточные, за исключением одного пробела между словами.

Синтаксис её самый простой из возможных:

СЖПРОБЕЛЫ(текст)

Где текст — это ячейка, из которой вы хотите удалить лишние интервалы (или просто текстовая строка, заключённая в двойные кавычки).

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

=СЖПРОБЕЛЫ(A1)

И это скриншот показывает результат:

Ага, это так просто!

Если в дополнение к лишним пробелам ваши данные содержат разрывы строк и непечатаемые символы, используйте функцию СЖПРОБЕЛЫ в сочетании с ПЕЧСИМВ (CLEAN в английской версии), чтобы удалить первые 32 непечатаемых символа в кодовой системе ASCII. 

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

=СЖПРОБЕЛЫ(ПЕЧСИМВ(A1))

Дополнительные сведения см. В разделе Как удалить непечатаемые символы в Excel.

Теперь, когда вы знаете основы, давайте обсудим несколько примеров использования СЖПРОБЕЛЫ в Excel, а также те подводные камни, с которыми вы можете столкнуться.

Как убрать лишние пробелы во всём столбце.

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

Записав формулу Excel СЖПРОБЕЛЫ в соседний столбец, а затем заменив формулы их значениями. Подробные инструкции приведены ниже.

Напишите это выражение для самой верхней ячейки, A2 в нашем примере:

=СЖПРОБЕЛЫ(A2)

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

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

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

Выделите все ячейки с расчетами (B2:B8 в этом примере) и нажмите Ctrl + C, чтобы скопировать их. Или по правой кнопке мыши воспользуйтесь контекстным меню.

Выделите все ячейки со старыми данными (A2:A8) и нажмите Ctrl + Alt + V. Эта комбинация клавиш вставляет только значения и делает то же самое, что и контекстное меню Специальная вставка > Значения.

Нажмите ОК. Готово!

Как удалить ведущие пробелы в числовом столбце

Как вы только что видели, функция Excel СЖПРОБЕЛЫ без проблем удалила все лишние интервалы из столбца текстовых данных. Но что, если ваши данные — числа, а не текст?

На первый взгляд может показаться, что функция СЖПРОБЕЛЫ сделала свое дело. Однако при более внимательном рассмотрении вы заметите, что обрезанные значения не ведут себя как числа. Вот лишь несколько признаков аномалии:

  • И исходный столбец, и обрезанные числа выравниваются по левому краю, даже если вы применяете к ним числовой формат. В то время как обычные числа по умолчанию выравниваются по правому краю.
  • Когда выбраны две или более ячеек с очищенными числами, Excel отображает только КОЛИЧЕСТВО в строке состояния.Для чисел он также должен отображать СУММУ и СРЕДНЕЕ.
  • Формула СУММ, примененная к этим ячейкам, возвращает ноль.

И что нам с этим делать?

Небольшой лайфхак. Если вы вместо СЖПРОБЕЛЫ(A2) используете операцию умножения на 1, то есть A1*1, то получите тот же результат. И еще один элегантный способ избавления от пробелов перед числом:  

=—A1

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

А вот такое хитрое выражение сразу превратит текст “    333” в число 333:

=—(—A1)

Вы видите, что все цифры выровнены по левому краю. Дело в том, что очищенные значения представляют собой текстовые строки, а нам нужны числа. Чтобы исправить это, вы можете умножить «обрезанные» значения на 1 (чтобы умножить все значения одним махом, используйте опцию  Специальная вставка > Умножить).

Более элегантное решение — заключить функцию СЖПРОБЕЛЫ в ЗНАЧЕН, например:

=ЗНАЧЕН(СЖПРОБЕЛЫ(A2))

Приведенное выше выражение удаляет все начальные и конечные пробелы, если они есть, и превращает полученное значение в число, как показано на скриншоте ниже:

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

=ЗНАЧЕН(A2)

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

Кроме того, вы можете применить функцию Excel СЖПРОБЕЛЫ для удаления только начальных пробелов, сохраняя их все в середине текстовой строки без изменений. Пример формулы здесь: Как удалить только ведущие пробелы?

Как посчитать лишние пробелы в ячейке.

Чтобы получить количество лишних пробелов в ячейке, узнайте общую длину текста с помощью функции ДЛСТР, затем вычислите длину строки без дополнительных интервалов и вычтите последнее из первого:

=ДЛСТР(A2)-ДЛСТР(СЖПРОБЕЛЫ(A2))

На рисунке ниже показана приведенная выше формула в действии:

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

Как выделить ячейки с лишними пробелами?

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

Для этого создайте правило условного форматирования со следующей формулой:

=ДЛСТР($A2)>ДЛСТР(СЖПРОБЕЛЫ($A2))

Где A2 – самый верхний адрес с данными, которые вы хотите выделить.

Мы указываем Excel выделять ячейки, в которых общая длина строки больше, чем длина обрезанного текста.

Чтобы создать правило условного форматирования, выберите все ячейки, которые вы хотите выделить, без заголовков столбцов, перейдите на вкладку «Главная » и нажмите « Условное форматирование» > «Новое правило» > «Используйте формулу…».

Если вы еще не знакомы с условным форматированием Excel, вы найдете подробные инструкции здесь: Как создать правило условного форматирования на основе формулы .

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

Как видите, использовать функцию СЖПРОБЕЛЫ в Excel довольно просто. 

Если не работает …

Функция СЖПРОБЕЛЫ предназначена для удаления только символа пробела, представленного значением кода 32 в 7-битном наборе символов ASCII. В наборе Unicode есть так называемый неразрывный пробел, который обычно используется на веб-страницах как символ html & nbsp. Он имеет десятичное значение 160, и функция СЖПРОБЕЛЫ не может удалить его сама. При копировании текста с веб-страниц или из Word вы вполне можете получить его в свою таблицу.

Иногда такие неразрывные пробелы вставляют специально, чтобы фраза в ячейке не разделялась по строкам. К примеру, некрасиво будет, если инициалы будут оторваны от фамилии и перенесены на следующую строку. В Microsoft Word такой спецсимвол вводится сочетанием клавиш Ctrl+Shift+Пробел.

Итак, если ваш набор данных содержит один или несколько пробелов, которые нашими стандартными методами не получается убрать, используйте функцию ПОДСТАВИТЬ, чтобы преобразовать неразрывные пробелы в обычные, а затем избавиться от их. Предполагая, что текст находится в A1, выражение выглядит следующим образом:

=СЖПРОБЕЛЫ(ПОДСТАВИТЬ(A2; СИМВОЛ(160); » «))

В качестве дополнительной меры предосторожности вы можете встроить функцию ПЕЧСИМВ для очистки ячейки от любых непечатаемых символов:

=СЖПРОБЕЛЫ(ПЕЧСИМВ(ПОДСТАВИТЬ(A2; СИМВОЛ(160); » «)))

На этом рисунке показана разница:

Если приведенные выше варианты также не работают, скорее всего, ваши данные содержат некоторые определенные непечатаемые символы с кодовыми значениями, отличными от 32 и 160.

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

Перед текстом: = КОДСИМВ (ЛЕВСИМВ(A1;1))

После текста: = КОДСИМВ (ПРАВСИМВ(A1;1))

Внутри ячейки (где n — позиция проблемного знака в текстовой строке):

=КОДСИМВ(ПСТР(A1; n; 1)))

Затем передайте найденный код проблемного символа в СЖПРОБЕЛЫ(ПОДСТАВИТЬ()), как описано выше.

Например, если функция КОДСИМВ возвращает 9, что является знаком горизонтальной табуляции, используйте следующую формулу для ее удаления:

=СЖПРОБЕЛЫ(ПОДСТАВИТЬ(A2; СИМВОЛ(9); » «))

Инструмент Trim Spaces — удаляйте лишние пробелы одним щелчком мыши.

Если применение формул представляет сложность для вас, тогда вам может понравиться этот метод буквально в один клик, чтобы избавиться от пробелов в Excel. Надстройка Ultimate Suite среди множества полезных инструментов, например, изменение регистра, разделение текста и извлечение из него нужных символов, предлагает опцию «Удалить пробелы» .

Если в Excel установлен Ultimate Suite, то удалить пробелы будет очень просто:

  1. Выберите одну или несколько ячеек, в которой вы хотите убрать пробелы.
  2. Нажмите кнопку «Trim Spaces» на ленте.
  3. Выберите один, несколько или сразу все из следующих вариантов:
    • Обрезать начальные и конечные пробелы.
    • Удалить лишние пробелы между словами, кроме одного.
    • Удалить неразрывные пробелы ( )
    • Удалить лишние переносы строк до и после значений, между значениями оставить только один.
    • Удалить все переносы строк в ячейке.
  4. Нажмите кнопку Обрезать (Trim).

Вот и все! Все лишние пробелы удаляются в мгновение ока.

В этом примере мы удаляем всё лишнее, сохраняя только по одному пробелу между словами.

Задача, с которой не справляются формулы Excel, выполняется одним щелчком мыши! Вот результат:

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

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

Благодарю вас за чтение и с нетерпением жду встречи с вами. В нашем следующем уроке мы обсудим другие способы удаления пробелов в Excel, следите за обновлениями!

Формула ЗАМЕНИТЬ и ПОДСТАВИТЬ для текста и чисел В статье объясняется на примерах как работают функции Excel ЗАМЕНИТЬ (REPLACE в английской версии) и ПОДСТАВИТЬ (SUBSTITUTE по-английски). Мы покажем, как использовать функцию ЗАМЕНИТЬ с текстом, числами и датами, а также…
Как быстро посчитать количество слов в Excel В статье объясняется, как подсчитывать слова в Excel с помощью функции ДЛСТР в сочетании с другими функциями Excel, а также приводятся формулы для подсчета общего количества или конкретных слов в…
Как быстро извлечь число из текста в Excel В этом кратком руководстве показано, как можно быстро извлекать число из различных текстовых выражений в Excel с помощью формул или специального инструмента «Извлечь». Проблема выделения числа из текста возникает достаточно…
Как убрать пробелы в числах в Excel Представляем 4 быстрых способа удалить лишние пробелы между цифрами в ячейках Excel. Вы можете использовать формулы, инструмент «Найти и заменить» или попробовать изменить формат ячейки. Когда вы вставляете данные из…
Как удалить пробелы в ячейках Excel Вы узнаете, как с помощью формул удалять начальные и конечные пробелы в ячейке, лишние интервалы между словами, избавляться от неразрывных пробелов и непечатаемых символов. В чем самая большая проблема с…
Функция ПРАВСИМВ в Excel — примеры и советы. В последних нескольких статьях мы обсуждали различные текстовые функции. Сегодня наше внимание сосредоточено на ПРАВСИМВ (RIGHT в английской версии), которая предназначена для возврата указанного количества символов из крайней правой части…
Функция ЛЕВСИМВ в Excel. Примеры использования и советы. В руководстве показано, как использовать функцию ЛЕВСИМВ (LEFT) в Excel, чтобы получить подстроку из начала текстовой строки, извлечь текст перед определенным символом, заставить формулу возвращать число и многое другое. Среди…

Вчера в марафоне 30 функций Excel за 30 дней мы наткнулись на ленивого шурина по имени AREAS (ОБЛАСТИ). Эта функция не часто используется на практике, но с ее помощью мы увидели, как работают три оператора ссылок в Excel. Надеюсь, что этот урок был для Вас полезен.

Третий день марафона мы посвятим изучению функции TRIM (СЖПРОБЕЛЫ). В Январе кое-кто пытается сбросить несколько лишних килограммов, и для этой цели можно использовать программу Excel, чтобы сделать в ней счётчик калорий или график снижения веса. К сожалению, функция TRIM (СЖПРОБЕЛЫ) не поможет Вам в борьбе с лишними килограммами, зато может удалить лишние пробелы из текстовой строки.

Итак, давайте посмотрим на справочную информацию и примеры использования функции TRIM (СЖПРОБЕЛЫ) в Excel. Если у Вас есть свои приёмы или примеры по этой функции, пожалуйста, делитесь ими в комментариях. И удачи с подсчётом калорий!

Содержание

  1. Функция 03: TRIM (СЖПРОБЕЛЫ)
  2. Как можно использовать функцию TRIM (СЖПРОБЕЛЫ)?
  3. Синтаксис TRIM (СЖПРОБЕЛЫ)
  4. Ловушки TRIM (СЖПРОБЕЛЫ)
  5. Пример 1: Удаляем пробелы из начала и конца текстовой строки
  6. Пример 2: Удаляем все пробелы, кроме одиночных между словами
  7. Пример 3: Как НЕ удаляются некоторые специальные символы

Функция 03: TRIM (СЖПРОБЕЛЫ)

Функция TRIM (СЖПРОБЕЛЫ) удаляет из текстовой строки все пробелы, кроме одинарных пробелов между словами.

Функция СЖПРОБЕЛЫ в Excel

Как можно использовать функцию TRIM (СЖПРОБЕЛЫ)?

Функция TRIM (СЖПРОБЕЛЫ) может помочь с очисткой текста, загруженного с веб-сайта или импортированного из другого приложения. Функция TRIM (СЖПРОБЕЛЫ):

  • Удаляет пробелы в начале и конце строки.
  • Удаляет все пробелы из текста, кроме одиночных пробелов между словами.
  • НЕ удаляет некоторые специальные символы, скопированные с веб-сайта.

Синтаксис TRIM (СЖПРОБЕЛЫ)

Функция TRIM (СЖПРОБЕЛЫ) имеет вот такой синтаксис:

TRIM(text)
СЖПРОБЕЛЫ(текст)

  • text (текст) – это ссылка на ячейку или текстовая строка, из которой надо удалить пробелы

Ловушки TRIM (СЖПРОБЕЛЫ)

Функция TRIM (СЖПРОБЕЛЫ) удаляет только стандартные символы пробела из текста. Если Вы копируете текст с веб-сайта, он может содержать символы неразрывного пробела, которые функция TRIM (СЖПРОБЕЛЫ) удалить не сможет.

Пример 1: Удаляем пробелы из начала и конца текстовой строки

Вы можете использовать функцию TRIM (СЖПРОБЕЛЫ), чтобы удалить все пробелы в начале и в конце текстовой строки. На рисунке ниже в ячейке C5 записан текст с двумя лишними пробелами в начале и двумя в конце строки. Функция TRIM (СЖПРОБЕЛЫ) в ячейке C7 удаляет эти 4 лишних пробела.

=TRIM(C5)
=СЖПРОБЕЛЫ(C5)

Функция СЖПРОБЕЛЫ в Excel

Пример 2: Удаляем все пробелы, кроме одиночных между словами

Вы можете применить функцию TRIM (СЖПРОБЕЛЫ) к лишним пробелам между словами в тексте. На рисунке ниже в ячейке C5 между слов есть три лишних пробела. Функция TRIM (СЖПРОБЕЛЫ) в ячейке C7 удаляет эти пробелы, а также по два лишних пробела в начале и конце текстовой строки.

=TRIM(C5)
=СЖПРОБЕЛЫ(C5)

Функция СЖПРОБЕЛЫ в Excel

Пример 3: Как НЕ удаляются некоторые специальные символы

Функция TRIM (СЖПРОБЕЛЫ) НЕ удаляет некоторые символы, используемые в качестве пробела. Например, неразрывный пробел, наверняка будет присутствовать в тексте, скопированном с веб-сайта. На рисунке ниже ячейка C5 содержит один неразрывный пробел, и он не удаляется.

=TRIM(C5)
=СЖПРОБЕЛЫ(C5)

Символ неразрывного пробела Вы можете удалить вручную, использовать для этого функцию SUBSTITUTE (ПОДСТАВИТЬ) или макрос. Позднее, в течение нашего марафона 30 функций Excel за 30 дней, Вы узнаете еще несколько способов очистки данных в Excel.

Функция СЖПРОБЕЛЫ в Excel

Оцените качество статьи. Нам важно ваше мнение:

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

Лечится эта проблема очень легко — специальной функцией СЖПРОБЕЛЫ (TRIM). Она убирает все лишние пробелы, но оставляет по одному пробелу между словами:

clean-text2.png

Просто и красиво. Но есть пара нюансов.

Неразрывные пробелы не удаляются

Чайной ложкой дегтя тут представляется только невозможность удалять таким способом неразрывные пробелы. Это особый вариант пробела (внешне неотличимый от обычного), на котором не бывает переноса строки. Обычно его используют в случаях типа «г. Москва» или «Иванов И.И.», чтобы эти фразы не разбивались между строчками. В Microsoft Word такой спецсимвол вводится сочетанием клавиш Ctrl+Shift+Пробел и отображается в виде кружка, а не точки:

Неразрывный пробел

К сожалению, функция СЖПРОБЕЛЫ (TRIM) удаляет только обычные пробелы. Для удаления неразрывных нужно использовать другие функции или макросы.

Формулы для удаления начальных и концевых пробелов

Если необходимо удалить только начальные пробелы (т.е. не трогать концевые и пробелы между словами), то придется делать это хитрыми формулами, т.к. готовой функции (по аналогии с функцией LTrim в VBA) в Microsoft Excel, к сожалению, нет. 

Формула для удаления лишних пробелов только слева будет выглядеть так:

Удаление лишних пробелов слева формулой

В английской версии =MID(A1;FIND(LEFT(TRIM(A1));A1);LEN(A1))

Формула для удаления лишних пробелов только справа будет чуть посложнее и должна вводиться уже как формула массива (с Ctrl+Shift+Enter):

Удаление лишних пробелов справа

В английском варианте это будет =LEFT(A1;MAX((MID(A1&REPT(» «;99);ROW(A1:A99),1);» «)*ROW(A1:A99)))

Ссылки по теме

  • Подсветка ячеек с лишними пробелами условным форматированием
  • Зачистка текста от лишних пробелов, непечатаемых символов, английских букв и т.д.
  • Как проверить текст на соответствие заданному шаблону (маске)

На чтение 23 мин. Просмотров 18.6k.

VBA String Functions

Содержание

  1. Краткое руководство по текстовым функциям
  2. Введение
  3. Прочитайте это в первую очередь!
  4. Добавление строк
  5. Извлечение части строки
  6. Поиск в строке
  7. Удаление пробелов
  8. Длина строки
  9. Перевернуть текст
  10. Сравнение
  11. Сравнение строк с использованием сопоставления с шаблоном
  12. Заменить часть строки
  13. Преобразовать типы в строку (базовый)
  14. Преобразовать строку в число — CLng, CDbl, Val и т.д.
  15. Генерация строки элементов — функция строки
  16. Преобразовать регистр / юникод — StrConv, UCase, LCase
  17. Использование строк с массивами
  18. Форматирование строки
  19. Заключение

Краткое руководство по текстовым функциям

Текстовые операции Функции
Добавить две или более строки Format or «&»
Построить текст из массива Join
Сравнить StrComp or «=»
Сравнить — шаблон Like
Преобразовать в текст CStr, Str
Конвертировать текст в дату Просто: CDate 
Дополнительно: Format
Преобразовать текст в число Просто: CLng, CInt, CDbl, Val
Дополнительно: Format
Конвертировать в юникод, широкий, узкий StrConv
Преобразовать в верхний / нижний регистр StrConv, UCase, LCase
Извлечь часть текста Left, Right, Mid
Форматировать текст Format
Найти символы в тексте InStr, InStrRev
Генерация текста String
Получить длину строки Len
Удалить пробелы LTrim, RTrim, Trim
Заменить часть строки Replace
Перевернуть строку StrReverse
Разобрать строку в массив Split

Введение

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

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

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

Эта статья содержит подробное руководство по использованию строки в VBA. Он объясняет строки в простых терминах с понятными примерами кода. Изложение в статье поможет легко использовать ее в качестве краткого справочного руководства.

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

Прочитайте это в первую очередь!

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

Исходная строка не изменяется

Важно помнить, что строковые функции VBA не изменяют исходную строку. Они возвращают новую строку с изменениями, внесенными функцией. Если вы хотите изменить исходную строку, вы просто назначаете результат исходной строке. См. Раздел «Извлечение части строки» для примеров.

Как использовать Compare

Некоторые строковые функции, такие как StrComp (), Instr () и т.д. имеют необязательный параметр Compare. Он работает следующим образом:

vbTextCompare: верхний и нижний регистры считаются одинаковыми

vbBinaryCompare: верхний и нижний регистр считаются разными

Следующий код использует функцию сравнения строк StrComp () для демонстрации параметра Compare.

Sub Comp1()

    ' Печатает 0  : Строки совпадают
    Debug.Print StrComp("АБВ", "абв", vbTextCompare)
    ' Печатает -1 : Строки не совпадают
    Debug.Print StrComp("АБВ", "абв", vbBinaryCompare)

End Sub

Вы можете использовать параметр Option Compare вместо того, чтобы каждый раз использовать этот параметр. Опция сравнения устанавливается в верхней части модуля. Любая функция, которая использует параметр Compare, примет этот параметр по умолчанию. Два варианта использования Option Compare:

  • Oпция Compare Text: делает vbTextCompare аргументом сравнения по умолчанию
Option Compare Text

Sub Comp2()
    ' Соответствие строк - использует vbCompareText в качестве 'аргумента сравнения
    Debug.Print StrComp("АБВ", "абв")
    Debug.Print StrComp("ГДЕ", "где")
End Sub
  • Опция Compare Binary: делает vbBinaryCompare аргументом сравнения по умолчанию.
Option Compare Binary

Sub Comp2()
    ' Строки не совпадают - использует vbCompareBinary в качестве 'аргумента сравнения
    Debug.Print StrComp("АБВ", "абв")
    Debug.Print StrComp("ГДЕ", "где")
End Sub

Если Option Compare не используется, то по умолчанию используется Option Compare Binary.

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

Добавление строк

VBA String Functions - Smaller

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

Sub Dobavlenie()

    Debug.Print "АБВ" & "ГДЕ"
    Debug.Print "Иван" & " " & "Петров"
    Debug.Print "Длинный " & 22
    Debug.Print "Двойной " & 14.99
    Debug.Print "Дата " & #12/12/2015#

End Sub

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

 Это даст сообщение об ошибке: «Несоответствие типов»
    Debug.Print "Длинный " + 22

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

Извлечение части строки

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

Функция Параметры Описание Пример
Left строка, длина Вернуть
символы с
левой стороны
Left(«Иван
Петров»,4)
Right строка, длина Вернуть
символы с
правой
стороны
Right(«Иван
Петров»,5)
Mid строка, начало, длина Вернуть
символы из
середины
Mid(«Иван
Петров»,3,2)

Функции Left, Right и Mid используются для извлечения частей строки. Это очень простые в использовании функции. Left читает символы слева, Right справа и Mid от указанной вами начальной точки.

Sub IspLeftRightMid()

    Dim sCustomer As String
    sCustomer = "Иван Васильевич Петров"

    Debug.Print Left(sCustomer, 4)  '  Печатает: Иван
    Debug.Print Right(sCustomer, 6) '  Печатает: Петров

    Debug.Print Left(sCustomer, 15)  '  Печатает: Иван Васильевич
    Debug.Print Right(sCustomer, 17)  '  Печатает: Васильевич Петров

    Debug.Print Mid(sCustomer, 1, 4) ' Печатает: Иван
    Debug.Print Mid(sCustomer, 6, 10) ' Печатает: Васильевич
    Debug.Print Mid(sCustomer, 17, 6) ' Печатает: Петров

End Sub

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

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

Sub PrimerIspolzovaniyaLeft()

    Dim Fullname As String
    Fullname = "Иван Петров"

    Debug.Print "Имя: "; Left(Fullname, 4)
    ' Исходная строка не изменилась
    Debug.Print "Полное имя: "; Fullname

 End Sub

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

Sub IzmenenieStroki()

    Dim name As String
    name = "Иван Петров"

    ' Присвойте возвращаемую строку переменной имени
    name = Left(name, 4)

    Debug.Print "Имя: "; name

 End Sub

Поиск в строке

Функция Параметры Описание Пример
InStr Текст1,
текст2
Находит
положение
текста
InStr(«Иван
Петров»,»в»)
InStrRev Проверка
текста,
соответствие
текста
Находит
позицию
текста с конца
InStrRev(«Иван Петров»,»в»)

InStr и InStrRev — это функции VBA, используемые для поиска текста в тексте. Если текст поиска найден, возвращается позиция (с начала строки проверки) текста поиска. Когда текст поиска не найден, возвращается ноль. Если какой-либо текст имеет значение null, возвращается значение null.

InStr Описание параметров

InStr() Start[Необязат], String1, String2, Compare[Необязат]

  • Start [Необязательно — по умолчанию 1]: это число, указывающее начальную позицию поиска слева
  • String1: текст, в котором будем искать
  • String2: текст, который будем искать
  • Compare как vbCompareMethod: см. Раздел «Сравнить» для получения более подробной информации.

Использование InStr и примеры

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

Sub PoiskTeksta()

    Dim name As String
    name = "Иван Петров"

    ' Возвращает 3 - позицию от первой 
    Debug.Print InStr(name, "а")
    ' Возвращает 10 - позиция первого "а", начиная с позиции 4
    Debug.Print InStr(4, name, "а")
    ' Возвращает 8
    Debug.Print InStr(name, "тр")
    ' Возвращает 6
    Debug.Print InStr(name, "Петров")
    ' Возвращает 0 - текст "ССС" не найдет
    Debug.Print InStr(name, "ССС")

End Sub

InStrRev Описание параметров

InStrRev() StringCheck, StringMatch, Start[Необязат], Compare[Необязат]

  • StringCheck: текст, в котором будем искать
  • StringMatch: Текст, который будем искать
  • Start [Необязательно — по умолчанию -1]: это число, указывающее начальную позицию поиска справа
  • Compare как vbCompareMethod: см. Раздел «Сравнить» для получения более подробной информации.

Использование InStrRev и примеры

Функция InStrRev такая же, как InStr, за исключением того, что она ищет с конца строки. Важно отметить, что возвращаемая позиция является позицией с самого начала. Поэтому, если существует только один экземпляр элемента поиска, InStr () и InStrRev () будут возвращать одно и то же значение.

В следующем коде показаны некоторые примеры использования InStrRev.

Sub IspInstrRev()

    Dim name As String
    name = "Иван Петров"

    ' Обе возвращают 1 - позицию, только И
    Debug.Print InStr(name, "И")
    Debug.Print InStrRev(name, "И")

    ' Возвращает 11 - вторую в
    Debug.Print InStrRev(name, "в")
    ' Возвращает 3 - первую в с позиции 9
    Debug.Print InStrRev(name, "в", 9)

    ' Returns 1
    Debug.Print InStrRev(name, "Иван")

End Sub

Функции InStr и InStrRev полезны при работе с базовым поиском текста. Однако, если вы собираетесь использовать их для извлечения текста из строки, они могут усложнить задачу. Я написал о гораздо лучшем способе сделать это в своей статье Как легко извлечь любой текст без использования VBA InStr.

Удаление пробелов

Функция Параметры Описание Пример
LTrim Текст Убирает
пробелы слева
LTrim(» Иван «)
RTrim Текст Убирает
пробелы
справа
RTrim(» Иван «)
Trim Текст Убирает
пробелы слева и справа
Trim(» Иван «)

Функции Trim — это простые функции, которые удаляют пробелы в начале или конце строки.

Функции и примеры использования триммера Trim

  • LTrim удаляет пробелы слева от строки
  • RTrim удаляет пробелы справа от строки
  • Trim удаляет пробелы слева и справа от строки
Sub TrimStr()

    Dim name As String
    name = "  Иван Петров  "

    ' Печатает "Иван Петров  "
    Debug.Print LTrim(name)
    ' Печатает "  Иван Петров"
    Debug.Print RTrim(name)
    ' Печатает "Иван Петров"
    Debug.Print Trim(name)

End Sub

Длина строки

Функция Параметры Описание Пример
Len Текст Возвращает
длину строки
Len («Иван Петров»)

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

Sub IspLen()

    Dim name As String
    name = "Иван Петров"

    ' Печатает 11
    Debug.Print Len("Иван Петров")
    ' Печатает 3
    Debug.Print Len("АБВ")

    ' Печатает 4 с Long - это размер 4 байта
    Dim total As Long
    Debug.Print Len(total)

End Sub

Перевернуть текст

Функция Параметры Описание Пример
StrReverse Текст Перевернуть
текст
StrReverse
(«Иван
Петров»)

StrReverse — еще одна простая в использовании функция. Он просто возвращает данную строку с обратными символами.

Sub RevStr()

    Dim s As String
    s = "Иван Петров"
    ' Печатает: вортеП навИ
    Debug.Print StrReverse(s)

End Sub

Сравнение

Функция Параметры Описание Пример
StrComp Текст1, текст2 Сравнивает 2
текста
StrComp
(«Иван»,
«Иван»)

Функция StrComp используется для сравнения двух строк. Следующие подразделы описывают, как используется.

Описание параметров

StrComp()  String1, String2, Compare[Необязат]

  • String1: первая строка для сравнения
  • String2: вторая строка для сравнения
  • Compare как vbCompareMethod: см. Раздел «Сравнить» для получения более подробной информации.

StrComp Возвращаемые значения

Возвращаемое значение Описание
0 Совпадение строк
-1 строка1 меньше строки2
1 строка1 больше строки2
Null если какая-либо строка равна нулю

Использование и примеры

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

Sub IspStrComp()

   ' Возвращает  0
   Debug.Print StrComp("АБВ", "АБВ", vbTextCompare)
   ' Возвращает 1
   Debug.Print StrComp("АБВГ", "АБВ", vbTextCompare)
   ' Возвращает -1
   Debug.Print StrComp("АБВ", "АБВГ", vbTextCompare)
   ' Returns Null
   Debug.Print StrComp(Null, "АБВГ", vbTextCompare)

End Sub

Сравнение строк с использованием операторов

Вы также можете использовать знак равенства для сравнения строк. Разница между сравнением equals и функцией StrComp:

  1. Знак равенства возвращает только true или false.
  2. Вы не можете указать параметр Compare, используя знак равенства — он использует настройку «Option Compare».  

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

Option Compare Text

Sub CompareIspEquals()

    ' Возвращает true
    Debug.Print "АБВ" = "АБВ"
    ' Возвращает true, потому что «Сравнить текст» установлен выше
    Debug.Print "АБВ" = "абв"
    ' Возвращает false
    Debug.Print "АБВГ" = "АБВ"
    ' Возвращает false
    Debug.Print "АБВ" = "АБВГ"
    ' Возвращает null
    Debug.Print Null = "АБВГ"

End Sub

Сравнение строк с использованием сопоставления с шаблоном

Функция Параметры Описание Пример
Like Текст, шаблон проверяет, имеет
ли строка
заданный
шаблон
«abX» Like «??X»
«54abc5» Like «*abc#»
Знак Значение
? Любой одиночный символ
# Любая однозначная цифра (0-9)
* Ноль или более символов
[charlist] Любой символ в списке
[!charlist] Любой символ не в списке символов

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

Если строка соответствует шаблону, возвращаемое значение равно true, в противном случае — false.

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

Давайте посмотрим на базовый пример с использованием знаков. Возьмите следующую строку шаблона.

[abc][!def]?#X*

 Давайте посмотрим, как работает эта строка

[abc] — символ, который является или a, b или c
[! def] — символ, который не является d, e или f
? любой символ
# — любая цифра
X — символ X
* следуют ноль или более символов

 Поэтому следующая строка действительна
apY6X

а — один из символов a,b,c
p — не один из символов d, e или f
Y — любой символ
6 — это цифра
Х — это буква Х

В следующих примерах кода показаны результаты различных строк с этим шаблоном.

Sub Shabloni()

    ' ИСТИНА
    Debug.Print 1; "apY6X" Like "[abc][!def]?#X*"
    ' ИСТИНА - любая комбинация символов после x действительна
    Debug.Print 2; "apY6Xsf34FAD" Like "[abc][!def]?#X*"
    ' ЛОЖЬ - символ не из[abc]
    Debug.Print 3; "dpY6X" Like "[abc][!def]?#X*"
    ' ЛОЖЬ - 2-й символ e находится в [def]
    Debug.Print 4; "aeY6X" Like "[abc][!def]?#X*"
    ' ЛОЖЬ - A в позиции 4 не является цифрой
    Debug.Print 5; "apYAX" Like "[abc][!def]?#X*"
    ' ЛОЖЬ - символ в позиции 5 должен быть X
    Debug.Print 1; "apY6Z" Like "[abc][!def]?#X*"

End Sub

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

Чтобы увидеть реальный пример использования сопоставления с образцом, ознакомьтесь с Примером 3: Проверьте, допустимо ли имя файла.

Важное примечание о сопоставлении с образцом VBA

Оператор Like использует двоичное или текстовое сравнение на основе параметра Option Compare. Пожалуйста, смотрите раздел Сравнение для более подробной информации.

Заменить часть строки

Функция Параметры Описание Пример
Replace строка, найти, заменить,
начать,
считать,
сравнивать
Заменяет текст Replace
(«Ива»,»а»,»ан»)

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

Replace описание параметров

Replace()  Expression, Find, Replace, Start[Необязат], Count[Необязат], Compare[Необязат]

  • Expression: текст, в котором нужна замена символов
  • Find: текст для замены в строке выражения
  • Replace: строка для поиска замены текста поиска
  • Start [Необязательно — по умолчанию 1]: начальная позиция в строке
  • Count [Необязательно — по умолчанию -1]: количество замен. По умолчанию -1 означает все.
  • Compare как vbCompareMethod: см. Раздел «Сравнить» для получения более подробной информации.

Использование и примеры

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

Sub PrimeriReplace()

    ' Заменяет все знаки вопроса (?) на точку с запятой (;)
    Debug.Print Replace("A?B?C?D?E", "?", ";")
    ' Заменить Петров на Иванов
    Debug.Print Replace("Евгений Петров,Артем Петров", "Петров", "Иванов")
    ' Заменить AX на AB
    Debug.Print Replace("ACD AXC BAX", "AX", "AB")

End Sub

На выходе:

A;B;C;D;E
Евгений Иванов,Артем Иванов
ACD ABC BAB

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

Sub ReplaceCount()

    ' Заменяет только первый знак вопроса
    Debug.Print Replace("A?B?C?D?E", "?", ";", Count:=1)
    ' Заменяет первые три знака вопроса
    Debug.Print Replace("A?B?C?D?E", "?", ";", Count:=3)

End Sub

На выходе:

A;B?C?D?E
A;B;C;D?E

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

Sub ReplacePartial()

    ' Использовать оригинальную строку из позиции 4
    Debug.Print Replace("A?B?C?D?E", "?", ";", Start:=4)
    ' Используйте оригинальную строку из позиции 8
    Debug.Print Replace("AA?B?C?D?E", "?", ";", Start:=8)
    ' Элемент не заменен, но по-прежнему возвращаются только последние '2 символа
    Debug.Print Replace("ABCD", "X", "Y", Start:=3)

End Sub

На выходе:

;C;D;E
;E
CD

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

Sub ReplaceCase()

    ' Заменить только заглавные А
    Debug.Print Replace("AaAa", "A", "X", Compare:=vbBinaryCompare)
    ' Заменить все А
    Debug.Print Replace("AaAa", "A", "X", Compare:=vbTextCompare)

End Sub

На выходе:

XaXa
XXXX

Многократные замены

Если вы хотите заменить несколько значений в строке, вы можете вкладывать вызовы. В следующем коде мы хотим заменить X и Y на A и B соответственно.

Sub ReplaceMulti()

    Dim newString As String

    ' Заменить А на Х
    newString = Replace("ABCD ABDN", "A", "X")
    ' Теперь замените B на Y в новой строке
    newString = Replace(newString, "B", "Y")

    Debug.Print newString

End Sub

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

Sub ReplaceMultiNested()

    Dim newString As String

    ' Заменить A на X, а B на Y
    newString = Replace(Replace("ABCD ABDN", "A", "X"), "B", "Y")

    Debug.Print newString

End Sub

Результатом обоих этих Subs является:
XYCD XYDN

Преобразовать типы в строку (базовый)

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

Sub AutoConverts()

    Dim s As String
    ' Автоматически преобразует число в строку
    s = 12.99
    Debug.Print s

    ' Автоматически преобразует несколько чисел в строку
    s = "ABC" & 6 & 12.99
    Debug.Print s

    ' Автоматически преобразует двойную переменную в строку
    Dim d As Double, l As Long
    d = 19.99
    l = 55
    s = "Значения: " & d & " " & l
    Debug.Print s

End Sub

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

Явное преобразование

Функция Параметры Описание Пример
CStr выражение Преобразует
числовую
переменную
в строку
CStr («45.78»)
Str число Преобразует
числовую
переменную
в строку
Str («45.78»)

В некоторых случаях вы можете захотеть преобразовать элемент в строку без необходимости сначала помещать его в строковую переменную. В этом случае вы можете использовать функции Str или CStr. Оба принимают выражение как функцию, и это может быть любой тип, например long, double, data или boolean.

Давайте посмотрим на простой пример. Представьте, что вы читаете список значений из разных типов ячеек в коллекцию. Вы можете использовать функции Str / CStr, чтобы гарантировать, что они все хранятся в виде строк. Следующий код показывает пример этого:

Sub IspStr()

    Dim coll As New Collection
    Dim c As Range

    ' Считать значения ячеек в коллекцию
    For Each c In Range("A1:A10")
        ' Используйте Str для преобразования значения ячейки в строку
        coll.Add Str(c)
    Next

    ' Распечатайте значения и тип коллекции
    Dim i As Variant
    For Each i In coll
        Debug.Print i, TypeName(i)
    Next

End Sub

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

Multi Region

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

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

Преобразовать строку в число — CLng, CDbl, Val и т.д.

Функция Возвращает Пример
CBool Boolean CBool(«True»), CBool(«0»)
CCur Currency CCur(«245.567»)
CDate Date CDate(«1/1/2019»)
CDbl Double CDbl(«245.567»)
CDec Decimal CDec(«245.567»)
CInt Integer CInt(«45»)
CLng Long Integer CLng(«45.78»)
CVar Variant CVar(«»)

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

Sub StrToNumeric()

    Dim l As Long, d As Double, c As Currency
    Dim s As String
    s = "45.923239"

    l = s
    d = s
    c = s

    Debug.Print "Long is "; l
    Debug.Print "Double is "; d
    Debug.Print "Currency is "; c

End Sub

Использование типов преобразования дает большую гибкость. Это означает, что вы можете определить тип во время выполнения. В следующем коде мы устанавливаем тип на основе аргумента sType, передаваемого в функцию PrintValue. Поскольку этот тип может быть прочитан из внешнего источника, такого как ячейка, мы можем установить тип во время выполнения. Если мы объявим переменную как Long, то при выполнении кода она всегда будет длинной.

Sub Test()
    ' Печатает  46
    PrintValue "45.56", "Long"
    ' Печатает 45.56
    PrintValue "45.56", ""
End Sub

Sub PrintValue(ByVal s As String, ByVal sType As String)

    Dim value

    ' Установите тип данных на основе строки типа
    If sType = "Long" Then
        value = CLng(s)
    Else
        value = CDbl(s)
    End If
    Debug.Print "Type is "; TypeName(value); value

End Sub

Если строка не является допустимым числом (т.е. Содержит символы, другие цифры), вы получаете ошибку «Несоответствие типов».

Sub InvalidNumber()

    Dim l As Long

    ' Даст ошибку несоответствия типов
    l = CLng("45A")

End Sub

Функция Val

Функция преобразует числовые части строки в правильный тип числа.

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

Sub IspVal()

    ' Печатает 45
    Debug.Print Val("45 Новая улица")

    ' Печатает 45
    Debug.Print Val("    45 Новая улица")

    ' Печатает 0
    Debug.Print Val("Новая улица 45")

    ' Печатает 12
    Debug.Print Val("12 f 34")

End Sub

Val имеет два недостатка

  1. Не мультирегиональный — Val не распознает международные версии чисел, такие как запятые вместо десятичных. Поэтому вы должны использовать вышеуказанные функции преобразования, когда ваше приложение будет использоваться в нескольких регионах.
  2. Преобразует недопустимые строки в ноль — в некоторых случаях это может быть нормально, но в большинстве случаев лучше, если неверная строка вызывает ошибку. Затем приложение осознает наличие проблемы и может действовать соответствующим образом. Функции преобразования, такие как CLng, вызовут ошибку, если строка содержит нечисловые символы.

Генерация строки элементов — функция строки

Функция Параметры Описание Пример
String число, символ Преобразует
числовую
переменную
в строку
String (5,»*»)

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

Sub IspString()

    ' Печатает: AAAAA
    Debug.Print String(5, "A")
    ' Печатает: >>>>>
    Debug.Print String(5, 62)
    ' Печатает: (((ABC)))
    Debug.Print String(3, "(") & "ABC" & String(3, ")")

End Sub

Преобразовать регистр / юникод — StrConv, UCase, LCase

Функция Параметры Описание Пример
StrConv строка,
преобразование, LCID
Преобразует
строку
StrConv(«abc»,vbUpperCase)

Если вы хотите преобразовать регистр строки в верхний или нижний регистр, вы можете использовать функции UCase и LCase для верхнего и нижнего соответственно. Вы также можете использовать функцию StrConv с аргументом vbUpperCase или vbLowerCase. В следующем коде показан пример использования этих трех функций.

Sub ConvCase()

    Dim s As String
    s = "У Мэри был маленький ягненок"

    ' верхний
    Debug.Print UCase(s)
    Debug.Print StrConv(s, vbUpperCase)

    ' нижний
    Debug.Print LCase(s)
    Debug.Print StrConv(s, vbLowerCase)

    ' Устанавливает первую букву каждого слова в верхний регистр
    Debug.Print StrConv(s, vbProperCase)

End Sub

На выходе: 

У МЭРИ БЫЛ МАЛЕНЬКИЙ ЯГНЕНОК
У МЭРИ БЫЛ МАЛЕНЬКИЙ ЯГНЕНОК
у мэри был маленький ягненок
у мэри был маленький ягненок
У Мэри Был Маленький Ягненок

Другие преобразования

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

Постоянные Преобразует Значение
vbUpperCase 1 в верхний регистр
vbLowerCase 2 в нижнем регистре
vbProperCase 3 первая буква
каждого слова в
верхнем регистре
vbWide* 4 от узкого к
широкому
vbNarrow* 8 от широкого к
узкому
vbKatakana** 16 из Хираганы в
Катакану
vbHiragana 32 из Катаканы в
Хирагану
vbUnicode 64 в юникод
vbFromUnicode 128 из юникода

Использование строк с массивами

Функция Параметры Описание Пример
Split выражение,
разделитель,
ограничить,
сравнить
Разбирает
разделенную
строку в
массив
arr = Split(«A;B;C»,»;»)
Join исходный
массив,
разделитель
Преобразует
одномерный
массив в
строку
s = Join(Arr, «;»)

Строка в массив с использованием Split

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

Sub StrToArr()

    Dim arr() As String
    ' Разобрать строку в массив
    arr = Split("Иван,Анна,Павел,София", ",")

    Dim name As Variant
    For Each name In arr
        Debug.Print name
    Next

End Sub

На выходе:

Иван
Анна
Павел
София

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

Массив в строку, используя Join

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

Sub ArrToStr()

    Dim Arr(0 To 3) As String
    Arr(0) = "Иван"
    Arr(1) = "Анна"
    Arr(2) = "Павел"
    Arr(3) = "София"

    ' Построить строку из массива
    Dim sNames As String
    sNames = Join(Arr, ",")

    Debug.Print sNames

End Sub

На выходе:

Иван, Анна, Павел, София

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

Функция Параметры Описание Пример
Format выражение,
формат,
firstdayofweek,
firstweekofyear
Форматирует
строку
Format(0.5, «0.00%»)

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

Sub FormatDate()

    Dim s As String
    s = "31/12/2019 10:15:45"

    ' Печатает: 31 12 19
    Debug.Print Format(s, "DD MM YY")
    ' Печатает: Thu 31 Dec 2019
    Debug.Print Format(s, "DDD DD MMM YYYY")
    ' Печатает: Thursday 31 December 2019
    Debug.Print Format(s, "DDDD DD MMMM YYYY")
    ' Печатает: 10:15
    Debug.Print Format(s, "HH:MM")
    ' Печатает: 10:15:45 AM
    Debug.Print Format(s, "HH:MM:SS AM/PM")

End Sub

В следующих примерах представлены некоторые распространенные способы форматирования чисел.

Sub FormatNumbers()

    ' Печатает: 50.00%
    Debug.Print Format(0.5, "0.00%")
    ' Печатает: 023.45
    Debug.Print Format(23.45, "00#.00")
    ' Печатает: 23,000
    Debug.Print Format(23000, "##,000")
    ' Печатает: 023,000
    Debug.Print Format(23000, "0##,000")
    ' Печатает: $23.99
    Debug.Print Format(23.99, "$#0.00")

End Sub

Функция «Формат» — довольно обширная тема, и она может самостоятельно занять всю статью. Если вы хотите получить больше информации, то страница формата MSDN предоставляет много информации.

Полезный совет по использованию формата

Быстрый способ выяснить используемое форматирование — использовать форматирование ячеек на листе Excel. Например, добавьте число в ячейку. Затем щелкните правой кнопкой мыши и отформатируйте ячейку так, как вам нужно. Если вы довольны форматом, выберите «Пользовательский» в списке категорий слева. При выборе этого вы можете увидеть строку формата в текстовом поле типа. Это формат строки, который вы можете использовать в VBA.

VBA Format Function

Заключение

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

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

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

Понравилась статья? Поделить с друзьями:
  • Аналог excel только лучше
  • Аналог times new roman в word
  • Аналог excel с макросами
  • Аналог select в excel
  • Аналог excel от гугл