Мне нужно найти последний пробел в ячейке XLS

17

У меня есть лист Excel с текстовыми значениями, например, в A1: «Это текст». Мне нужно найти позицию последнего символа пробела. Есть ли формула Excel, которая даст мне желаемый результат? Я пробовал НАЙТИ и ПОИСК, однако они начинаются слева, мне нужно начать справа.

Дер
источник
Межсайтовая копия примерно того же урожая: stackoverflow.com/q/18617349
Матье К.

Ответы:

28

Если под пустым значением вы подразумеваете «пробел», а под XLS вы имеете в виду Excel, тогда вы можете использовать эту формулу (при условии, что тест, в котором вы хотите найти последний пробел, находится в A1):

=FIND("☃",SUBSTITUTE(A1," ","☃",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))

Вы можете разделить его на 3 части:

  • LEN(A1)-LEN(SUBSTITUTE(A1," ",""))дает вам количество пробелов, давайте назовем это x,
  • SUBSTITUTE(A1," ","☃",[x])заменит xпространство (так последнее) снеговиком,
  • FIND("☃",[...])даст вам положение снеговика. Какая позиция последнего пробела.
m4573r
источник
Работает отлично. Благодарю. Мне потребовалось некоторое время, чтобы понять, почему это работает, несмотря на ваши объяснения :)
Dheer
5
+1 за приятный, подробный ответ и самого креативного персонажа на замену.
Даг Глэнси
Также работает как в LibreOffice Calc, так и в Google Sheets.
Матье К.
8

Вот еще один способ, любые символы разрешены в A1 (даже снеговики!)

=LOOKUP(2^15,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))))

FIND имеет третий аргумент, который определяет начальную позицию поиска, если вы примените массив целочисленных значений от 1 до n (где n - длина A1) к этому параметру, вы получите массив обратно с последним числом, являющимся позицией последний пробел

LOOKUPзатем извлекает это число путем поиска значения, большего, чем любое значение, которое может быть найдено в этом массиве, и в этом случае будет найдено последнее число

В Excel 2010или позже вы также можете использовать AGGREGATEфункцию, подобную этой

=AGGREGATE(14,6,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))),1)

FINDвозвращает тот же массив, что и раньше, и используя 14 в качестве 1-го аргумента AGGREGATEи 1 в качестве последнего, вы получите наибольшее значение в массиве, игнорируя при этом ошибки [6]

Барри Гудини
источник
1
прекрасно работает. Хотя я был [давным] давно разработчиком, я до сих пор не могу понять, как и почему работает
INDIRECT
1
Предполагая, что A1 имеет 12 символов, эта часть "1:"&LEN(A1)оценивается как «1:12» - это строка, которую ROW не может обработать, но INDIRECT преобразует строку в допустимую ссылку, которую ROW может обработать, поэтому ROW (1:12) дает вам {1 ; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12}
Барри Гудини
Спасибо за разъяснения. Имеет ли смысл сейчас Что означает найти сам неявно работает с массивом и запускается на выполнение для каждого значения в исходное положение ...
Дер
Правильно, FIND возвращает массив, например, если A1 содержит, barry larry houdiniFIND вернет этот массив, {6;6;6;6;6;6;12;12;12;12;12;12;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}и LOOKUP и / или AGGREGATE получат последнее / наибольшее числовое значение из этого, то есть 12
Барри Гудини
Примечание: это работает в LibreOffice Calc. Он не работает в Google Sheets, а обнаруживает первое вхождение.
Матье К.