Я немного опоздал на вечеринку, но, возможно, это могло бы помочь. Ссылка в вопросе имела похожую формулу, но моя использует оператор IF (), чтобы избавиться от ошибок.
Если вы не боитесь Ctrl + Shift + Enter, вы можете справиться с формулой массива.
Строка (в ячейке A1): "one.two.three.four"
Формула:
{=MAX(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)))} use Ctrl+Shift+Enter
Результат: 14
Первый,
ROW($1:$99)
возвращает массив целых чисел от 1 до 99: {1,2,3,4,...,98,99}
.
Следующий,
MID(A1,ROW($1:$99),1)
возвращает массив строк длиной 1, найденных в целевой строке, а затем возвращает пустые строки после достижения длины целевой строки: {"o","n","e",".",..."u","r","","",""...}
Следующий,
IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99))
сравнивает каждый элемент в массиве со строкой "." и возвращает либо индекс символа в строке, либо FALSE:{FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}
Последний,
=MAX(IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99)))
возвращает максимальное значение массива: 14
Преимущества этой формулы в том, что она короткая, относительно простая для понимания и не требует каких-либо уникальных символов.
Недостатками являются обязательное использование Ctrl + Shift + Enter и ограничение длины строки. Это можно обойти с помощью варианта, показанного ниже, но этот вариант использует функцию OFFSET (), которая является изменчивой (читай: медленной) функцией.
Не уверен, что скорость этой формулы против других.
Варианты:
=MAX((MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1)=".")*ROW(OFFSET($A$1,,,LEN(A1)))) works the same way, but you don't have to worry about the length of the string
=SMALL(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)),2) determines the 2nd occurrence of the match
=LARGE(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)),2) determines the 2nd-to-last occurrence of the match
=MAX(IF(MID(I16,ROW($1:$99),2)=".t",ROW($1:$99))) matches a 2-character string **Make sure you change the last argument of the MID() function to the number of characters in the string you wish to match!