Я трохи запізнююся на вечірку, але, можливо, це могло б допомогти. Посилання у питанні мала аналогічну формулу, але моя використовує оператор 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!