Thep Excel

Text.PositionOf – หาตำแหน่งข้อความ

หาตำแหน่งของข้อความย่อยในข้อความหลัก (0-indexed) โดยคืนค่า -1 หากไม่พบ

=Text.PositionOf(text as text, substring as text, optional occurrence as nullable number, optional comparer as nullable function) as any

By ThepExcel AI Agent
3 December 2025

Function Metrics


Popularity
6/10

Difficulty
3/10

Usefulness
6/10

Syntax & Arguments

=Text.PositionOf(text as text, substring as text, optional occurrence as nullable number, optional comparer as nullable function) as any

Argument Type Required Default Description
text text Yes ข้อความหลักที่ต้องการค้นหา
substring text Yes ข้อความย่อยที่ต้องการหาตำแหน่ง
occurrence number or Occurrence value Optional Occurrence.First Occurrence.First (ค่าเริ่มต้น) = หาตำแหน่งแรก, Occurrence.Last = หาตำแหน่งสุดท้าย
comparer function Optional Comparer.Ordinal (case-sensitive) ฟังก์ชันสำหรับควบคุมการเปรียบเทียบ เช่น Comparer.Ordinal (case-sensitive), Comparer.OrdinalIgnoreCase (case-insensitive)

Examples

หาตำแหน่งแรกของข้อความ
Text.PositionOf("Hello, World!", "o")
ตัว 'o' ปรากฏครั้งแรกที่ตำแหน่ง Index 4 (H=0, e=1, l=2, l=3, o=4)
Power Query Formula:

=Text.PositionOf("Hello, World!", "o")

Result:

4

หาตำแหน่งเมื่อไม่พบข้อความ
Text.PositionOf("Hello, World!", "xyz")
ไม่พบ 'xyz' ในข้อความจึงคืนค่า -1
Power Query Formula:

=Text.PositionOf("Hello, World!", "xyz")

Result:

-1

หาตำแหน่งสุดท้าย (Occurrence.Last)
let Text = "apple apple apple", Position = Text.PositionOf(Text, "apple", Occurrence.Last) in Position
หา "apple" ตัวสุดท้ายที่ตำแหน่ง 12 (ครั้งแรกที่ 0, ครั้งที่สองที่ 6, ครั้งที่สามที่ 12)
Power Query Formula:

let
    Text = "apple apple apple",
    Position = Text.PositionOf(Text, "apple", Occurrence.Last)
in
    Position

Result:

12

ค้นหา Case-Insensitive
let Text = "Hello World", Position = Text.PositionOf(Text, "HELLO", Occurrence.First, Comparer.OrdinalIgnoreCase) in Position
ค้นหา "HELLO" โดยไม่สนใจขนาดตัวอักษร พบที่ตำแหน่ง 0
Power Query Formula:

let
    Text = "Hello World",
    Position = Text.PositionOf(Text, "HELLO", Occurrence.First, Comparer.OrdinalIgnoreCase)
in
    Position

รวมกับ Text.Range เพื่อแยกข้อความ
let FullText = "Name: John Doe", DelimiterPos = Text.PositionOf(FullText, ": "), Name = Text.Range(FullText, DelimiterPos + 2) in Name
หาตำแหน่งของ ": " จากนั้นแยกข้อความหลังจากตัวคั่นออกมา
Power Query Formula:

let
    FullText = "Name: John Doe",
    DelimiterPos = Text.PositionOf(FullText, ": "),
    Name = Text.Range(FullText, DelimiterPos + 2)
in
    Name

Result:

"John Doe"

FAQs

ความแตกต่างระหว่าง Text.PositionOf และ Text.Contains คืออะไร?

Text.Contains เพียงแล้วบอกว่าข้อความย่อยอยู่ในข้อความหรือไม่ (true/false) ส่วน Text.PositionOf บอกตำแหน่งที่แน่นอน ถ้าไม่พบ Text.PositionOf คืนค่า -1

ทำไมการเรียกฟังก์ชันคืนค่า -1?

ข้อความย่อยที่คุณค้นหาไม่พบในข้อความหลัก ลองตรวจสอบการสะกดและพิจารณาใช้ Comparer.OrdinalIgnoreCase หากต้องการค้นหาแบบไม่สนใจขนาดตัวอักษร

Index 0 หมายความว่าอะไร?

Index 0 คือตำแหน่งของตัวอักษรตัวแรก ดังนั้น Index 0 = ตัวแรก, Index 1 = ตัวที่สอง เป็นต้น (0-indexed system)

ฉันต้องการหาตำแหน่งที่สอง ทำไงดี?

ปัจจุบัน Text.PositionOf รองรับเฉพาะ Occurrence.First และ Occurrence.Last หากต้องการตำแหน่งที่สองให้ใช้ Text.PositionOfAny หรือสร้าง Custom Function ด้วย List.FindIndex

Resources & Related

Additional Notes

Text.PositionOf ใช้สำหรับหาตำแหน่งแรก (หรือการเกิดขึ้นที่ระบุ) ของข้อความย่อย (substring) ภายในข้อความหลัก นับตำแหน่งจากตัวอักษรตัวแรก (Index 0)

ที่เจ๋งคือ ฟังก์ชันนี้รองรับการค้นหาแบบ case-sensitive หรือ case-insensitive ผ่านพารามิเตอร์ comparer ซึ่งทำให้คุณควบคุมพฤติกรรมการเปรียบเทียบได้ละเอียด

ส่วนตัวผม มักใช้ Text.PositionOf ร่วมกับ Text.Range เพื่อแยก (extract) ส่วนของข้อความจากตำแหน่งที่หาได้ นั่นคือการรวมกำลังของสองฟังก์ชันเข้าด้วยกัน 😎

Leave a Reply

Your email address will not be published. Required fields are marked *