Tôi đến bữa tiệc muộn một chút, nhưng có lẽ điều này có thể giúp ích. Liên kết trong câu hỏi có công thức tương tự, nhưng tôi sử dụng câu lệnh IF () để loại bỏ lỗi.
Nếu bạn không sợ Ctrl + Shift + Enter, bạn có thể làm khá tốt với công thức mảng.
Chuỗi (trong ô A1): "one.two.three.four"
Công thức:
{=MAX(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)))} use Ctrl+Shift+Enter
Kết quả: 14
Đầu tiên,
ROW($1:$99)
trả về một mảng các số nguyên từ 1 đến 99 : {1,2,3,4,...,98,99}
.
Kế tiếp,
MID(A1,ROW($1:$99),1)
trả về một chuỗi các chuỗi có độ dài 1 được tìm thấy trong chuỗi đích, sau đó trả về các chuỗi trống sau khi đạt được độ dài của chuỗi mục tiêu: {"o","n","e",".",..."u","r","","",""...}
Kế tiếp,
IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99))
so sánh từng mục trong mảng với chuỗi "." và trả về chỉ mục của ký tự trong chuỗi hoặc FALSE:{FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}
Cuối cùng,
=MAX(IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99)))
trả về giá trị tối đa của mảng: 14
Ưu điểm của công thức này là nó ngắn, tương đối dễ hiểu và không yêu cầu bất kỳ ký tự duy nhất.
Nhược điểm là yêu cầu sử dụng Ctrl + Shift + Enter và giới hạn về độ dài chuỗi. Điều này có thể được xử lý xung quanh với một biến thể được hiển thị bên dưới, nhưng biến thể đó sử dụng hàm OFFSET () là hàm biến động (đọc: chậm).
Không chắc chắn tốc độ của công thức này là gì so với những người khác.
Biến thể:
=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!