Разделить текст с последнего пробела перед символом 35-й позиции в Excel

#excel #excel-formula #formula

#excel #excel-формула #формула

Вопрос:

например, название поставщика — NANJING BANGSHING PRECISION MACHINERY TE

Я хочу разбить это имя с последнего пробела перед 35-й позицией.

В этом случае 35-я позиция — ‘E’ в МАШИННОМ ОБОРУДОВАНИИ, и я хочу разделить ее с пробелом перед ней.

т.е.

 NANJING BANGSHING PRECISION - Cell A1
MACHINERY TE - Cell B2     
  

В настоящее время я нахожу позицию 2-го последнего пробела (для любого имени поставщика, превышающего 35 символов, поскольку имена не длиннее 70 символов), чтобы выполнить свою задачу. Однако это не очень хорошая практика.

 =FIND("^"|SUBSTITUTE(A1|" "|"^"|LEN(A1)-LEN(SUBSTITUTE(A1|" "|""))-1))
  

чтобы найти позицию

 NANJING BANGSHING PRECISION - Cell A1
MACHINERY TE - Cell B2
  

Ответ №1:

AGGREGATE может возвращать позицию последнего пробела перед 35-й позицией. Используйте с ЗАМЕНОЙ для удаления ненужных символов.

 'first part
=REPLACE(A2, AGGREGATE(14, 7, ROW($1:$35)/(MID(A2, ROW($1:$35), 1)=" "), 1), LEN(A2), "")
'second part
=REPLACE(A2, 1, AGGREGATE(14, 7, ROW($1:$36)/(MID(A2, ROW($1:$36), 1)=" "), 1), "")
  

Было немного неясно, что делать, если 35-я позиция на самом деле была пробелом. В приведенном выше примере он используется как точка. Если это нежелательное поведение, измените 35 на 34.

Комментарии:

1. Это сработало как шарм… Спасибо за помощь. 🙂 Просто нужно понять, как формула работает со строкой и агрегатной функцией. Буду признателен, если вы сможете помочь мне получить это.

2. строка (1:35) используется для получения ряда чисел от 1 до 35. Все, что является пробелом, является номером позиции; все остальное является ошибкой. 14 в Aggregate занимает наибольшее из этих чисел, 7 указывает Aggregate игнорировать ошибки.