Введите адрес файла и разберите его на части, разделенные знаком, выведите каждую часть в отдельный
Обновлено: 22.11.2024
Ниже mary — это отдельная строка. Несмотря на то, что это предложение, слова не представлены как дискретные единицы. Для этого вам нужен другой тип данных: список строк, где каждая строка соответствует слову. .split() — метод, который следует использовать:
.split() разбивает mary на whitespce, и возвращаемый результат представляет собой список слов в mary. Этот список содержит 5 элементов, как показывает функция len(). len() для mary, напротив, возвращает количество символов в строке (включая пробелы).
Пробелы включают пробел ' ', символ новой строки '\n' и табуляцию '\t' и другие. .split() разделяет любую комбинированную последовательность этих символов:
Разделение на определенную подстроку
Указав необязательный параметр, .split('x') можно использовать для разделения строки на определенную подстроку 'x'. Без указания 'x' .split() просто разделяет все пробелы, как показано выше.
Введите строку в список символов: list()
Но что, если вы хотите разбить строку на список символов? В Python символы — это просто строки длины 1. Функция list() превращает строку в список отдельных букв:
В более общем смысле list() — это встроенная функция, которая превращает объект данных Python в список. Когда задается строковый тип, возвращается список символов в нем. Когда заданы другие типы данных, особенности различаются, но возвращаемый тип всегда является списком. Подробнее см. в этом руководстве.
Присоединение к списку строк: .join()
Если у вас есть список слов, как соединить их в одну строку? .join() — метод, который следует использовать. Вызывается по строке-разделителю 'x', 'x'.join(y) объединяет все элементы в списке y, разделенные символом < tt>'х'. Ниже слова в mwords соединяются обратно в строку предложения с пробелом между ними:
Метод также можно вызвать для пустой строки '' в качестве разделителя. Эффект заключается в том, что элементы в списке соединяются вместе, и между ними ничего нет. Ниже список символов снова объединяется в исходную строку:
Python предоставляет встроенные функции и модули для поддержки этих операций.
Открытие/закрытие файла
Чтение/запись текстовых файлов
Объект fileObj, возвращаемый после открытия файла, содержит указатель файла. Первоначально он располагается в начале файла и перемещается вперед всякий раз, когда выполняются операции чтения/записи.
Чтение строки/строк из текстового файла
- fileObj.readline() -> str : (наиболее часто используемый) Читает следующую строку (до и включая новую строку) и возвращает строку (включая новую строку). Он возвращает пустую строку после конца файла (EOF).
- fileObj.readlines() -> [str] : чтение всех строк в список строк.
- fileObj.read() -> str : чтение всего файла в строку.
Запись строки в текстовый файл
- fileObj.write(str) -> int : Записать заданную строку в файл и вернуть количество записанных символов. Вам нужно явно завершить str с помощью '\n' , если это необходимо. '\n' будет преобразован в новую строку в зависимости от платформы ("\r\n" для Windows или '\n' для Unix/Mac OS).
Примеры
Построчная обработка текстового файла
Мы можем использовать оператор with для открытия файла, который будет автоматически закрыт при выходе, и цикл for для построчного чтения следующим образом:
Выражение with эквивалентно выражению try-finally следующим образом:
Пример: построчное копирование файла
Следующий скрипт копирует один файл в другой построчно, добавляя перед каждой строкой номер строки.
Операции с двоичными файлами
- fileObj.tell() -> int : возвращает текущую позицию в потоке. Текущая позиция потока — это количество байтов от начала файла в двоичном режиме и непрозрачное число в текстовом режиме.
- fileObj.seek(смещение): устанавливает текущую позицию в потоке на смещение байт от начала файла.
Например, [ЗАДАЧ]
Каталог и управление файлами
В Python управление каталогами и файлами поддерживается модулями os , os.path , Shutil , .
Операции с путями с использованием модуля os.path
В Python путь может означать:
- файл,
- каталог или
- символическая ссылка (символическая ссылка).
Путь может быть абсолютным (начиная с корня) или относительным относительно текущего рабочего каталога (CWD).
Разделитель пути зависит от платформы (Windows использует '\' , а Unix/Mac OS использует ' /' ). Модуль os.path поддерживает независимые от платформы операции над путями, разумно обрабатывая разделитель путей.
Проверка существования и типа пути
- os.path.exists(path) -> bool : проверить, существует ли указанный путь.
- os.path.isfile(путь_к_файлу) , os.path.isdir(путь_к_каталогу) , os.path.islink(путь_ссылки) -> bool : проверить, является ли указанный путь файлом, каталогом или символической ссылкой.
Формирование нового пути
Разделитель пути зависит от платформы (Windows использует '\' , а Unix/Mac OS использует '/' ). Для переносимости важно НЕ жестко кодировать разделитель пути. Модуль os.path поддерживает независимые от платформы операции над путями, разумно обрабатывая разделитель путей.
- os.path.sep : разделитель путей текущей системы.
- os.path.join(path, *paths) : формирование и возврат пути путем объединения одного или нескольких компонентов пути путем вставки зависящего от платформы разделителя пути ( '/' или '\' ). Чтобы сформировать абсолютный путь, вам нужно начать с os.path.sep от имени пользователя root.
Управление именем каталога и именем файла
- os.path.dirname(путь) : возвращает имя каталога для заданного пути (файл, каталог или символическая ссылка). Возвращаемое имя каталога может быть абсолютным или относительным, в зависимости от заданного пути.
- os.path.abspath(path) : возвращает абсолютный путь (начиная с корня) заданного path . Это может быть абсолютное имя файла, абсолютное имя каталога или абсолютная символическая ссылка.
Например, чтобы сформировать абсолютный путь к файлу с именем out.txt в том же каталоге, что и in.txt , вы можете извлечь абсолютное имя каталога из in.txt , а затем присоединиться к out.txt следующим образом:
Когда модуль загружается в Python, __file__ устанавливается на имя модуля. Попробуйте запустить этот скрипт с различными ссылками на __file__ и изучите их вывод:
Обработка символической ссылки (Unixes/Mac OS)
- os.path.realpath(path) : (для символических ссылок) Аналогично abspath() , но возвращает канонический путь, исключая любые встречающиеся символические ссылки.
Управление каталогами и файлами с помощью модулей os и Shutil
Модули os и Shutil обеспечивают интерфейс к операционной системе и системной оболочке.
- Если вы хотите просто прочитать или записать файл, используйте встроенную функцию open() .
- Если вы просто хотите управлять путями (файлами, каталогами и символическими ссылками), используйте модуль os.path.
- Если вы хотите прочитать все строки во всех файлах в командной строке, используйте модуль ввода файлов.
- Для создания временных файлов/каталогов используйте модуль tempfile.
Управление каталогом
Управление файлами
- os.rename(src_file, dest_file) : переименовать файл.
- os.remove(файл) или os.unlink(файл): удалить файл. Вы можете использовать os.path.isfile(file), чтобы проверить, существует ли file.
Например [TODO],
Список каталогов
- os.listdir(path='.') -> [path] : список всех записей в данном каталоге (исключая '.' и '..' ), по умолчанию текущий каталог.
Рекурсивное отображение каталога с помощью os.walk()
- os.walk(top, topdown=True, onerror=None, followlinks=False): рекурсивно перечислить все записи, начиная с top .
Рекурсивное отображение каталога с помощью модуля glob (Python 3.5)
Копирование файла
Команда оболочки [TODO]
- os.system(command_str) : запустить команду оболочки. (В Python 3 вместо этого используйте subprocess.call().)
Переменные среды [TODO]
- os.getenv(varname, value=None) : возвращает переменную среды, если она существует, или value, если ее нет. , по умолчанию нет .
- os.putenv(имя_переменной, значение) : установите для переменной среды значение значение.
- os.unsetenv(имя_переменной): удалить (сбросить) переменную среды.
модуль ввода файла
Модуль fileinput обеспечивает поддержку обработки строк ввода из одного или нескольких файлов, указанных в аргументах командной строки ( sys.argv ). Например, создайте следующий скрипт с именем " test_fileinput.py ":
Обработка текста
Для простых операций с текстовыми строками, таких как поиск и замена строк, можно использовать встроенные строковые функции (например, str.replace(old, new)) ) . Для поиска и замены сложных шаблонов вам необходимо освоить регулярное выражение (регулярное выражение).
Операции со строками
Встроенный класс str предоставляет множество функций-членов для работы с текстовыми строками. Предположим, что s — это объект str.
Удалить пробелы (пробел, табуляция и новая строка)
- s.strip()-> str : возвращает копию строки s с удаленными начальными и конечными пробелами. Пробелы включают пробел, табуляцию и новую строку.
- s.strip([chars]) -> str : удаляет заданные начальные/конечные символы вместо пробелов.
- s.rstrip() , s.lstrip() -> str : удалить правые (конечные) пробелы и левые (начальные) пробелы соответственно.< /li>
s.rstrip() чаще всего используется для удаления завершающих пробелов/перевода строки. Ведущие пробелы обычно имеют значение.
Верхний/нижний регистр
- s.upper() , s.lower() -> str : возвращает копию строки s, преобразованную в верхний и нижний регистр. соответственно.
- s.isupper() , s.islower() -> bool : проверьте, является ли строка прописной или строчной, соответственно.
- s.find(key_str, [начало], [конец]) -> int|- 1 : вернуть самый низкий индекс в срезе s [начало:конец] (по умолчанию вся строка); или -1, если не найдено.
- s.index(key_str, [начало], [конец]) -> int|ValueError : аналогично find() , но вызывает ValueError, если не найдено.
- s.startswith(key_str, [начало], [конец]) , s .endsswith(key_str, [начало], [конец]) -> bool : проверить, начинается или заканчивается строка с key_str .
Найти и заменить
- s.replace(old, new, [count]) -> str : вернуть копию при этом все вхождения old заменены на new . Необязательный параметр count ограничивает количество заменяемых вхождений, по умолчанию все вхождения.
str.replace() идеально подходит для простой замены текстовой строки без необходимости сопоставления с образцом.
Разделить на токены и объединить
- s.split([sep], [maxsplit=-1]) -> [str] : возвращает список слов. используя sep в качестве строки-разделителя. Разделителем по умолчанию являются пробелы (пробел, табуляция и новая строка). maxSplit ограничивает максимальное количество операций разделения, по умолчанию -1 означает отсутствие ограничений.
- sep.join([str]) -> str : обратный метод split() . Присоединяйтесь к списку строк с помощью sep в качестве разделителя.
Регулярное выражение в модуле re
Я предполагаю, что вы знакомы с регулярными выражениями, иначе вы могли бы прочитать:
- "Регулярное выражение на примерах" для обзора синтаксиса регулярных выражений и примеров.
- "Регулярные выражения" для полного охвата.
Модуль re обеспечивает поддержку регулярных выражений (regex).
Обратная косая черта ( \ ), исходная строка Python r'. ' против обычной строки
В синтаксисе регулярного выражения используется обратная косая черта ( \ ):
- для метасимволов, таких как \d (цифра), \D (не цифра), \s (пробел), \S (не пробел), \w (слово), \W (не слово)
- для экранирования специальных символов регулярных выражений, например, \. для . , \+ для + , \* для * , \? для ? . Вам также нужно написать \\ для соответствия \ .
С другой стороны, обычные строки Python также используют обратную косую черту для управляющих последовательностей, например, \n для новой строки, \t для табуляции. Опять же, вам нужно написать \\ вместо \ .
Чтобы записать шаблон регулярного выражения \d+ (одна или несколько цифр) в обычную строку Python, вам нужно написать '\\d+' . Это громоздко и чревато ошибками.
Решение Python использует необработанную строку с префиксом r в форме r'. ' . Он игнорирует интерпретацию управляющей последовательности строки Python. Например, r'\n' — это '\'+'n' (два символа) вместо новой строки (один символ). Используя необработанную строку, вы можете написать r'\d+' для шаблона регулярного выражения \d+ (вместо обычной строки '\\d+' ).
Кроме того, Python обозначает обратные ссылки в скобках (или группы захвата) как \1 , \2 , \3 , . которые могут быть записаны как необработанные строки r'\1' , r'\2' вместо обычных строк '\\1' и '\\2' . Обратите внимание, что в некоторых языках используются $1, $2, . для обратных ссылок.
Я предлагаю вам использовать необработанные строки для строк шаблонов регулярных выражений и строк замены.
Компиляция (создание) объекта шаблона регулярных выражений
Вызов операций регулярных выражений
Вы можете вызывать большинство функций регулярных выражений двумя способами:
- regexObj.func(str): применить скомпилированное регулярное выражение object к str , через функцию-член SRE_Pattern func() .
- re.func(regexObj|regexStr, str) : применить объект регулярного выражения (скомпилированный) или < em>regexStr (не скомпилировано) в str через функцию уровня модуля re func() . Эти функции уровня модуля представляют собой ярлыки для описанных выше, которые не требуют предварительной компиляции объекта регулярного выражения, но пропускают модификаторы, если используется regexStr.
Найти с помощью finalAll()
- regexObj.findall(str) -> [str] : возвращает список всех совпадающих подстрок.
- re.findall(regexObj|regexStr, str) -> [str] : то же, что и выше.
Заменить с помощью sub() и subn()
- regexObj.sub(replaceStr, inStr, [count=0]) -> outStr: заменить (заменить) совпавшие подстроки в заданном inStr на replaceStr , до количества вхождений, по умолчанию все.
- regexObj.subn(replaceStr, inStr, [count=0]) -> (outStr, count) : аналогично sub() , но возвращает новую строку вместе с количеством замен в двух кортежах.
- re.sub(regexObj|regexStr, replaceStr, inStr, [count em>=0]) ->outStr: то же, что и выше.
- re.subn(regexObj|regexStr, replaceStr, inStr, [count em>=0]) -> (outStr, count) : то же, что и выше.
Примечания. Для простой замены строки используйте str.replace(old, new, [max= -1]) -> str, что более эффективно. См. раздел выше.
Использование обратных ссылок в скобках \1 , \2 , . в замене и шаблоне
В Python обратные ссылки в круглых скобках регулярных выражений (группы захвата) обозначаются как \1 , \2 , . Вы можете использовать необработанную строку (например, r'\1' ), чтобы избежать экранирования обратной косой черты в обычной строке (например, '\\1' ).
Найти с помощью search() и Match Object
Поиск() возвращает специальный объект Match, инкапсулирующий первое совпадение (или None, если совпадений нет). Затем вы можете использовать следующие методы для обработки результирующего объекта Match:
- matchObj.group() : возвращает совпадающую подстроку.
- matchObj. start() : возвращает начальную совпадающую позицию (включительно).
- matchObj. end() : возвращает конечную совпавшую позицию (эксклюзивно).
- matchObj. span() : возвращает кортеж совпадающей позиции (начало, конец).
Чтобы получить обратные ссылки (или группы захвата) внутри объекта Match:
- matchObj. groups() : возвращает кортеж захваченных групп (или обратных ссылок)
- matchObj .group(n) : возвращает группу захвата n , где n начинается с 1 .
- matchObj.lastindex : последний индекс захватываемой группы
Поиск с использованием match() и fullmatch()
Search() соответствует любому заданному элементу inStr[begin:end] . С другой стороны, match() соответствует с начала inStr[начало:конец] (аналогично в шаблон регулярного выражения ^. ); в то время как fullmatch() соответствует всему inStr[begin:end] (аналогично шаблону регулярного выражения ^. $ ).
Найти с помощью finditer()
Функция finditer() аналогична функции findall(). findall() возвращает список совпадающих подстрок. Finditer() возвращает итератор для объектов Match. Например,
Разделение строки на токены
Функция split() разбивает заданный inStr на список, используя шаблон регулярного выражения в качестве разделителя (разделителя). Например,
Примечания. Для простого разделителя используйте str.split([sep]) , что более эффективно. См. раздел выше.
Парсинг веб-страниц
Ссылки:
Скрапинг веб-страниц (или сбор веб-страниц или извлечение веб-данных) означает чтение необработанной HTML-страницы для извлечения нужных данных. Излишне говорить, что вам необходимо освоить HTML, CSS и JavaScript.
Python поддерживает просмотр веб-страниц с помощью запросов пакетов и BeautifulSoup (bs4).
Установить пакеты
Вы можете установить соответствующие пакеты с помощью pip следующим образом:
Шаг 0. Проверка целевой веб-страницы
- Нажмите F12 на целевой веб-странице, чтобы включить отладчик F12.
- Выберите «Инспектор».
- Нажмите кнопку "Выбрать" (крайний левый значок со стрелкой) и наведите указатель мыши на нужную часть HTML-страницы. Изучите коды.
Шаг 2. Преобразование HTML-текста в древовидную структуру с помощью BeautifulSoup и поиск нужных данных
Вы можете записать выбранные данные в файл:
Вы также можете использовать модуль csv для записи строк данных с заголовком:
Шаг 3. Загрузите выбранный документ с помощью urllib.request
Возможно, вы захотите загрузить такие документы, как текстовые файлы или изображения.
Шаг 4. Задержка
Чтобы избежать рассылки спама на веб-сайт с запросами на загрузку (и пометки как спамера), вам необходимо на некоторое время приостановить работу кода.
Когда данные импортируются в Excel, они могут быть в разных форматах в зависимости от исходного приложения, которое их предоставило.
Например, он может содержать имена и адреса клиентов или сотрудников, но все это заканчивается непрерывной текстовой строкой в одном столбце рабочего листа, вместо того, чтобы быть разделенным на отдельные столбцы, например.название, улица, город.
Вы можете разделить данные, используя общий символ-разделитель. Символ-разделитель обычно представляет собой запятую, табуляцию, пробел или точку с запятой. Этот символ разделяет каждый фрагмент данных в текстовой строке.
Большим преимуществом использования символа-разделителя является то, что он не зависит от фиксированной ширины текста. Разделитель указывает, где именно разделить текст.
Возможно, вам придется разделить данные, потому что вы хотите отсортировать данные, используя определенную часть адреса, или иметь возможность фильтровать по определенному компоненту. Если данные используются в сводной таблице, вам может потребоваться указать имя и адрес в качестве разных полей внутри нее.
В этой статье показано восемь способов разделения текста на составные части с использованием символа-разделителя для обозначения точек разделения.
Пример данных
Приведенные выше образцы данных будут использоваться во всех следующих примерах. Загрузите файл примера, чтобы получить образец данных, а также различные решения для извлечения данных на основе разделителей.
Функции Excel для разделения текста
Существует несколько функций Excel, которые можно использовать для разделения текста внутри ячейки и управления им.
ЛЕВАЯ функция
Функция ВЛЕВО возвращает количество символов слева от текста.
Синтаксис
- Текст — это текстовая строка, из которой вы хотите извлечь данные. Это также может быть действительная ссылка на ячейку в книге.
- Число [Необязательно] — это количество символов, которое вы хотите извлечь из текстовой строки. Значение должно быть больше или равно нулю. Если значение больше длины текстовой строки, будут возвращены все символы. Если значение опущено, предполагается, что оно равно единице.
ВПРАВО
Функция ПРАВИЛЬНО возвращает количество символов справа от текста.
Синтаксис
Параметры работают так же, как и для функции ВЛЕВО, описанной выше.
Функция НАЙТИ
Функция НАЙТИ возвращает позицию указанного текста в текстовой строке. Это можно использовать для поиска символа-разделителя. Обратите внимание, что при поиске учитывается регистр.
Синтаксис
- SubText — это текстовая строка, которую вы хотите найти.
- Текст — это текстовая строка, которую необходимо найти.
- Начало [Необязательно] — начальная позиция для поиска.
ДЛСТР
Функция ДЛСТР определяет длину текстовой строки по количеству символов.
Синтаксис
- Текст — это текстовая строка, для которой вы хотите определить количество символов.
Извлечение данных с помощью функций LEFT, RIGHT, FIND и LEN
Используя первую строку (B3) образца данных, эти функции можно комбинировать для разделения текстовой строки на разделы с помощью символа-разделителя.
Вы используете функцию НАЙТИ, чтобы получить позицию первого символа-разделителя. Это вернет значение 18.
Затем вы можете использовать функцию LEFT для извлечения первого компонента текстовой строки.
Обратите внимание, что НАЙТИ получает позицию первого разделителя, но вам нужно вычесть из нее 1, чтобы не включать символ разделителя.
Это вернет Табби О’Халлаган.
Сложнее получить следующие компоненты текстовой строки. Вам нужно удалить первый компонент из текста, используя приведенную выше формулу.
Эта формула берет длину исходного текста, находит первую позицию разделителя, которая затем вычисляет, сколько символов осталось в текстовой строке после этого разделителя.
Затем функция RIGHT усекает все символы до первого разделителя включительно, так что текстовая строка становится все короче и короче по мере нахождения каждого символа-разделителя.
Это вернет 056 Деннис Парк, Греда, Хорватия, 44273
Теперь вы можете использовать НАЙТИ, чтобы найти следующий разделитель, и функцию ВЛЕВО, чтобы извлечь следующий компонент, используя тот же метод, что и выше.
Повторите для всех разделителей, и это разделит текстовую строку на составные части.
Функция FILTERXML как динамический массив
Если вы используете Excel для Microsoft 365, вы можете использовать функцию FILTERXML для разделения текста с выводом в виде динамического массива.
Вы можете разделить текстовую строку, превратив ее в строку XML, изменив символы-разделители на теги XML. Таким образом, вы можете использовать функцию FILTERXML для извлечения данных.
Теги XML определяются пользователем, но в этом примере s будет представлять подузел, а t — основной узел.
Используйте приведенную выше формулу, чтобы вставить теги XML в текстовую строку.
Это вернет приведенную выше формулу в примере.
Обратите внимание, что за каждым из определенных узлов следует закрывающий узел с обратной косой чертой. Эти теги XML определяют начало и конец каждого раздела текста и фактически действуют так же, как разделители.
Вышеприведенная формула вставляет теги XML в исходную строку, а затем использует их для разделения элементов на массив.
Как видно выше, каждый элемент массива будет помещен в отдельную ячейку. Использование функции ТРАНСП приводит к тому, что массив перемещается по горизонтали, а не по вертикали.
Функция FILTERXML для разделения текста
Если в вашей версии Excel нет динамических массивов, вы все равно можете использовать функцию FILTERXML для извлечения отдельных элементов.
Теперь вы можете разбить строку на разделы, используя приведенную выше формулу FILTERXML.
Это вернет первый раздел Tabbie O’Hallagan.
Чтобы вернуться к следующему разделу, используйте приведенную выше формулу.
Это вернет вторую часть текстовой строки 056 Dennis Park.
Вы можете использовать этот же шаблон для возврата любой части образца текста, просто соответствующим образом измените [2], найденный в формуле.
Быстрая заливка для разделения текста
Flash Fill позволяет указать пример того, как вы хотите разделить данные.
Дополнительные сведения см. в этом руководстве по использованию флэш-заполнения для очистки данных.
Затем вы выбираете первую ячейку, в которой хотите разделить данные, и нажимаете «Мгновенное заполнение». Excel заполнит оставшиеся строки из вашего примера.
Используя образец данных, введите Имя в ячейку C2, а затем Табби О'Халлаган в ячейку C3.
Флэш-заполнение должно автоматически заполнять оставшиеся имена данных из примера данных. Если это не так, вы можете выбрать ячейку C4 и щелкнуть значок «Быстрая заливка» в группе «Инструменты данных» на вкладке «Данные» на ленте Excel.
Аналогично вы можете добавить улицу в ячейку D2, город в ячейку E2, страну в ячейку F2 и почтовый индекс в ячейку G2.
Выберите последующие ячейки (от D2 до G2) по отдельности и нажмите значок "Быстрая заливка". Остальные текстовые компоненты будут размещены в этих столбцах.
Команда «Текст в столбцы» для разделения текста
Эту функцию Excel можно использовать для разделения текста в ячейке на разделы на основе символа-разделителя.
- Выберите весь диапазон выборочных данных (B2:B12).
- Нажмите вкладку "Данные" на ленте Excel.
- Нажмите значок «Текст в столбцы» в группе «Инструменты данных» на ленте Excel, и появится мастер, который поможет вам настроить разделение текста.
- Выберите «С разделителями» на кнопках выбора.
- Нажмите кнопку "Далее".
- Выберите запятую в качестве разделителя и снимите все остальные разделители.
- Нажмите кнопку "Далее".
- В окне предварительного просмотра данных будет показано, как будут разделены ваши данные. Выберите место для размещения вывода.
- Нажмите кнопку "Готово".
Теперь ваши данные будут отображаться в столбцах на вашем листе.
Преобразовать данные в файл CSV
Это будет работать только с запятыми в качестве разделителей, поскольку файл CSV (значения, разделенные запятыми) зависит от запятых для разделения значений.
Откройте Блокнот, скопируйте и вставьте в него образцы данных. Вы можете открыть Блокнот, введя Блокнот в поле поиска слева от панели задач Windows или найдя его в списке приложений.
После того как вы скопировали данные в Блокнот, сохраните их, выбрав в меню Файл ➜ Сохранить как. Введите имя файла с суффиксом .csv, например. Разделить данные.csv.
Затем вы можете открыть этот файл в Excel. Выберите CSV-файл в раскрывающемся списке типов файлов браузера и нажмите «ОК». Ваши данные будут автоматически отображаться с каждым компонентом в отдельных столбцах.
VBA для разделения текста
VBA – это язык программирования, лежащий в основе Excel и позволяющий вам писать собственный код для управления данными или даже для создания собственных функций.
Для доступа к редактору Visual Basic (VBE) используйте Alt + F11 .
Нажмите «Вставить» в строке меню, затем нажмите «Модуль».Для модуля появится новая панель. Вставьте приведенный выше код.
Этот код создает одномерный массив с именем MyArray. Затем он перебирает образцы данных (строки со 2 по 12) и использует функцию разделения VBA для заполнения массива MyArray.
Функция разделения использует разделитель-запятую, поэтому каждый раздел текста становится элементом массива.
Переменной-счетчику присвоено значение 3, которое представляет столбец C, который будет первым столбцом для отображения данных разделения.
Затем код выполняет итерацию по каждому элементу массива и заполняет каждую ячейку элементом. Ссылки на ячейки основаны на n для строки и Count для столбца.
Переменная Count увеличивается в каждом цикле, чтобы данные заполняли всю строку, а затем уменьшались.
Power Query для разделения текста
Power Query в Excel позволяет разделить столбец на разделы с помощью символа-разделителя.
Первое, что нужно сделать, это определить источник данных, который представляет собой образцы данных, которые вы ввели в свой рабочий лист Excel.
Перейдите на вкладку "Данные" на ленте Excel, а затем нажмите "Получить данные" в группе "Получить и преобразовать данные" на ленте.
Нажмите «Из файла» в первом раскрывающемся списке, а затем нажмите «Из книги» во втором раскрывающемся списке.
Откроется браузер файлов. Найдите файл образца данных (файл, который вы открыли) и нажмите OK.
Появится всплывающее окно навигации, показывающее все рабочие листы в вашей книге. Нажмите на рабочий лист с образцами данных, и это покажет предварительный просмотр данных.
Разверните дерево данных на левой панели, чтобы отобразить предварительный просмотр существующих данных.
Нажмите «Преобразовать данные», и откроется редактор Power Query.
Убедитесь, что выделен единственный столбец с данными. Щелкните значок «Разделить столбец» в группе «Преобразование» на ленте. Нажмите «По разделителю» в раскрывающемся списке.
Появится всплывающее окно, в котором можно выбрать разделитель. По умолчанию используется запятая.
Нажмите "ОК", и данные будут преобразованы в отдельные столбцы.
Нажмите «Закрыть и загрузить» в группе «Закрыть» на ленте, и в вашу книгу будет добавлен новый рабочий лист с таблицей данных в новом формате.
Вычисляемый столбец Power Pivot для разделения текста
Вы можете использовать Power Pivot для разделения текста с помощью вычисляемых столбцов.
Нажмите вкладку Power Pivot на ленте Excel, а затем щелкните значок "Добавить в модель данных" в группе "Таблицы".
Ваши данные будут автоматически обнаружены, и во всплывающем окне будет показано местоположение. Если это не правильное местоположение, его можно переустановить здесь.
Не устанавливайте флажок Моя таблица имеет заголовки во всплывающем окне, так как мы также хотим разделить заголовок.
Нажмите OK, и отобразится экран предварительного просмотра.
Щелкните правой кнопкой мыши заголовок столбца данных (Столбец 1) и выберите «Вставить столбец» во всплывающем меню. Будет вставлен вычисляемый столбец, в который можно ввести формулу.
Вставьте приведенную выше формулу в строку формул.
Это работает аналогично функциям, описанным в способе 1 этой статьи.
Эта формула предоставит компонент имени в текстовой строке.
Вставьте еще один вычисляемый столбец, используя ту же методологию, что и первый вычисляемый столбец.
Вставьте приведенную выше формулу в строку формул.
Это сложная формула, и вы можете разбить ее на разделы, используя несколько вычисляемых столбцов.
Это обеспечит компонент "Улица" в текстовой строке.
Вы можете продолжить изменять формулу, чтобы создать вычисляемые столбцы для всех остальных компонентов текстовой строки.
Проблема со сводной таблицей заключается в том, что ей нужно не только текстовое значение, но и числовое. Поскольку данные образца являются только текстовыми, необходимо добавить числовое значение.
Нажмите на первую ячейку в столбце "Добавить столбец" и введите формулу =1 в строке формул.
Это добавит значение 1 до конца этого столбца. Щелкните значок сводной таблицы на вкладке "Главная" ленты.
Нажмите «Сводная таблица» во всплывающем меню. Укажите расположение вашей сводной таблицы в первом всплывающем окне и нажмите OK. Если панель «Поля сводной таблицы» не отображается автоматически, щелкните правой кнопкой мыши скелет сводной таблицы и выберите «Показать список полей».
Нажмите «Вычисляемые столбцы» в списке полей и поместите их в окно «Строки».
наша сводная таблица теперь будет отображать отдельные компоненты текстовой строки.
Выводы
Работа с данными, разделенными запятыми или другими разделителями, может стать большой проблемой, если вы не знаете, как извлечь каждый элемент в отдельную ячейку.
К счастью, в Excel есть довольно много опций, которые помогут справиться с этой распространенной задачей.
Как использовать формулы Excel или быстрые приемы, чтобы разбить полный адрес на столбцы с указанием улицы, города, штата и почтового индекса. В примерах формул используются текстовые функции -- ВЛЕВО, ВПРАВО, СРЕДНЯЯ, ПОДСТАВИТЬ, НАЙТИ, ПОИСК и другие.
Разделить адрес без формул
В приведенных ниже примерах полный адрес указан в ячейке листа. Цель состоит в том, чтобы разделить почтовый адрес, город, штат и почтовый индекс на отдельные столбцы в одной строке.
Во-первых, ниже показаны два быстрых метода разделения данных по разным столбцам без использования формул.
- Быстрая заливка для разделения адресов по шаблону
- Текст в столбцы для полей адреса, разделенных запятыми
Результаты не обновляются
В этих двух неформальных методах данные разделяются на столбцы и больше не связаны с исходным полным адресом.
- Если обновляется полный адрес, разделенные поля не обновляются автоматически
- Вам потребуется вручную обновить разделенные поля по отдельности.
Когда использовать неформальные методы
Эти решения являются быстрыми и простыми, если вы не планируете изменять ячейку "полный адрес" в будущем.
- Данные были импортированы с веб-сайта или из системы отчетности.
- Чтобы отправить рассылку, вам нужно разовое исправление для разделения данных на столбцы.
- Никакие изменения адреса не будут внесены в вашу копию списка
Мгновенное заполнение для разделения адреса
Если в каждой ячейке вводится полный адрес по одной и той же схеме, встроенная функция мгновенного заполнения позволяет быстро разделить адрес на отдельные столбцы.
На этом снимке экрана видно, что адресные данные в каждой ячейке имеют одинаковый шаблон:
- Дефис разделяет адрес улицы и название города – выделено желтым цветом на снимке экрана.
- Запятая разделяет название города и код штата — зеленый цвет
- Пробел разделяет код штата и почтовый индекс — розовое выделение
Разделить адрес с мгновенной заливкой
Выполните следующие действия, чтобы разделить адрес с помощью Flash Fill:
- Вручную вводите элементы поля адреса в первой строке в отдельных столбцах. Это показывает Excel, что такое шаблон данных, поэтому он может разделить оставшиеся адреса на основе этого шаблона
- СОВЕТ. Для почтового индекса введите апостроф (') в начале номера, чтобы предотвратить потерю начального нуля.
- Выбрать первую пустую ячейку в следующей строке.
- Нажмите Ctrl + E, чтобы мгновенно заполнить заливку.
- Нажмите клавишу Tab, чтобы перейти к следующему столбцу.
- Используйте Ctrl+E во всех оставшихся столбцах, чтобы мгновенно заполнить их.
Быстрое заполнение Excel дополняет записи во всех столбцах на основе введенных вручную данных в первой строке.
Видео: быстрое заполнение
В этом коротком видеоролике Сара показывает, как разделить данные из одной ячейки на несколько столбцов с помощью сочетания клавиш Flash Fill — Ctrl+E
Текст в столбцы для разделения запятыми
В этом примере полный адрес находится в столбце A, а улица, город, штат и почтовый индекс — в одной ячейке, разделенной запятыми.
- Запятые-разделители используются последовательно в каждом полном адресе.
- В нескольких записях, показанных ниже, запятые выделены зеленым цветом.
Чтобы разделить улицу, город, штат и почтовый индекс на отдельные столбцы без формул, вы можете использовать встроенную в Excel функцию преобразования текста в столбцы.
Разбить адрес с текстом на столбцы
- Выберите все полные адреса в столбце A.
- На ленте Excel перейдите на вкладку "Данные".
- Выберите команду "Текст в столбцы".
Мастер преобразования текста в столбцы
Откроется мастер преобразования текста в столбцы с шагом 1 из 3
- Для исходного типа данных выберите параметр "С разделителями".
- Нажмите "Далее".
На шаге 2 из 3 вы установите разделители для своих данных:
- На шаге 2 для разделителей добавьте галочку к запятой.
- Удалите все другие галочки.
- На панели предварительного просмотра показано, как адрес будет разбит на столбцы.
На шаге 3 из 3 вы установите окончательные данные для своих данных:
- На шаге 3 на панели предварительного просмотра щелкните заголовок столбца "Почтовый индекс".
- В разделе «Формат данных столбца» установите переключатель «Текст»
- Это предотвратит удаление начальных нулей из почтового индекса.
Функция Excel Text to Columns разбивает каждый адрес на столбцы, а полный адрес остается в столбце A.
Разделить адрес формулами
В этом примере полный адрес находится в столбце A, а улица, город, штат и почтовый индекс — в одной ячейке, разделенной запятыми.
- Запятые-разделители используются последовательно в каждом полном адресе.
- В нескольких записях, показанных ниже, запятые выделены зеленым цветом.
Чтобы разделить улицу, город, штат и почтовый индекс на отдельные столбцы, вы можете использовать формулы Excel. Подробнее см. ниже.
Обновить результаты
В этих формулах данные разделяются на столбцы, а части адреса, созданные из формул, по-прежнему связаны с исходным полным адресом.
- Если обновляется полный адрес, разделенные поля обновляются автоматически
- Вам не нужно вручную обновлять отдельные поля по отдельности.
Когда использовать метод формулы
На настройку формул уходит немного больше времени, чем на быструю заливку или текст в столбцы. Однако это того стоит, если вы планируете изменить ячейки «полного адреса» в будущем.
- Данные были импортированы с веб-сайта или из системы отчетности.
- Любые изменения адреса будут внесены в вашу копию списка в столбце полного адреса.
Формулы для поиска запятых
В каждом полном адресе есть 3 запятых-разделителя:
- После адреса
- После названия города
- После кода штата
Чтобы найти положение каждой запятой, в таблицу будут добавлены 3 новых столбца.
Именованная ячейка для разделителя
Сначала на листе в ячейке F1 создается именованный диапазон.
- Ячейка называется mySep, и в ней стоит запятая.
- Инструкции по присвоению имени ячейке см. на странице "Именованные диапазоны".
Эта именованная ячейка позволяет легко сделать несколько вещей:
- ссылка на ячейку в формулах рабочего листа
- при необходимости измените символ-разделитель позже, не меняя никаких формул
Формулы запятых
В таблицу адресов добавлены три новых столбца с заголовками: Cm1, Cm2, Cm3
Вот формулы в этих столбцах для нахождения позиций 1-й, 2-й и 3-й запятых в полном адресе.
- Cm1, в ячейке F4: =НАЙТИ(mySep,A4)
- Cm2, в ячейке G4: =НАЙТИ(mySep,A4,F4+1)
- Cm3, в ячейке H4: =НАЙТИ(mySep,A4,G4+1)
Все 3 формулы используют функцию НАЙТИ со следующими двумя аргументами:
- find_text: поиск символа-разделителя (mySep)
- within_text: полный адрес в ячейке A4.
Функция НАЙТИ имеет необязательный третий аргумент -- start_num
- Для cm1 третий аргумент опущен, поэтому поиск начинается с первого символа.
- Для cm2 начальным номером является позиция первой запятой (в F4) плюс 1.
- Для cm3 начальным номером является позиция второй запятой (в G4) плюс 1.
Формула адреса улицы
Чтобы вернуть почтовый адрес из полного адреса, формула использует ЛЕВЫЕ функции:
=ВЛЕВО(A4,F4-1)
Количество символов в почтовом адресе рассчитывается исходя из позиции первой запятой (в ячейке F4) минус 1.
Формула города
Чтобы вернуть название города из полного адреса, формула использует функцию MID
=СРЕДНЯЯ(A4,F4+1,G4-F4-1)
Функция MID имеет 3 аргумента:
- текст: полный адрес (A4)
- start_num: начальная позиция названия города – это позиция первой запятой (F4) плюс 1.
- num_chars: количество символов в названии города вычисляется из положения второй запятой (G4) минус положение первой запятой (F4) минус 1
Формула состояния
Чтобы вернуть код штата из полного адреса, в формуле используется функция MID. Она похожа на формулу города, но использует положения второй и третьей запятых
=СРЕДНЯЯ(A4,G4+1,H4-G4-1)
Функция MID имеет 3 аргумента:
- текст: полный адрес (A4)
- start_num: начальная позиция названия города — это позиция второй запятой (G4) плюс 1.
- num_chars: количество символов в названии города рассчитывается из положения третьей запятой (H4) минус положение второй запятой (G4) минус 1
Формула почтового индекса
Наконец, чтобы вернуть почтовый индекс, формула использует функции ПРАВИЛЬНО и ДЛСТР:
=ВПРАВО(A4,ДЛСТР(A4)-H4)
Количество символов в почтовом адресе рассчитывается из:
- количество символов в ячейке A4
- минус третья запятая (в ячейке H4).
Проблема разделения адреса в Excel
В своем еженедельном информационном бюллетене Excel я предложил читателям использовать формулы для разделения полного адреса на четыре столбца: почтовый адрес, город, штат и почтовый индекс.
Пример данных показан ниже, и вы можете загрузить рабочую книгу Excel, чтобы увидеть задачу и решения.
Ниже показана одна формула для каждого поля, а остальные — в образце книги.
Полный адрес
Адреса указаны в именованной таблице Excel, а полный адрес указан в столбце B. Данные не всегда так согласованы, но в этом примере есть некоторые символы, которые помогут разделить данные:
- После адреса улицы ставится дефис, а перед ним и после него ставится пробел.
- В конце названия города есть запятая и пробел (некоторые адреса также содержат запятую)
- Состояние — это двухбуквенный код в верхнем регистре с пробелом до и после него.
- Почтовый индекс состоит из 9 или 5 цифр (Примечание: почтовый индекс может начинаться с нуля)
Формула адреса улицы
В ячейке FullAddress почтовый адрес заканчивается знаком "-". Вот одна из формул, которая возвращает почтовый адрес.
В следующей формуле используется функция НАЛЕВО для возврата текста с левой стороны ячейки и функция НАЙТИ для подсчета количества символов:
- = ЛЕВЫЙ([@FullAddress], НАЙТИ("-",[@FullAddress])-2)
В этой формуле функция НАЙТИ получает точную позицию дефиса
Затем вычтите 2, чтобы скорректировать пробел и дефис
Наконец, используйте функцию LEFT, чтобы вернуть это количество символов слева от FullAddress.
=LEFT([@FullAddress], НАЙТИ("-",[@FullAddress])-2)
Формула города
В ячейке FullAddress город стоит после "-" и заканчивается запятой. Вот одна формула, которая возвращает город. Он использует функцию MID, которая возвращает текст на основе начальной позиции и количества символов:
- =MID([@FullAddress], LEN([@StreetAddress])+4 , FIND(",",SUBSTITUTE([@FullAddress],[@StreetAddress],""))-4 )
Исходная позиция
Чтобы получить начальную позицию, функция LEN получает длину StreetAddress, которая была рассчитана ранее. Затем добавьте к этому числу 4, чтобы скорректировать строку "-".
Количество символов
Для подсчета количества символов используются две функции: ПОДСТАВИТЬ и НАЙТИ
Функция ПОДСТАВИТЬ возвращает FullAddress с заменой StreetAddress пустой строкой
- ЗАМЕНИТЬ([@FullAddress],[@StreetAddress],"")
Функция НАЙТИ возвращает позицию запятой в этом сокращенном адресе, и 4 вычитается для корректировки строки "-".
- НАЙТИ(",",ПОДСТАВИТЬ([@FullAddress],[@StreetAddress],""))-4
Формула состояния
В ячейке FullAddress штат указывается после города и состоит из 2 символов. Вот одна формула, которая возвращает состояние. Он использует функцию MID, которая возвращает текст на основе начальной позиции и количества символов:
- =MID([@FullAddress], НАЙТИ([@City],[@FullAddress]) +LEN([@City])+2 , 2 )
Исходная позиция
Чтобы получить начальную позицию, функция НАЙТИ находит название города (ранее рассчитанное) в ячейке FullAddress.
Штат начинается после названия города, поэтому функция ДЛСТР вычисляет длину названия города. Затем к этому числу добавляется 2, чтобы учесть запятую и пробел.
Количество символов
Код штата всегда состоит из двух символов, поэтому это число вводится в формулу. Его не нужно вычислять.
=MID([@FullAddress], НАЙТИ([@City],[@FullAddress]) +LEN([@City])+2, 2 )
Формула почтового индекса
В ячейке FullAddress почтовый индекс находится справа после штата. Почтовый индекс всегда состоит из 5 или 9 цифр. Вот одна формула, которая возвращает почтовый индекс. Он использует функцию MID, которая возвращает текст на основе начальной позиции и количества символов:
- =MID([@FullAddress], НАЙТИ([@State],[@FullAddress])+3 , 9 )
Исходная позиция
Чтобы получить начальную позицию, функция НАЙТИ находит код штата (ранее рассчитанный) в ячейке FullAddress.
Затем к этому числу добавляется 3, чтобы скорректировать двухбуквенный код штата и пробел.
Количество символов
Почтовый индекс всегда состоит из 5 или 9 символов, поэтому в формулу вводится большее число (9). Его не нужно вычислять. Будет возвращено не более 9 символов, и это работает для обоих типов почтовых индексов.
=MID([@FullAddress], НАЙТИ([@State],[@FullAddress])+3, 9 )
Быстрая заливка или формулы
В этом задании несколько человек заявили, что будут использовать Flash Fill вместо формул для разделения адресов. Мгновенное заполнение было представлено в Excel 2013 и помогает извлекать информацию на основе закономерностей в ваших данных. Вы можете использовать его для размещения имен в обратном порядке, разделения даты и времени и многих других задач с данными.
Мгновенное заполнение подходит не для всех задач, но в некоторых случаях полезно:
- Плюсы Flash Fill: быстрый и простой способ извлечения данных. Никаких формул, замедляющих работу с большой книгой.
- Минусы мгновенного заполнения. Элементы не изменяются автоматически при обновлении исходных данных. Для данных требуется очень последовательный шаблон (без вариантов ЕСЛИ/ИЛИ, которые могла бы предоставить формула).
Вот как использовать мгновенное заполнение в задаче "Разделить адрес":
- Введите информацию об адресе в отдельных столбцах в первых двух строках (введите апостроф в начале почтового индекса, если он начинается с нуля)
- Затем щелкните ячейку C6, перейдите на вкладку "Данные" на ленте Excel и нажмите "Быстрое заполнение".
- Или используйте сочетание клавиш "Быстрая заливка" — Ctrl + E.
Примечание. Снимок экрана представляет собой анимированный gif-файл, поэтому он может работать не во всех браузерах.
Загрузить примеры файлов
Примеры разделения адресов. Чтобы просмотреть примеры разделения адресов для быстрого заполнения, преобразования текста в столбцы и формул на основе позиций запятых, загрузите книгу Примеры разделения адресов. Заархивированный файл имеет формат xlsx и не содержит макросов.
Испытание с разделением адресов. Чтобы ознакомиться с испытанием с разделением адресов и предлагаемыми решениями, загрузите книгу «Испытание с разделением адресов». Заархивированный файл имеет формат xlsx и не содержит макросов.
При работе с VBA в Excel может возникнуть необходимость разбить строку на разные части на основе разделителя.
Например, если у вас есть адрес, вы можете использовать функцию разделения VBA, чтобы получить разные части адреса, разделенные запятой (которая в данном случае будет разделителем).
SPLIT – это встроенная строковая функция в Excel VBA, которую можно использовать для разделения текстовой строки на основе разделителя.
Это руководство охватывает:
Функция Excel VBA SPLIT — синтаксис
Теперь, когда мы рассмотрели основы функции SPLIT, давайте рассмотрим несколько практических примеров.
Пример 1. Разделение слов в предложении
Допустим, у меня есть текст — «Быстрая коричневая лиса перепрыгивает через ленивую собаку».
Я могу использовать функцию SPLIT, чтобы получить каждое слово этого предложения как отдельный элемент в массиве.
Код ниже будет для этого:
Хотя код не делает ничего полезного, он поможет вам понять, что делает функция Split в VBA.
Функция Split разделяет текстовую строку и присваивает каждому слову массив Result.
Итак, в этом случае:
- Результат(0) сохраняет значение «The»
- Результат(1) сохраняет значение «Быстро»
- Результат(2) сохраняет значение "Коричневый" и т. д.
В этом примере мы указали только первый аргумент — разделяемый текст. Поскольку разделитель не указан, в качестве разделителя по умолчанию используется пробел.
Важное примечание:
- Функция VBA SPLIT возвращает массив, который начинается с базы 0.
- Когда результат функции SPLIT присваивается массиву, этот массив должен быть объявлен как тип данных String. Если вы объявите его как тип данных Variant, он покажет ошибку несоответствия типа). Обратите внимание, что в приведенном выше примере я объявил Result() как тип данных String.
Пример 2. Подсчет количества слов в предложении
Вы можете использовать функцию РАЗДЕЛИТЬ, чтобы получить общее количество слов в предложении. Хитрость здесь заключается в подсчете количества элементов в массиве, который вы получаете, когда разделяете текст.
Приведенный ниже код покажет окно сообщения с количеством слов:
В этом случае функция UBound сообщает нам верхнюю границу массива (т. е. максимальное количество элементов в массиве). Поскольку основание массива равно 0, для получения общего количества слов добавляется 1.
Похожий код можно использовать для создания пользовательской функции в VBA, которая будет принимать текст в качестве входных данных и возвращать количество слов.
Приведенный ниже код создаст эту функцию:
После создания функцию WordCount можно использовать так же, как и любую другую обычную функцию.
Эта функция также обрабатывает начальные, конечные и двойные пробелы между словами. Это стало возможным благодаря использованию функции TRIM в коде VBA.
Если вы хотите узнать больше о том, как эта формула работает для подсчета количества слов в предложении, или хотите узнать о способе подсчета слов с помощью формулы, отличной от VBA, ознакомьтесь с этим руководством.
Пример 3. Использование разделителя, отличного от пробела
В предыдущих двух примерах мы использовали только один аргумент в функции SPLIT, а остальные были аргументами по умолчанию.
Если вы используете какой-либо другой разделитель, вам необходимо указать его в формуле SPLIT.
В приведенном ниже коде функция SPLIT возвращает массив, основанный на запятой в качестве разделителя, а затем показывает сообщение с каждым словом в отдельной строке.
В приведенном выше коде я использовал цикл For Next, чтобы пройтись по каждому элементу массива Result и назначить его переменной DisplayText.
Пример 4. Разделение адреса на три части
С помощью функции SPLIT вы можете указать количество разделений, которые вы хотите получить. Например, если я ничего не укажу, каждый экземпляр разделителя будет использоваться для разделения строки.
Но если я укажу в качестве предела 3, то строка будет разделена только на три части.
Например, если у меня есть следующий адрес:
Я могу использовать функцию Split в VBA, чтобы разделить этот адрес на три части.
Одним из практических применений этого может быть, когда вы хотите разделить однострочный адрес в формате, показанном в окне сообщения. Затем вы можете создать пользовательскую функцию, которая возвращает адрес, разделенный на три части (каждая часть в новой строке).
Для этого подойдет следующий код:
После того как у вас есть этот код в модуле, вы можете использовать функцию (ThreePartAddress) в рабочей книге, как и любую другую функцию Excel.
Эта функция принимает один аргумент — ссылку на ячейку с адресом.
Обратите внимание: чтобы результирующий адрес отображался в трех разных строках, необходимо применить к ячейкам формат переноса текста (он находится на вкладке «Главная» в группе «Выравнивание»). Если формат «Перенос текста» не включен, вы увидите весь адрес в виде одной строки.
Пример 5. Получение названия города из адреса
С помощью функции Split в VBA вы можете указать, какую часть результирующего массива вы хотите использовать.
Например, предположим, что я разбиваю следующий адрес на основе запятой в качестве разделителя:
Результирующий массив будет выглядеть примерно так, как показано ниже:
Поскольку это массив, я могу отображать или возвращать определенную часть этого массива.
Ниже приведен код пользовательской функции, в которой вы можете указать число, и она вернет этот элемент из массива. Например, если мне нужно название штата, я могу указать 3 (поскольку это третий элемент в массиве).
Приведенная выше функция принимает два аргумента: ссылку на ячейку с адресом и номер элемента, который вы хотите вернуть. Функция Split разделяет элементы адреса и присваивает их переменной Result.
Затем он возвращает номер элемента, который вы указали в качестве второго аргумента. Обратите внимание, что поскольку основание равно 0, ElementNumber-1 используется для возврата правильной части адреса.
Эта настраиваемая формула лучше всего подходит, если у вас одинаковый формат для всех адресов, т. е. город всегда упоминается после двух запятых. Если данные несовместимы, вы не получите желаемого результата.
Вы можете еще больше упростить код, как показано ниже:
В приведенном выше коде вместо использования переменной Result возвращается только указанный номер элемента.
Поэтому, если у вас есть Split("Доброе утро")(0), он вернет только первый элемент, то есть "Доброе".
Аналогично, в приведенном выше коде возвращается только указанный номер элемента.
Читайте также: