Разделение данных в Excel с помощью формул - PullRequest
0 голосов
/ 04 февраля 2020

Я должен разделить следующий снимок экрана на соответствующие столбцы вверху. Я смог выяснить столбец D & F; Однако у меня возникли проблемы с разделением остальной части проблемы.


Ограничение:

  1. Я не могу использовать формат текста в столбец.

  2. Почтовые индексы должны состоять из 5 цифр -> ведущий 0 теряется при переводе строки в числа

  3. Мне нужно использовать формулы вдоль строки вправо / влево / в середине / найти / найти / и т. д. c.


Формула роли:

  =MID(A2, SEARCH(",",A2) + 1, SEARCH(",",A2,SEARCH(",",A2)+1) - SEARCH(",",A2) - 1)

Город:

  =LEFT(A2,FIND(",",A2)-1)

enter image description here

Ответы [ 2 ]

3 голосов
/ 04 февраля 2020

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

=TRIM(MID(SUBSTITUTE(","&$A2,",",REPT(" ",199)),199*1,199))

В зависимости от вашего требования измените номер 1 в 199*1 на номер поля, т.е.

первое поле соответствует 1

второе поле соответствует 2

и т. Д. ...

Реализация для первой строки данных и затем копирование вниз.

Редактировать:

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

=TRIM(MID(SUBSTITUTE(","&$A2,",",REPT(" ",199)),COLUMNS($A$1:A$1)*199,199))

Копирование вниз и поперек!

** Edit2: **

Для определения имени и фамилии в приведенной выше формуле потребуется добавить LEFT или RIGHT вместе с той же SUBSTITUTE & TRIM конструкцией.

Имя: =TRIM(LEFT(SUBSTITUTE(TRIM(MID(SUBSTITUTE(","&$A2,",",REPT(" ",199)),3*199,199))," ",REPT(" ",199)),199))

Фамилия: =TRIM(RIGHT(SUBSTITUTE(TRIM(MID(SUBSTITUTE(","&$A2,",",REPT(" ",199)),3*199,199))," ",REPT(" ",199)),199))

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

0 голосов
/ 04 февраля 2020

Не просто, но если у вас Excel 2013+ с функцией FILTERXML, вы можете использовать следующие формулы:

First Name: =LEFT(FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[3]"),
FIND(" ",FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[3]"))-1)

Last Name: =MID(FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[3]"),
FIND(" ",FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[3]"))+1,99)

Role:  =FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[2]")

Branch:  =FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[6]")

City:  =FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[1]")

State:  =FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[4]")

Zip:  =TEXT(FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[5]"),"00000")
  • Используя запятые для определения узлов, мы создаем XML
  • Затем мы используем параметр позиции \\s[postion], чтобы решить, какой узел извлечь
  • Мы также ищем space, чтобы отделить первое от фамилий.
    • Как написано, первое слово будет извлечено как имя, а второе и все последующие слова - как фамилия.
    • Если у вас есть записи только с одним словом просто измените $A1 в этих двух формулах на $A1 & " "
  • Мы также использовали функцию TEXT для форматирования Zip как 5 цифр. Если у вас 5 + 4, вам необходимо внести соответствующие изменения в код формата.

enter image description here

...