ฉันไปงานเลี้ยงช้านิดหน่อย แต่นี่อาจช่วยได้ ลิงก์ในคำถามนั้นมีสูตรที่คล้ายกัน แต่ฉันใช้คำสั่ง 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!