2017-02-08 8 views
2

У меня есть столбец данных, существующий из имен, который может содержать или не содержать префикс фамилии. Эти префиксы могут существовать из нескольких слов. У меня есть список всех возможных префиксов, но теперь мне нужно разделить префикс и фамилию и сделать 2 столбца с данными.Сплит-префикс и фамилия (на основе данных массива)

То, что я писал формулу первенствовать как следующее:

=IF(
    RIGHT(A1;7) = " van de" 
; 
    RIGHT(A1;6) 
; 
    IF(
    RIGHT(A1;4) = " van" 
    ; 
    RIGHT(A1;3) 
    ; 
    IF(
     RIGHT(A1;3) = " de" 
    ; 
     RIGHT(A1;2) 
    ; 
     --Insert more nested If statements here-- 
    ) 
    ) 
) 

Данные фамилиям могут выглядеть следующим образом:

Name1 van de 
Name1 van 
Name1 
Name1 Name2 van 
Name1-Name2 Name3 van de 
Name1 Name2 Name3 

То, что я хочу:

OriginalName | Name | Prefix 
-----------------|--------|---------- 
     a b  | a | b 
     a b c  | a | b c 

Во-первых, это довольно неэффективный метод, но я автоматизировал создание этой формулы, так что это не проблема. nymore. Теперь я обнаружил, что существует ограничение на вложенные операторы If, которые могут иметься, и я должен превысить этот предел.

Как решить эту проблему?

У меня есть массив с возможными префиксами. Может быть, это поможет?

+0

Храните все префиксы в цикле массива (или в диапазоне) через указанный диапазон со строками, нуждающимися в манипулировании и прохождении через массив, и выполните команду chekc, которая похожа на «if cell = array (i) then do soemthing» –

+0

Вы делаете это как формулу внутри ячейки или макрос? Всегда есть ли пробелы между префиксом и остальным именем? Является ли «тело» названия всегда одним словом? – Werrf

+0

@DougCoats Это будет означать, что для каждого имени (около 9000) он должен проверить, есть ли один из ~ 20 префиксов, верно? Разве это не займет много времени? – Grafit

ответ

2

Я сделал предположение о том, что вы хотели, чтобы отделить «фургон» и «де» префиксы от остальной части имени. Если я неправильно понял, пожалуйста, предоставьте больше примеров вашей проблемы/вопрос ...

Следующим решения требует вспомогательного столбца, чтобы определить, где «Приставка» начинается, но вы можете скрыть его, если это необходимо:

enter image description here

Прежде всего, введите мои значения в A8:A9 (van; de) в любом месте и назовите его prefix, поэтому его можно найти в следующих формулах.

Формула в C1 является формула массива (использование Ctrl + Сдвиг + Введите):

=MIN(IF(ISNUMBER(SEARCH(prefix,A1)),SEARCH(prefix,A1))) 

Формула в D1 и E1 или нормальных формул:

=IF(C1>0,LEFT(A1,C1-2),A1) 
=IF(C1>0,MID(A1,C1,LEN(A1)),"") 
+0

Работает очень хорошо. Один вопрос. Когда чье-то имя «Name1 Demas Name3», формула считает, что «Demas Name3» является префиксом. Есть ли способ убедиться, что он не смешивает это? – Grafit

+0

Поместите пробел в конец значения 'de' в вашем массиве 'prefix'. Затем измените формулу ** массива ** на '= MIN (IF (ISNUMBER (SEARCH (префикс, A2 &" ")), SEARCH (префикс, A2 &" ")))'. ... _ОЙ_ ...и, возможно, переключить функцию «ПОИСК» для функции «FIND» для ** чувствительного к регистру ** поиска ... ну, это только поможет немного ... – reasra

+0

Получил это, чтобы работать, спасибо большое! – Grafit

2

Поместите свой список , чтобы самой длинной фамилией кратчайшему. Я поместил шахту в E1: E3.

Затем используйте эту формулу массива:

=TRIM(IFERROR(SUBSTITUTE(A1,INDEX($E$1:$E$3,MATCH(TRUE,ISNUMBER(SEARCH($E$1:$E$3,A1)),0)),""),A1)) 

Тогда, чтобы получить Фамилия:

=IFERROR(INDEX($E$1:$E$3,MATCH(TRUE,ISNUMBER(SEARCH($E$1:$E$3,A1)),0)),"") 

Будучи массива формул, они должны быть подтверждены с помощью Ctrl-Shift-Enter вместо Enter при выходе режим редактирования. Если все сделано правильно, Excel поместит {} вокруг формулы.

enter image description here

+0

Эта формула - большая помощь! Это определенно идет в правильном направлении. Теперь я также хочу только префиксы в другом столбце. Могу ли я это сделать с такой же формулой? – Grafit

+0

Уверен, просто поместите функцию 'INDEX()' в другой столбец и введите его с помощью Ctrl-Shift-Enter, когда он вернет фамилию функции SUBSTITUTE. –

+0

Также нецелесообразно на этом сайте изменять вопрос с новыми запросами после получения ответов, поскольку он аннулирует ответы и открывает их для пустых голосов. Пожалуйста, верните свой вопрос на оригинал. Если мой комментарий выше не отвечает на ваш второй запрос, задайте новый вопрос. @Grafit –

1

Я знаю, что на это уже был дан ответ, но я сделал это вчера и не успел отправить его (должен был бежать за автобусом).

значения

Все префиксов имеют пространство перед ними ...

enter image description here

Колонка B формула (формула массива - Ctrl + Сдвиг + Введите в строке формул) =INDEX(SUBSTITUTE(A1,Prefix,""),MATCH(SMALL(LEN(SUBSTITUTE(A1,Prefix,"")),1),LEN(SUBSTITUTE(A1,Prefix,"")),0))

Формула колонки C - =TRIM(SUBSTITUTE(A1,B1,""))