#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 игнорировать ошибки.