Это один протестирована и работает (на основе оригинального поста Брэда):
=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1," ","|",
LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))
Если ваши оригинальные строки могут содержать трубы «|» символ, затем замените оба в приведенном выше символе другим символом, который не будет отображаться в вашем источнике. (Я подозреваю, что оригинал Брэда был сломан, потому что в переводе был удален непечатаемый персонаж).
Бонус: Как это работает (справа налево):
LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
– графа пространств в исходной строке
SUBSTITUTE(A1," ","|", ...)
– заменяет только окончательное пространство с |
FIND("|", ...)
– находит абсолютное положение, которое было заменено |
(это было окончательное пространство)
Right(A1,LEN(A1) - ...))
– Возвращает все cha racters после этого |
EDIT: для учета случая, когда исходный текст не содержит пробелы, добавьте следующие строки в начале следующей формуле:
=IF(ISERROR(FIND(" ",A1)),A1, ...)
делает всю формулу Сейчас:
=IF(ISERROR(FIND(" ",A1)),A1, RIGHT(A1,LEN(A1) - FIND("|",
SUBSTITUTE(A1," ","|",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))))
Или вы можете использовать синтаксис =IF(COUNTIF(A1,"* *")
другой версии.
Когда исходная строка может содержать пробел в последней позиции добавить декоративную функцию, считая все пространства: Создание функции следующего:
=IF(ISERROR(FIND(" ",B2)),B2, RIGHT(B2,LEN(B2) - FIND("|",
SUBSTITUTE(B2," ","|",LEN(TRIM(B2))-LEN(SUBSTITUTE(B2," ",""))))))
Мне интересно, почему у вас нет искусственного ограничения VBA? – EBGreen 2008-12-08 17:41:18
Я могу легко решить это с помощью VBA, но мне любопытно, есть ли решение, отличное от VBA. VBA имеет тенденцию к штрафам за производительность для больших наборов данных. – 2008-12-08 18:20:00
Как обычно, два ответа действительно выделяются, и мне сложно определить, какой из них выбрать как правильный ответ. В этом случае и Jon, и BradC (с помощью Brad) разработали правильные рабочие решения. – 2008-12-08 18:34:31