Jestem trochę spóźniony na imprezę, ale może to może pomóc. Link w pytaniu miał podobną formułę, ale moja używa instrukcji IF (), aby pozbyć się błędów.
Jeśli nie boisz się klawiszy Ctrl + Shift + Enter, możesz całkiem dobrze poradzić sobie z formułą tablicową.
Ciąg (w komórce A1): „one.two.three.four”
Formuła:
{=MAX(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)))} use Ctrl+Shift+Enter
Wynik: 14
Pierwszy,
ROW($1:$99)
zwraca tablicę liczb całkowitych od 1 do 99: {1,2,3,4,...,98,99}
.
Kolejny,
MID(A1,ROW($1:$99),1)
zwraca tablicę ciągów o długości 1 znalezionych w ciągu docelowym, a następnie zwraca puste ciągi po osiągnięciu długości ciągu docelowego: {"o","n","e",".",..."u","r","","",""...}
Kolejny,
IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99))
porównuje każdy element w tablicy z ciągiem „.” i zwraca indeks znaku w ciągu lub FAŁSZ:{FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}
Ostatni, ubiegły, zeszły,
=MAX(IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99)))
zwraca maksymalną wartość tablicy: 14
Zaletą tej formuły jest to, że jest krótka, stosunkowo łatwa do zrozumienia i nie wymaga żadnych unikalnych znaków.
Wady to wymagane użycie Ctrl + Shift + Enter i ograniczenie długości łańcucha. Można to obejść za pomocą wariantu pokazanego poniżej, ale ta odmiana korzysta z funkcji OFFSET (), która jest funkcją zmienną (czytaj: wolno).
Nie jestem pewien, jaka jest szybkość tej formuły w porównaniu z innymi.
Wariacje:
=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!