Часто текстовая строка может содержать несколько значений. Например, адрес компании: «г.Москва, ул.Тверская, д.13», т.е. название города, улицы и номер дома. Если необходимо определить все компании в определенном городе, то нужно «разобрать» адрес на несколько составляющих. Аналогичный подход потребуется, если необходимо разнести по столбцам Имя и фамилию, артикул товара или извлечь число или дату из текстовой строки.
Данная статья является сводной, т.е. в ней содержатся ссылки на другие статьи, в которых решены определенные задачи. Начнем с адресов.
Самый простейший случай, если адрес, состоящий из названия города, улицы и т.д., импортирован в ячейку MS EXCEL из другой информационной системы. В этом случае у адреса имеется определенная структура (если элементы адреса хранились в отдельных полях) и скорее всего нет (мало) опечаток. Разгадав структуру можно быстро разнести адрес по столбцам. Например, адрес
«г.Москва, ул.Тверская, д.13»
очевидно состоит из 3-х блоков: город, улица, дом, разделенных пробелами и запятыми. Кроме того, перед названием стоят сокращения г., ул., д. С такой задачей достаточно легко справится инструмент MS EXCEL
Текст по столбцам
. Как это сделать написано в статье
Текст-по-столбцам (мастер текстов) в MS EXCEL
.
Очевидно, что не всегда адрес имеет четкую структуру, например, могут быть пропущены пробелы (запятые все же стоят). В этом случае помогут функции, работающие с текстовыми строками. Вот эти функции:
—
Функция ЛЕВСИМВ() в MS EXCEL
— выводит нужное количество левых символов строки;
—
Функция ПРАВСИМВ() в MS EXCEL
— выводит нужное количество правых символов строки;
—
Функция ПСТР() в MS EXCEL
— выводит часть текста из середины строки.
Используя комбинации этих функций можно в принципе разобрать любую строку, имеющую определенную структуру. Об этом смотри статью
Разнесение в MS EXCEL текстовых строк по столбцам
.
Еще раз отмечу, что перед использованием функций необходимо понять структуру текстовой строки, которую требуется разобрать. Например, извлечем номер дома из вышеуказанного адреса. Понятно, что потребуется использовать функцию ПРАВСИМВ(), но сколько символов извлечь? Два? А если в других адресах номер дома состоит из 1 или 3 цифр? В этом случае можно попытаться найти подстроку «д.», после которой идет номер дома. Это можно сделать с помощью
функции ПОИСК()
(см. статью
Нахождение в MS EXCEL позиции n-го вхождения символа в слове
). Далее нужно вычислить количество цифр номера дома. Это сделано в файле примера , ссылка на который внизу статьи.
Усложним ситуацию. Пусть подстрока «д.» может встречаться в адресе несколько раз, например, при указании названия
деревни
используется сокращение «д.», т.е. совпадает с префиксом номера дома. В этом случае нужно определить все строки, в которых имеется название деревень (первые 2 символа, т.к. это адрес населенного пункта) и исключить их. Также можно извлечь все цифры из строки в отдельный диапазон (см. статью
Извлекаем в MS EXCEL число из конца текстовой строки
). Но, что делать, если в названии улицы есть числа? Например, «26 Бакинских комиссаров». Короче, тут начинается творчество.
Не забудьте про пробелы! Каждый пробел — это отдельный символ. Часто при печати их ставят 2 или 3 подряд, а это совсем не то же самое, что один пробел. Используйте функцию
Функция СЖПРОБЕЛЫ() в MS EXCEL
, чтобы избавиться от лишних пробелов.
Об извлечении чисел из текстовой строки
см. здесь:
Извлекаем в MS EXCEL число из начала текстовой строки
или здесь
Извлекаем в MS EXCEL число из середины текстовой строки
.
Об извлечении названия файла из полного пути
см.
Извлечение имени файла в MS EXCEL
.
Про разбор фамилии
см.
Разделяем пробелами Фамилию, Имя и Отчество
.
Часто в русских текстовых строках попадаются
английские буквы
. Их также можно обнаружить и извлечь, см.
Есть ли в слове в MS EXCEL латинские буквы, цифры, ПРОПИСНЫЕ символы
.
Все статьи сайта, связанные с преобразованием текстовых строк собраны в этом разделе:
Изменение Текстовых Строк (значений)
.
Артикул товара
Пусть имеется перечень артикулов товара: 2-3657; 3-4897; …
Как видно, артикул состоит из 2-х числовых частей, разделенных дефисом. Причем, числовые части имеют строго заданный размер: первое число состоит из 1 цифры, второе — из 4-х.
Задача состоит в том, чтобы определить артикулы, у которых левый индекс <=2 и вывести для них правый индекс.
Первая часть задачи решается формулой =—ЛЕВСИМВ(A16;1)<=2 или =ЗНАЧЕН(ЛЕВСИМВ(A16;НАЙТИ(«-«;A16;1)-1))<=2 . Вторая формула понадобится, если длина первого индекса не обязательна равна 1 (см. файл примера ).
Вторая часть задачи решается формулой =ЗНАЧЕН(ПРАВСИМВ(A16;4)) .
Зачем нам потребовалась функция ЗНАЧЕН() ? Дело в том, что текстовые функции, такие ка ПРАВСИМВ() , возвращают текст, а не число (т.е. в нашем случае число в текстовом формате). Для того, чтобы применить к таким числам в текстовом формате операцию сравнения с другим числом, т.е. <=2, потребуется сначала
преобразовать текстовый формат в числовой формат
. Самый простой для этого способ — использовать функцию ЗНАЧЕН() или попытаться применить к нему арифметическую операцию, например, двойное вычитание — или *1 или +0.
ВНИМАНИЕ!
Если у Вас есть примеры или вопросы, связанные с разбором текстовых строк — смело пишите в комментариях к этой статье или в группу
]]>
https://vk.com/excel2ru
]]> ! Я дополню эту статью самыми интересными из них.
На чтение 23 мин. Просмотров 18.6k.
Содержание
- Краткое руководство по текстовым функциям
- Введение
- Прочитайте это в первую очередь!
- Добавление строк
- Извлечение части строки
- Поиск в строке
- Удаление пробелов
- Длина строки
- Перевернуть текст
- Сравнение
- Сравнение строк с использованием сопоставления с шаблоном
- Заменить часть строки
- Преобразовать типы в строку (базовый)
- Преобразовать строку в число — CLng, CDbl, Val и т.д.
- Генерация строки элементов — функция строки
- Преобразовать регистр / юникод — StrConv, UCase, LCase
- Использование строк с массивами
- Форматирование строки
- Заключение
Краткое руководство по текстовым функциям
Текстовые операции | Функции |
Добавить две или более строки | 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.
Теперь, когда вы понимаете эти два важных момента о строке, мы можем продолжить и посмотреть на строковые функции индивидуально.
Добавление строк
Вы можете добавлять строки, используя оператор &. Следующий код показывает несколько примеров его использования.
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:
- Знак равенства возвращает только true или false.
- Вы не можете указать параметр 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 имеет два недостатка
- Не мультирегиональный — Val не распознает международные версии чисел, такие как запятые вместо десятичных. Поэтому вы должны использовать вышеуказанные функции преобразования, когда ваше приложение будет использоваться в нескольких регионах.
- Преобразует недопустимые строки в ноль — в некоторых случаях это может быть нормально, но в большинстве случаев лучше, если неверная строка вызывает ошибку. Затем приложение осознает наличие проблемы и может действовать соответствующим образом. Функции преобразования, такие как 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.
Чтобы получить максимальную отдачу, используйте таблицу вверху, чтобы найти тип функции, которую вы хотите использовать. Нажав на левую колонку этой функции, вы попадете в этот раздел.
Если вы новичок в строках в VBA, то я предлагаю вам ознакомиться с разделом «Прочтите это в первую очередь» перед использованием любой из функций.
Max Human Пользователь Сообщений: 30 |
Добрый день, Уважаемые спецы Задача, вариант 2 — Задача: парсить «как бы, как-то» на лету, при формировании сводной таблицы. И сводную формировать уже из нужных значений. Файл данными прикрепил. Прикрепленные файлы
|
Max Human Пользователь Сообщений: 30 |
Михаил, Благодарю, это то что надо. Немного переделал: добавил именованный диапазон и убрал ЛЕВСИМВ. Получилась такая конструкция: ПРОСМОТР(99;ПОИСК(NameType;A3);NameType) Не могу понять, что означает 99 в ПРОСМОТР — Искомое значение? |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Не формулист)) Но, вроде, то, что мы заведомо не найдём |
Max Human Пользователь Сообщений: 30 |
ну я тоже так предположил)) но вот ввожу текстовую абракадабру и выдает ошибку Н/Д… |
ikki Пользователь Сообщений: 9709 |
если текстовую — то 99 нужно заменить на «яяя» фрилансер Excel, VBA — контакты в профиле |
Max Human Пользователь Сообщений: 30 |
=ПРОСМОТР(«яяя»;ПОИСК(NameType;A3);NameType) |
ikki Пользователь Сообщений: 9709 |
тогда формулисты нужны. фрилансер Excel, VBA — контакты в профиле |
Max Human Пользователь Сообщений: 30 |
и не важно что пишу, на латинице или кириллице |
ikki Пользователь Сообщений: 9709 |
не понял проблему фрилансер Excel, VBA — контакты в профиле |
Max Human Пользователь Сообщений: 30 |
правильно, потому что: в В4 999999 =ПРОСМОТР(999999;ПОИСК(NameType;A4);NameType) поэтому и хочу понять, почему с цифрами работает, а с текстом — нет. |
ikki Пользователь Сообщений: 9709 |
потому что Вы задавали вопрос по формуле, не предоставив контекста. фрилансер Excel, VBA — контакты в профиле |
gling Пользователь Сообщений: 4024 |
А зачем Вы ищите текст? Вы его не найдете в массиве который создается функцией ПОИСК.В вашем варианте в массиве есть цифра 7 и 1 это никак не текст. Поэтому результат ошибка. Посмотрите пошаговое вычисление и сами увидите. Изменено: gling — 16.03.2015 01:13:19 |
функция поиск возвращает число, поэтому, если в просмотр ставим текст, получаем н/д. |
|
Max Human Пользователь Сообщений: 30 |
ikki, Вопрос был в том, почему цифры, а не буквы в функции ПРОСМОТР? и далее, почему дает ошибку, если прописать буквы? как-то так. |
ikki Пользователь Сообщений: 9709 |
#16 16.03.2015 01:20:44
достаточно? фрилансер Excel, VBA — контакты в профиле |
||
Max Human Пользователь Сообщений: 30 |
Михаил, gling Спасибо, разобрался |
Max Human Пользователь Сообщений: 30 |
ну так все верно, — это же я ввожу |
ikki Пользователь Сообщений: 9709 |
ну я же не вижу, куда Вы вводите хорошо, что разобрались фрилансер Excel, VBA — контакты в профиле |
Михаил С. Пользователь Сообщений: 10514 |
#20 16.03.2015 01:42:45 Учитывая, из #1
ваши метки сработают не всегда. Именно поэтому я ввел ЛЕВСИМВ() Прикрепленные файлы
|
||
Разбор текстовых строк в MS EXCEL
Смотрите также случайно что-то нажали, даже не сможете поле можно:проверка значений, свойств и на его место. которого требуется вставить мы подробно рассмотрим, совпадения во втором позволяет извлекать от ячейку (см. файл и выглядит так: — это важно связанные с разборомОб извлечении названия файла вхождения символа в в статье Текст-по-столбцам (мастерЧасто текстовая строка может и это привело
«препятствовать» автоматическому процессувводить цифры и текст характеристик. В нашем примере новый. Например, если как добавлять строки столбце. Далее, значения
2-х до 4-х примера, лист Общий=1*ПСТР(A1;ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(1*ПСТР(A1;СТРОКА(ДВССЫЛ(«A1:A»&ДЛСТР(A1)));1));0);СЧЁТ(1*ПСТР(A1;СТРОКА(ДВССЫЛ(«A1:A»&ДЛСТР(A1)));1))) при копировании формулы. текстовых строк - из полного пути слове). Далее нужно текстов) в MS содержать несколько значений. к исчезновению строки. замены адресов ссылок с клавиатуры;Все эти функции возможны столбец F теперь необходимо вставить новый и столбцы на попарно перемножаются (при чисел из текстовых случай) для этого:О построении этой формулыПри необходимости можно подсчитать смело пишите всм. Извлечение имени файла вычислить количество цифр EXCEL. Например, адрес компании: Чтобы ее вернуть в скопированных формулах.указывать ссылки на диапазоны легко отслеживать в является столбцом E. столбец между столбцами рабочий лист, а
этом ЛОЖЬ преобразуется строк длиной доподсчитайте количество букв в смотрите . Это суммарные продажи за комментариях к этой в MS EXCEL. номера дома. ЭтоОчевидно, что не всегда «г.Москва, ул.Тверская, д.13»,
и продолжить работу Это и есть ячеек; ячейках и редактировать
Важно понимать разницу между D и E, также как удалять в 0, а
15 символов. При текстовой строке (ячейка также формула массива год (см. файл
статье или вПро разбор фамилии сделано в файле адрес имеет четкую т.е. название города, с документами, необходимо относительные ссылки. Ониредактировать аргументы функций.
благодаря строке формул. удалением строк (столбцов) выделите столбец E. их. ИСТИНА в 1). желании решение можноА3 — не забудьте примера). группу ! Ясм. Разделяем пробелами Фамилию, примера, ссылка на структуру, например, могут улицы и номер совершить следующую последовательность записываются без знаковВАЖНО! Существует список типичных В ней отображается и удалением ихНажмите команду Вставить, котораяВ ходе работы с Знак умножения эквивалентен легко расширить на) с помощью функции нажатьТеперь выведем эту же дополню эту статью Имя и Отчество. который внизу статьи. быть пропущены пробелы дома. Если необходимо
действий: «$». ошибок возникающих после все, что содержит содержимого. Если Вы находится в группе книгой Excel может в данном случае большее количество символов ДЛСТР() в ячейкеCRTL+SHIFT+ENTER таблицу на другом самыми интересными изЧасто в русских текстовыхУсложним ситуацию. Пусть подстрока «д.» (запятые все же определить все компанииВыберите на панели вкладкуЗнак «$» используется для ошибочного ввода, при каждая ячейка. На просто хотите очистить команд Ячейки на возникнуть необходимость вставить функции И(), т.е. и чисел.B3.
листе, а продажи них. строках попадаются может встречаться в стоят). В этом в определенном городе, под названием «Вид» того, чтобы оставить наличии которых система картинке она выделена содержимое, тогда щелкните вкладке Главная. новые столбцы и
строки совпадают, когдаСовет:;Если в текстовой строке за квартал заменимДля извлечения из таблицыанглийские буквы адресе несколько раз, случае помогут функции,
то нужно «разобрать» и нажать на адреса на ссылки откажется проводить расчет.
алым цветом. правой кнопкой мышиНовый столбец появится слева
строки на рабочий значения из обоихВ статье Извлекаемсоздайте табличку, состоящую из расположено несколько чисел, продажами нарастающим итогом. только нужных строк. Их также можно например, при указании
работающие с текстовыми адрес на несколько нее. в параметрах формулы Вместо этого выдаст
Артикул товара
Вводя в нее знак по заголовку и от выделенного.
лист или удалить столбцов совпадают с число из начала количества столбцов = то вышеуказанные формулыДля этого в ячейку можно использовать формулы, обнаружить и извлечь, названия деревни используется
строками. Вот эти составляющих. Аналогичный подходПроверьте, стоит ли галочка неизменными при ее
вам на первый «=», вы словно
из контекстное менюПри вставке строк и
ненужные. Excel позволяет соответствующими значениями искомых текстовой строки приведено количеству букв в работать не будут.В6 а не только см. Есть ли в сокращение «д.», т.е. функции: потребуется, если необходимо возле пункта «Строка копировании или заполнении. взгляд странные значения.
ВНИМАНИЕ!
«активируете» строку и выберите пункт Очистить столбцов в Excel, вставлять на лист строк. Функция СУММПРОИЗВ() решение соответствующей задачи. текстовой строке; В этом случаена листе Нарастающий Автофильтр. Покажем преимущества слове в MS
excel2.ru
Отбор строк таблицы MS EXCEL по их номеру
совпадает с префиксом- Функция ЛЕВСИМВ() в MS разнести по столбцам формул». Если ее Абсолютная ссылка прописывается Чтобы они не говорите программе, что
содержимое. Все содержимое рассмотренным ранее способом, новые строки и
складывает результат перемножения В статье Извлекаемзаголовкам столбцов присвойте порядковые можно предложить следующий
итог введите формулу аналогичную и недостатки обеих EXCEL латинские буквы, номера дома. В EXCEL — выводит нужное Имя и фамилию, нет, ставим. с двумя знаками были для вас собираетесь ввести какие-то выбранных строк и убедитесь, что Вы столбцы, при этом
и использована вместо число из середины номера; подход: рассмотренной выше =ИНДЕКС(Лист1!B$8:B$17;ПОИСКПОЗ($A6;Лист1!$A$8:$A$17;0)) и подходов. цифры, ПРОПИСНЫЕ символы. этом случае нужно
Выведем требуемые строки на том же листе
количество левых символов артикул товара илиПосле этого пропавшая строка «$»: перед буквой
причиной паники, мы данные, формулы. столбцов будет очищено, выбрали их полностью, их общее количество СУММ() лишь для
текстовой строки приведенов ячейкускопируйте столбец с текстовыми скопируйте ее вниз.Пусть имеется исходная таблица
Все статьи сайта, связанные определить все строки, строки; извлечь число или
Выведем требуемые строки на другом листе
в программе «возвращается» (заголовок столбца) и приводим их расшифровку. при этом сами
нажав на заголовок. не изменяется и того, чтобы не решение соответствующей задачи.С3 строками, содержащие числа,
А в ячейке с объемами продаж с преобразованием текстовых
в которых имеется- Функция ПРАВСИМВ() в MS дату из текстовой
на положенное ей перед цифрой (заголовок«#ССЫЛКА!». Говорит о том,Формулы можно вводить в они не удалятся. Если же это
остается фиксированным. Например, использовать формулы массива.Найдем заданные строки ввведите формулу =ПСТР($A3;C$2;1) в MS WORD;С6
excel2.ru
Извлекаем в MS EXCEL число из конца текстовой строки
товаров по кварталам. строк собраны в название деревень (первые EXCEL — выводит нужное
строки. место. Таким же строки). Вот так что вы указали ячейки вручную илиУрок подготовлен для Вас
не так, то
если вы вставите
Для примера рассмотрим строку
таблице. Строки состоят и протяните еенажмитевведите =ИНДЕКС(Лист1!C$8:C$17;ПОИСКПОЗ($A6;Лист1!$A$8:$A$17;0))+СУММ(B6)Нам требуется отобразить только
этом разделе: Изменение Текстовых 2 символа, т.к. количество правых символовДанная статья является сводной, самым образом можно
выглядит абсолютная ссылка:
неправильную ссылку на с помощью строки командой сайта office-guru.ru команда Вставить добавит новый столбец, то 18 (2-я строка из 2-х столбцов,
Несколько чисел в текстовой строке (через WORD)
вправо, заполнив всеCTRL+HСкопируем ее вниз и строки с определенными Строк (значений). это адрес населенного строки;
- т.е. в ней ее убрать, при =$С$1.
- одну ячейку или формул. Записать формулуИсточник: http://www.gcflearnfree.org/office2013/excel2013/8/full лишь новые ячейки.
- это приведет к в большой таблице). значения могут быть столбцы., т.е. вызовите инструмент
- вправо. Получим требуемый номерами: 2, 3,Пусть имеется перечень артикулов пункта) и исключить- Функция ПСТР() в MS содержатся ссылки на необходимости.Смешанная ссылка позволяет вам же на диапазон в ячейку, нужноАвтор/переводчик: Антон Андронов
- В Excel достаточно легко тому, что остальные Первое и второе
- любыми.Заменив формулу =ПСТР($A3;C$2;1) на
Найти и Заменить; результат. 5, 10. товара: 2-3657; 3-4897; их. Также можно EXCEL — выводит часть другие статьи, в
Несколько чисел в текстовой строке (через формулы, все числа склеиваются в одно)
Еще один вариант. Переходим оставлять неизменным значение ячеек; начинать ее соАвтор: Антон Андронов удалить любую строку, столбцы сместятся вправо, выражения вернут массивы {ЛОЖЬ:ИСТИНА:ИСТИНА:ЛОЖЬ:ЛОЖЬ}Пусть имеется перечень из
- =ЕСЛИ(ЕОШ(—ПСТР($A3;C$2;1));»»;—ПСТР($A3;C$2;1)) можно вывестиВ поле Найти введитеПримечаниеЭто можно легко сделать … извлечь все цифры текста из середины
- которых решены определенные в настройки «Файл»-«Параметры»-«Дополнительно». столбца или строки.«#ИМЯ?». Проверьте, верно ли
- знака «=». КMicrosoft Excel многие используют
- которая Вам со а последний просто и {ЛОЖЬ:ЛОЖЬ:ИСТИНА:ЛОЖЬ:ЛОЖЬ} соответственно. После 5 строк, которые только числовые значения. ^$ (любая буква)
: О том, почему с помощью АвтофильтраКак видно, артикул состоит из строки в строки. задачи. Начнем с В правом списке Если вы поставите
Несколько чисел в текстовой строке (через формулы, все числа размещаются в разные ячейки)
вы ввели адрес примеру, нам необходимо для выполнения простейших временем стала не удалится. попарного перемножения элементов требуется найти в Собрать все числовые
- или его выберите в формуле использовано в столбце А. из 2-х числовых
- отдельный диапазон (см.Используя комбинации этих функций адресов. настроек находим раздел знак «$» перед ячейки и название ввести данные в
- математических операций. Истинный нужна.Выделите заголовок строки, выше
- массивов, он будет таблице MS EXCEL. значения в одну из меню (см.
выражение +СУММ(B6), а не Но. если нам частей, разделенных дефисом. статью Извлекаем в MS можно в принципеСамый простейший случай, если «Экран» там же буквой в формуле, функции; нашу ячейку А1.
функционал программы значительноВыделите строки, которые необходимо которой Вы хотите преобразован в {0:0:1:0:0}. Т.е. Предполагается, что строки ячейку можно с рисунок ниже); просто +В6 читайте требуется вывести строки
excel2.ru
Поиск заданных строк в таблице MS EXCEL
Причем, числовые части EXCEL число из разобрать любую строку, адрес, состоящий из устанавливаем галочку напротив
то значение номера«#ДЕЛ/0!». Говорит о запрете Для этого выделяем шире. удалить. В нашем вставить новую. Например,
строка 18 совпадает не повторяются. помощью формулы =—Т(C7&D7&E7&F7&G7&H7&I7&J7&K7&L7&M7&N7&O7&P7&Q7)
в поле Заменить на: в этой статье. не в исходной имеют строго заданный
конца текстовой строки). имеющую определенную структуру. названия города, улицы
опции «Показывать строку строки. деления на 0. ее, ставим знакExcel позволяет решать сложнейшие примере это строки если необходимо вставить с третьей искомойБудем искать эти строки или =СЦЕПИТЬ(C7;D7;E7;F7;G7;H7;I7;J7;K7;L7;M7;N7;O7;P7;Q7)+0 оставьте пустым (еслиВ файле примера показано таблице, а например, размер: первое число Но, что делать, Об этом смотри и т.д., импортирован
формул».Но если формула будет, Скорее всего, вы «=» и вводим задачи, выполнять уникальные 6, 7 и новую строку между строкой. Функция СУММПРОИЗВ() вернет 1. в большой таблицеЕсли в текстовой строке все числа в как с помощью на другом листе состоит из 1 если в названии статью Разнесение в MS в ячейку MSСтроку для ввода данных смещается относительно столбцов ввели в строку
данные. Строка «придет математические расчеты, проводить 8. строками 7 иСОВЕТ (см. файл примера). расположено несколько чисел строке нужно вывести формул вывести только или при выводе цифры, второе - улицы есть числа?
EXCEL текстовых строк EXCEL из другой в ячейки можно (по горизонтали), то
формул ячейку с в рабочее состояние» анализ статистических данныхНажмите команду Удалить, которая
8, выделите строку: Для просмотра промежуточныхСтроки считаются совпадающими, когда и их нужно одним числом, т.е. четные строки или
строк отобразить не из 4-х. Например, «26 Бакинских
excel2.ru
Вставка и удаление строк и столбцов в Excel
по столбцам. информационной системы. В увеличить, если нельзя ссылка будет изменяться, «нулевым» значением; сама собой. На и многое другое. находится в группе 8. вычислений воспользуйтесь клавишей их значения в вывести в разные текстовая строка 123Филато11в6а будет только нечетные (попробуйте значения продаж за
Задача состоит в том, комиссаров». Короче, тутЕще раз отмечу, что этом случае у увидеть большую и так как она«#ЧИСЛО!». Свидетельствует о том, примере мы взяли Важным элементом рабочего команд Ячейки наНажмите команду Вставить, которая F9. обоих столбцах попарно ячейки, то можно преобразована в 123116) это сделать Автофильтром!) квартал, а продажи чтобы определить артикулы, начинается творчество. перед использованием функций
Вставка строк в Excel
- адреса имеется определенная сложную формулу целиком. смешанная. что значение аргумента ту же ячейку поля в Microsoft вкладке Главная. находится в группе
- С помощью формулы массива =ПОИСКПОЗ(1;(B17=B$8:B$12)*(C17=C$8:C$12);0) найдем совпадают. предложить следующий алгоритм или введите пробел
- Извлечем число из конца нарастающим итогом?
у которых левыйНе забудьте про пробелы! необходимо понять структуру структура (если элементы Для этого:Использование смешанных ссылок позволяет функции уже не «А1», ввели знак Excel является строкаВыделенные строки будут удалены, команд Ячейки на номер искомой строки.Для поиска совпадений будем (см. файл примера, (если в дальнейшем текстовой строки, например,
Вставка столбцов в Excel
- В этом случае можно индекс Каждый пробел - текстовой строки, которую адреса хранились вНаведите курсор мышки на вам варьировать формулы
- соответствует допустимой величине; «=» и нажали формул. Попробуем разобраться а те, что
- вкладке Главная. Формулу разместим в
использовать формулу =СУММПРОИЗВ((B17=B$8:B$12)*(C17=C$8:C$12)) Формулу разместим лист Общий случай): потребуется вывести числа из строки «Филатова123» воспользоваться Сводными таблицамиПервая часть задачи решается это отдельный символ. требуется разобрать. Например, отдельных полях) и границу между строкой
Удаление строк в Excel
и значения.«;;;#». Ширины вашей ячейки ввод, чтобы подсчитать с принципами ее расположены ниже, сместятся
- Новая строка появится выше столбце Е. в столбце D.как в предыдущем примере в отдельные ячейки);
- получим «123». или формулами. В формулой =—ЛЕВСИМВ(A16;1) Часто при печати
- извлечем номер дома скорее всего нет и заголовками столбцовПримечание. Чтобы каждый раз не хватает для сумму двух чисел. работы и ответить вверх. В нашем выбранной.Также для каждой искомой
Удаление столбцов в Excel
- Формула работает следующим образом. каждый символ текстовойнажмите ОК, буквы будутПусть текстовая строка Филатова123
- этой статье воспользуемсяВторая часть задачи решается их ставят 2 из вышеуказанного адреса.
- (мало) опечаток. Разгадав листа так, чтобы не переключать раскладку того, чтобы отобразитьМожно использовать мастер функций на ключевые вопросы, примере, после удаления
При вставке новых строк строки можно определить, Выражение B17=B$8:B$12 сравнивает текущее строки выводим в заменены пробелами или находится в ячейке формулами для того, формулой =ЗНАЧЕН(ПРАВСИМВ(A16;4)). или 3 подряд, Понятно, что потребуется структуру можно быстро он изменил свой в поисках знака полученное число. Вам (кнопка fx):
связанные с ней. строк 6, 7
или столбцов, Вы
если она в
значение первого столбца
office-guru.ru
Строка формул в Excel ее настройки и предназначение
отдельную ячейку; просто убраны;A1 чтобы сформировать своеобразныйЗачем нам потребовалась функция ЗНАЧЕН()?
а это совсем использовать функцию ПРАВСИМВ(), разнести адрес по внешний вид на «$», при вводе необходимо расширить ее.Активируем необходимую ячейку иMicrosoft Excel – одна и 8, на можете увидеть смарт-тег большой таблице. Это большой таблицы сос помощью функций СЖПРОБЕЛЫ()
Для чего предназначена строка формул в Excel?
скопируйте столбец обратно в. Чтобы извлечь число Отчет на основе Дело в том, не то же но сколько символов столбцам. Например, адрес «г.Москва,
- 2 стрелочки.
- адреса воспользуйтесь клавишей
- Все эти ошибки отображаются
- переходим к строке
- из самых полезных
- их место переместятся
- Параметры добавления. Он
- можно сделать с
- всеми значениями первого и (СЦЕПИТЬ() или
MS EXCEL. 123, расположенное справа, исходной таблицы. что текстовые функции, самое, что один извлечь? Два? А ул.Тверская, д.13″ очевидноУдерживая левую клавишу мышки, F4. Она служит
в ячейках, а формул, находим там программ, которая позволяет строки 9, 10 позволяет выбрать, как помощью функции =ЕСЛИ(ЕНД(ПОИСКПОЗ(A8;$E$17:$E$28;0));»»;»Да!»)
столбца искомых строк,
Как ввести формулу в строку?
аперсанда &) выводимЕсли требуется вывести полученные запишем формулу массива:Сделаем заготовку таблицы, в такие ка ПРАВСИМВ(), пробел. Используйте функцию Функция если в других состоит из 3-х переместите курсор вниз переключателем типов ссылок. в строке формул значок «fx», нажимаем. пользователю выполнять больше и 11. программа Excel должнаНайденные строки можно выделить и возвращает массив текстовую строку без числа в отдельные=1*ПСТР(A1; левом столбце укажем возвращают текст, а
СЖПРОБЕЛЫ() в MS адресах номер дома
- блоков: город, улица, на необходимое количество Если ее нажимать сохраняется значение после
- Сразу же он предлагает 400 математических операций.Выделите столбец, который необходимо форматировать вставленные ячейки. с помощью Условного
- логических значений {ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ:ЛОЖЬ}. 5 букв (т.е. только ячейки, то используйте
ПОИСКПОЗ(ЛОЖЬ;ЕОШИБКА(1*ПСТР(A1;СТРОКА(ДВССЫЛ(«A1:A»&ДЛСТР(A1)));1));0); строки, которые требуется не число (т.е. EXCEL, чтобы избавиться
- состоит из 1 дом, разделенных пробелами
- строк. Пока не периодически, то символ
- ввода.
выбрать функцию, которая Все они сгруппированы удалить. В нашем По умолчанию ячейки форматирования. значений ЛОЖЬ означает, числа), между числами инструмент Текст-по-столбцам (мастер255) вывести. в нашем случае от лишних пробелов.
- или 3 цифр? и запятыми. Кроме будет вольностью отображаться «$» проставляется, автоматическиЧасто у пользователей возникает необходима пользователю. Выбираем
- в 9 категорий: примере это столбец вставляются с темПри работе с Excel
- что значение 1,2 — 1 пробел; текстов) или материалЕсли число расположено вВ ячейке число в текстовом
- Об извлечении чисел из В этом случае того, перед названием содержимое.
- делая ссылки абсолютными необходимость скопировать формулу, нужную опцию, нажимаемфинансовые; E.
же форматированием, что Вы можете свободно из В17 нес помощью функции ПОИСК() статьи Разнесение текстовых
Что означает знак $ в строке формул Excel?
начале или серединеВ22 формате). Для того, текстовой строки можно попытаться найти стоят сокращения г.,Таким образом, можно увидеть или смешанными. вставить ее в «ОК».дата и время;Нажмите команду Удалить, которая и в строке вставлять новые строки найдено в диапазоне B$8:B$12, находим начальные позиции строк по столбцам.
значения, то формулавведем формулу =ИНДЕКС(B$8:B$17;ПОИСКПОЗ($A22;$A$8:$A$17;0)) и чтобы применить ксм. здесь: Извлекаем в подстроку «д.», после ул., д. С и редактировать длинныеКак вернуть строку формул другое место рабочегоДальше в диалоговом окнетекстовые; находится в группе выше (столбце правее). и столбцы на
состоящем из 5 каждого числа;Если в текстовой строке работать не будет скопируем ее для таким числам в MS EXCEL число которой идет номер
такой задачей достаточно функции. Так же в Excel на поля. Проблема в вводим значения встатистика;
команд Ячейки на Для доступа к рабочий лист, а
значений, т.к. значениес помощью функции ПСТР(), расположено несколько чисел, (см. файл примера). всех кварталов и текстовом формате операцию из начала текстовой дома. Это можно легко справится инструмент данный метод полезный место? Самая распространенная том, что при
Пропала строка формул в Excel
параметрах выбранной функции.математические; вкладке Главная. дополнительным опциям, наведите при необходимости даже не встречается в ЛЕВСИМВ(), ПРАВСИМВ() выводим то для извлеченияОбщая формула, позволяющая извлечь строк. сравнения с другим строки или здесь Извлекаем в сделать с помощью MS EXCEL Текст
- для тех ячеек, причина ее исчезновения копировании или заполненииЧто включает строка редактора
- массивы и ссылки;Выделенный столбец будет удален, курсор на смарт-тег удалять их, например,
первом столбце искомых числа в отдельные чисел можно вывести число из начала,Примечание числом, т.е. MS EXCEL число
функции ПОИСК() (см. статью по столбцам. Как которые содержат много – смена настроек. формы, ссылка корректируется формул Excel? Наработа с БД; а те, что
Большая строка формул
и нажмите стрелку. когда данные устарели. строк. ячейки. каждый символ текстовой середины и конца
- : Обратите внимание наЕсли у Вас есть из середины текстовой Нахождение в MS это сделать написано текстовой информации. Скорее всего, вы
- автоматически. Поэтому вы практике в данноелогические; находились справа, сместятсяВыделите заголовок столбца, левее В этом уроке
Аналогично, второе выражение ищетРешение из файла примера строки в отдельную текстовой строки посложнее смешенные ссылки B$8:B$17 и $A22 примеры или вопросы, строки.
exceltable.com
EXCEL позиции n-го
Как разделить текст в ячейке Excel?
Добрый день уважаемый читатель!
В статье я хочу рассмотреть вопрос о том, как и какими способами, возможно, разделить текст в ячейке, который оказался склеен! Если вы часто работаете с импортированными данными в Excel, то периодически встречаете такие проблемы как выгруженные точки вместо запятых, неправильный формат данных, слепленные слова или значения и многое другое. На этот случай Excel предоставляет несколько возможностей по нормализации данных и у каждого из них есть свои плюсы и минуса.
Разобрать слитый текст на необходимые составляющие возможно произвести с помощью:
Мастер разбора текстов
Рассмотрим самый простой способ разделить текст в ячейке, не по сути, а по исполнению. Для примера, очень наглядно это можно продемонстрировать на ФИО в одной ячейке, которые необходимо разделить на отдельные столбики для удобства сортировки и фильтрации.
Для выполнения задачи вызываем диалоговое окно «Мастер текстов (разбор)» и в 3 шага разделяем текст:
- Для начала нужно выделить данные, которые необходимо разделить, следующим шагом на вкладке «Данные» в разделе «Работа с данными» нажимаете иконку «Текст по столбцам» и в вызванном диалоговом окне мастера указываем формат рабочего текста. Выбираем 2 вида форматов:
- С разделителями – это когда существует текст или символ, который условно будет отделять будущее содержимое отдельных ячеек;
- Фиксированной ширины – это когда при помощи пробелов в тексте имитируется столбики одинаковой ширины.
- Вторым шагом, в нашем примере, указываем символ, выполняющий роль разделителя. В случаях, когда в тексте идут подряд пару разделителей, несколько пробелов, к примеру, то установка флажка для пункта «Считать последовательные разделители одним» укажет для Excel принимать их за один разделитель. Дополнительное условие «Ограничитель строк» поможет указать, что текстовые значения, содержащиеся в кавычках не делить (к примеру, название фирмы «Рудольф, Петер и Саймон»);
- Последним шагом, для уже разделённых столбиков, нужно указать в диалоговом окне мастера, предварительно выделив их, выбрать необходимый формат получаемых данных:
- Общий – не проводит изменения данных, оставляя их в первоначальном виде, будет оптимальным выбором в большинстве случаев;
- Текстовый – данный формат, в основном, необходим для столбиков с числовыми значениями, которые программа в обязательном порядке должна интерпретировать как текст. (К примеру, это числа с разделителем по тысяче или номер пластиковой карточки);
- Дата – этот формат используется для столбиков с датами, кстати, формат самой даты можно выбрать в выпадающем списке.
В случае, когда будете использовать символы, которые не похожи на стандартные, назначенные в региональных настройках, можете использовать кнопку «Подробнее» для правильного их распознавания.
Рассоединяем текст с помощью формул
Для этого способа нам понадобятся возможности сочетаний функций ПОИСК и ПСТР. При помощи функции ПОИСК мы будем искать все пробелы, которые есть между словами (например, между фамилией, именем и отчеством). Потом функцией ПСТР выделяем необходимое количество символов для дальнейшего разделения.
И если с первыми двумя словами понятно, что и как разделять, то разделителя для последнего слова нет, а это значит что нужно указать в качестве аргумента условно большое количество символов, как аргумент «число_знаков» для функции ПСТР, например, 100, 200 или больше.
А теперь поэтапно рассмотрим формирование формулы для разделения текста в ячейке:
- Во-первых, нам необходимо найти два пробела, которые разделяют наши слова, для поиска первого пробела нужна формула: =ПОИСК(» «;B2;1), а для второго подойдет: =ПОИСК(» «;B2;C2+1);
- Во-вторых, определяем, сколько символов нужно выделить в строке. Поскольку позиции разделителя мы уже определили, то символов для разделения у нас будет на один меньше. Значит, будем использовать функцию ПСТР для изъятия слов, с ячейки используя как аргумент «количество_знаков» результат работы предыдущей формулы. Для определения первого слова (Фамилии) нужна формула: =ПСТР(B2;1;ПОИСК(» «;B2;1)), для определения второго значения (Имя): =ПСТР(B2;ПОИСК(» «;B2;1)+1;ПОИСК(» «;B2;ПОИСК(» «;B2;1)+1) -ПОИСК(» «;B2;1)), а теперь определим последнее значение (Отчество): =ПСТР(B2;ПОИСК(» «;B2;ПОИСК(» «;B2;1)+1)+1;100).
В результате мы разделили ФИО на три слова, что позволит с ними эффективно работать.
Если же значение в ячейке будете делить на две части, то ищете только один пробел (или иной разделитель), а вот чтобы разделить более 4 слов, в формулу добавьте поиск необходимых разделителей.
Выдергиваем слова с помощью макросов VBA
Рассмотрим два способа разделить текст в ячейке:
- Выдергиваем отдельные слова по разделителю;
- Делим текст без пробелов.
Способ №1.
Поскольку вас интересует автоматическое деление текста, значит надо написать хорошую функцию на VBA и внедрить ее в рабочую книгу. Для начала переходим на вкладку «Разработчик» и выбираем «Visual Basic» или вызываем эту возможность с помощью горячего сочетания клавиш Alt+F11. (детальнее в статье «Как создать макрос в Excel»).
Создаем новый модуль в меню «Insert» наживаем пункт «Module» и переносим в него нижеприведенный код:
Разбить по строкам/столбцам
Данная функция является частью надстройки MulTEx
- Описание, установка, удаление и обновление
- Полный список команд и функций MulTEx
- Часто задаваемые вопросы по MulTEx
Скачать MulTEx
Вызов команды:
MulTEx -группа Ячейки/Диапазоны —Диапазоны —Разбить по строкам/столбцам
Эта команда разбивает данные во всех выделенных ячейках на части, используя в качестве разделителя указанные символ/символы. Главная особенность — в отличие от стандартной команды Excel «Разбить по столбцам», данная команда заносит результат разбиения данных в строки либо столбцы в одну строку/столбец, а не каждую часть в свой столбец. К тому же в стандартной команде Excel нет возможности указать несколько символов — только один.
Диапазон значений — указывается диапазон ячеек, данные которых необходимо разбить. Может быть как одним столбцом/строкой, так и диапазоном, состоящим из нескольких строк и нескольких столбцов.
Разделитель — указывается символ (или группа символов), который будет применен в качестве разделителя. Если разделитель не указан, то появится сообщение, информирующее об этом. В сообщении будет предложено использовать разделитель по умолчанию (Пробел). В случае отказа Вы сможете указать необходимый разделитель. Данные, внесенные ранее не будут утеряны.
-
Специальный — можно добавить в поле Разделитель один из специальных символов: неразрывный пробел или перенос на строки. Стандартно такие символы невозможно ввести с клавиатуры, но они могут часто встречаться в ячейках. Например, эти символы часто применяется в выгрузках из различных программ(вроде 1С): неразрывный пробел для разделения цифр или слов, которые не надо переносить на строки, а перенос на строки — для разделения основания платежей и иной информации.
Если в поле Разделитель уже указан какой-либо символ, то при выборе дополнительно специального символа будет показано сообщение:
Поместить результат:
Разделитель результата:
Доступно только если в качестве вывода результата указана одна ячейка. По умолчанию разделителем является перенос на строки. В качестве разделителя можно указать любой символ или группу символов.
- Перенос на строки — каждое новое результирующее значение в ячейке будет записано с новой строки:
- Произвольный — любой символ, буква, цифра или группа символов(словосочетания, цифры и т.п.).
Транспонировать — если Диапазон значений представляет собой столбец, то данные после обработки будут помещены в одну строку. Если Диапазон значений — строка, то данные будут помещены в столбец. Недоступно при выводе результата в одну ячейку.
Финансы в Excel
Текст по столбцам и строкам
Подробности Создано 03 Май 2012
Большинство опытных пользователей Excel умеют пользоваться встроенным интерфейсным средством для разбивки текстовой строки на составляющие с использованием символа разделителя. В некоторых ситуациях может оказаться удобнее разобрать текст не с помощью интерфейса, а с использованием формул. Как ни странно, но Excel не имеет встроенной стандартной функции рабочего листа для проведения таких действий. Это тем более непонятно, так как VBA поддерживает стандартную функцию Split, облегчающую решение подобных задач.
В примере созданы 2 сложные формулы для разбивки текста по столбцам и строкам. Их также можно использовать для выборки текстовой составляющей по порядковому номеру.
Напомним, что интерфейсное средство «Текст по столбцам» доступно через меню и ленту Excel Данные Текст по столбцам.
В файле-примере показано два типа формулы для разделения текста на составляющие:
- текст по столбцам (диапазон B5:K6)
- текст по строкам (диапазон A10:B19)
В качестве разделителя текста используется символ «,» (запятая). В служебных целях задействованы еще два символа » » (математические знаки «меньше» и «больше»). Эти символы не могут находится в исходном тексте, в противном случае формула будет работать неверно. И разделитель, и служебные символы можно заменить на любые другие, главное, чтобы они не могли быть задействованы в исходном тексте. Для замены исправьте константы во всех местах формулы.
Формула в ячейке B5 и далее по столбцам обрабатывает исходный текст из ячейки A5:
Формула в ячейке A10 и далее по строкам обрабатывает исходный текст из ячейки A9:
Формулы ссылаются только на исходный текст и не требуют наличия других предварительно вычисленных составляющих. Варианты отличаются только автоматическим определением порядкового номера текстовой составляющей, в первом случае — это подформула для вычисления номера от количества столбцов: COLUMNS($B:B); во втором — от количества строк: ROWS($10:10). При копировании диапазон столбцов и строк автоматически расширяется, вычисляя таким образом нужное значение. Вместо этой подформулы можно задать константу или переменную, определяющую требуемый номер. Из результатирующих текстовых значений убираются лишние пробелы при помощи функции TRIM().
Наверняка можно сделать формулу покороче, используя другие методы поиска. Это просто наш вариант — оригинальный, нигде не подсмотренный 😉
Как разделить текст в ячейке Excel?
Добрый день уважаемый читатель!
В статье я хочу рассмотреть вопрос о том, как и какими способами, возможно, разделить текст в ячейке, который оказался склеен! Если вы часто работаете с импортированными данными в Excel, то периодически встречаете такие проблемы как выгруженные точки вместо запятых, неправильный формат данных, слепленные слова или значения и многое другое. На этот случай Excel предоставляет несколько возможностей по нормализации данных и у каждого из них есть свои плюсы и минуса.
Разобрать слитый текст на необходимые составляющие возможно произвести с помощью:
Мастер разбора текстов
Рассмотрим самый простой способ разделить текст в ячейке, не по сути, а по исполнению. Для примера, очень наглядно это можно продемонстрировать на ФИО в одной ячейке, которые необходимо разделить на отдельные столбики для удобства сортировки и фильтрации.
Для выполнения задачи вызываем диалоговое окно «Мастер текстов (разбор)» и в 3 шага разделяем текст:
- Для начала нужно выделить данные, которые необходимо разделить, следующим шагом на вкладке «Данные» в разделе «Работа с данными» нажимаете иконку «Текст по столбцам» и в вызванном диалоговом окне мастера указываем формат рабочего текста. Выбираем 2 вида форматов:
- С разделителями – это когда существует текст или символ, который условно будет отделять будущее содержимое отдельных ячеек;
- Фиксированной ширины – это когда при помощи пробелов в тексте имитируется столбики одинаковой ширины.
- Вторым шагом, в нашем примере, указываем символ, выполняющий роль разделителя. В случаях, когда в тексте идут подряд пару разделителей, несколько пробелов, к примеру, то установка флажка для пункта «Считать последовательные разделители одним» укажет для Excel принимать их за один разделитель. Дополнительное условие «Ограничитель строк» поможет указать, что текстовые значения, содержащиеся в кавычках не делить (к примеру, название фирмы «Рудольф, Петер и Саймон»);
- Последним шагом, для уже разделённых столбиков, нужно указать в диалоговом окне мастера, предварительно выделив их, выбрать необходимый формат получаемых данных:
- Общий – не проводит изменения данных, оставляя их в первоначальном виде, будет оптимальным выбором в большинстве случаев;
- Текстовый – данный формат, в основном, необходим для столбиков с числовыми значениями, которые программа в обязательном порядке должна интерпретировать как текст. (К примеру, это числа с разделителем по тысяче или номер пластиковой карточки);
- Дата – этот формат используется для столбиков с датами, кстати, формат самой даты можно выбрать в выпадающем списке.
В случае, когда будете использовать символы, которые не похожи на стандартные, назначенные в региональных настройках, можете использовать кнопку «Подробнее» для правильного их распознавания.
Рассоединяем текст с помощью формул
Для этого способа нам понадобятся возможности сочетаний функций ПОИСК и ПСТР. При помощи функции ПОИСК мы будем искать все пробелы, которые есть между словами (например, между фамилией, именем и отчеством). Потом функцией ПСТР выделяем необходимое количество символов для дальнейшего разделения.
И если с первыми двумя словами понятно, что и как разделять, то разделителя для последнего слова нет, а это значит что нужно указать в качестве аргумента условно большое количество символов, как аргумент «число_знаков» для функции ПСТР, например, 100, 200 или больше.
А теперь поэтапно рассмотрим формирование формулы для разделения текста в ячейке:
- Во-первых, нам необходимо найти два пробела, которые разделяют наши слова, для поиска первого пробела нужна формула: =ПОИСК(» «;B2;1), а для второго подойдет: =ПОИСК(» «;B2;C2+1);
- Во-вторых, определяем, сколько символов нужно выделить в строке. Поскольку позиции разделителя мы уже определили, то символов для разделения у нас будет на один меньше. Значит, будем использовать функцию ПСТР для изъятия слов, с ячейки используя как аргумент «количество_знаков» результат работы предыдущей формулы. Для определения первого слова (Фамилии) нужна формула: =ПСТР(B2;1;ПОИСК(» «;B2;1)), для определения второго значения (Имя): =ПСТР(B2;ПОИСК(» «;B2;1)+1;ПОИСК(» «;B2;ПОИСК(» «;B2;1)+1) -ПОИСК(» «;B2;1)), а теперь определим последнее значение (Отчество): =ПСТР(B2;ПОИСК(» «;B2;ПОИСК(» «;B2;1)+1)+1;100).
В результате мы разделили ФИО на три слова, что позволит с ними эффективно работать.
Если же значение в ячейке будете делить на две части, то ищете только один пробел (или иной разделитель), а вот чтобы разделить более 4 слов, в формулу добавьте поиск необходимых разделителей.
Выдергиваем слова с помощью макросов VBA
Рассмотрим два способа разделить текст в ячейке:
- Выдергиваем отдельные слова по разделителю;
- Делим текст без пробелов.
Способ №1.
Поскольку вас интересует автоматическое деление текста, значит надо написать хорошую функцию на VBA и внедрить ее в рабочую книгу. Для начала переходим на вкладку «Разработчик» и выбираем «Visual Basic» или вызываем эту возможность с помощью горячего сочетания клавиш Alt+F11. (детальнее в статье «Как создать макрос в Excel»).
Создаем новый модуль в меню «Insert» наживаем пункт «Module» и переносим в него нижеприведенный код:
Разделить текст по столбцам в Excel
Приложение Excel позволяет разбивать текст в ячейках столбца на несколько подстрок и располагать их в отдельных колонках. При этом для разбивки используется специальный разделитель, который выбирается пользователем для каждого конкретного случая.
Для примера рассмотрим данные CSV файла. Каждая подстрока в нем разделена символом «точка с запятой» и помещена в двойные кавычки. Вставьте их в любое место Вашей рабочей книги:
Перед разбивкой данных требуется выделить нужный диапазон, а затем кликнуть по пиктограмме «Текст по столбцам» в области «Работа с данными» на ленте вкладки «Данные».
На экране будет отображено окно мастера распределения текста:
Весь процесс состоит из трех шагов.
На первом этапе требуется выбрать формат данных для разделения, а именно указать, содержит ли текст разделители, или каждый будущий столбец имеет свою фиксированною ширину, т.е. длину текста. Последний вариант рассматриваться не будет, так как он ничем не отличается от первого кроме следующего шага, где требуется самостоятельно выбрать на линейке ширину поля.
Выберите пункт «С разделителями» и нажмите кнопку «Далее».
Следующим действием выбирается символ-разделитель. Им может быть любой из знаков, включая буквы и цифры.
Обратите внимание на то, что если разделители идут подряд, то каждый из них образует новый столбец, т.е. 2 таких символа создают 1 пустой столбец, 3 – 2 и т.д. Чтобы избавиться от этого часто нужного действия достаточно поставить галочку на поле «Считать последовательные разделители одним».
Может возникнуть ситуация, когда подстрока для создания столбца содержит символ-разделитель, который таковым не является. В подобных случаях строки должны быть заключены в одинарные либо двойные кавычки (в нашем примере исходных данных это присутствует), а в окне мастера нужно выбрать, какой ограничитель строк применить.
Имейте в виду то, что символы-разделители и ограничители удаляются из содержимого разделенных данных.
На любом описанным выше этапе можно нажать кнопку «Готово» для предоставления возможности приложению Excel самостоятельно завершить разделение текста в ячейках столбца. Но если Вы хотите контролировать весь процесс, то продолжайте нажимать «Далее».
Завершающим шагом является назначение форматирования новым колонкам и указания места для их расположения.
Из возможных настроек предоставлено только несколько форматов (типов данных), а поместить распределенный текст можно только на текущем листе.
У Вас недостаточно прав для комментирования.