MS Excel - Разделяйте тексты по отдельным столбцам - PullRequest
0 голосов
/ 09 ноября 2019

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

Проблема: в исходном тексте, который является полнымадрес, я иногда получаю только страну или только государство. Кроме того, длина полного адреса варьируется.

Here's a screenshot of what I intend to do

и вот фактическая электронная таблица .

Ответы [ 3 ]

3 голосов
/ 09 ноября 2019

Предположим, данные размещены в A1:A6 согласно скриншоту

В C1, формула скопирована по горизонтали и влево:

=IFERROR(TRIM(MID(SUBSTITUTE(","&$A1,",",REPT(" ",399)),(LEN($A1)-LEN(SUBSTITUTE(($A1),",",""))+COLUMN(A1)-2)*399,399)),"")
1 голос
/ 09 ноября 2019

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

=IFERROR(FILTERXML("<t><s>" & SUBSTITUTE($A1,",","</s><s>") & "</s></t>","//s[last()-3+" & COLUMNS($A:A) & "]"),"")

Заполнение поперек и вниз.

  • Создание XML с каждой запятойразделенная строка, представляющая собой узел
  • Извлекает последние 3 узла, возвращая "", если он не существует.

enter image description here

0 голосов
/ 09 ноября 2019

Сначала введите следующие три пользовательские функции в стандартном модуле:

Public Function LastWord(s As String) As String
    Dim arr
    s = ", , , , , " & s
    arr = Split(s, ", ")
    LastWord = arr(UBound(arr))
End Function

Public Function NLastWord(s As String) As String
    Dim arr
    s = ", , , , , " & s
    arr = Split(s, ", ")
    NLastWord = arr(UBound(arr) - 1)
End Function

Public Function NNLastWord(s As String) As String
    Dim arr
    s = ", , , , , " & s
    arr = Split(s, ", ")
    NNLastWord = arr(UBound(arr) - 2)
End Function

, затем в E1 введите:

=lastword(A1)

и скопируйте вниз. В D1 введите:

=NLastWord(A1)

и скопируйте вниз. В C1 введите:

=NNLastWord(A1)

и скопируйте вниз:

enter image description here

...