Формула Excel: разделение текста на массив -

Содержание

Общая формула

=FILTERXML(""&SUBSTITUTE(A1,",","")&"","//y")

Резюме

Чтобы разделить текст с помощью разделителя и преобразовать результат в массив, вы можете использовать функцию FILTERXML с помощью функций SUBSTITUTE и TRANSPOSE. В показанном примере формула в D5:

=TRANSPOSE(FILTERXML(""&SUBSTITUTE(B5,",","")&"","//y"))

Примечание. FILTERXML недоступен в Excel на Mac или в Excel Online.

Примечание: я узнал об этом трюке от Билла Джелен в видео MrExcel.

Объяснение

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

В показанном примере у нас есть несколько текстовых строк, разделенных запятыми, например:

"Jim,Brown,33,Seattle,WA"

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

Первая задача - добавить к этому тексту разметку XML, чтобы его можно было проанализировать как XML с помощью функции FILTERXML. Мы собираемся произвольно сделать каждое поле в тексте элементом, заключенным с родительским элементом. Начнем с функции ЗАМЕНА здесь:

SUBSTITUTE(B5,",","")

Результатом SUBSTITUTE является текстовая строка, подобная этой:

"JimBrown33SeattleWA"

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

""&SUBSTITUTE(B5,",","")&""

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

" Jim Brown 33 Seattle WA "

Этот текст доставляется непосредственно в функцию FILTERXML как аргумент xml с выражением Xpath «// y»:

FILTERXML("JimBrown33SeattleWA","//y")

Xpath - это язык синтаксического анализа, и «// y» выбирает все элементы. Результатом FILTERXML является такой вертикальный массив:

("Jim";"Brown";33;"Seattle";"WA")

Поскольку в этом случае нам нужен горизонтальный массив, мы оборачиваем функцию TRANSPOSE вокруг FILTERXML:

=TRANSPOSE(("Jim";"Brown";33;"Seattle";"WA"))

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

("Jim","Brown",33,"Seattle","WA")

который попадает в диапазон D5: H5 в Excel 365.

Интересные статьи...