Thep Excel

Text.StartsWith – ตรวจสอบว่าข้อความขึ้นต้นด้วยคำที่กำหนด

Text.StartsWith ตรวจสอบว่าข้อความหลักขึ้นต้นด้วยข้อความย่อยที่กำหนดหรือไม่ โดยคืนค่า true หรือ false สามารถระบุ Comparer เพื่อเลือกว่าจะให้ตรวจสอบแบบ Case Sensitive (ไว) หรือ Case Insensitive (ไม่ไว) ได้

=Text.StartsWith(text as nullable text, substring as text, optional comparer as nullable function) as nullable logical

By ThepExcel AI Agent
3 December 2025

Function Metrics


Popularity
7/10

Difficulty
3/10

Usefulness
7/10

Syntax & Arguments

=Text.StartsWith(text as nullable text, substring as text, optional comparer as nullable function) as nullable logical

Argument Type Required Default Description
text text Yes ข้อความหลักที่ต้องการตรวจสอบว่าขึ้นต้นด้วยข้อความย่อยหรือไม่ สามารถเป็น null ได้
substring text Yes ข้อความย่อยที่ต้องการตรวจสอบว่าข้อความหลักขึ้นต้นด้วยข้อความนี้หรือไม่
comparer function Optional Comparer.Ordinal ฟังก์ชัน Comparer สำหรับการเปรียบเทียบ เช่น Comparer.Ordinal (case-sensitive) หรือ Comparer.OrdinalIgnoreCase (case-insensitive) หากไม่ระบุจะใช้ Comparer.Ordinal เป็นค่าเริ่มต้น

How it works

กรองข้อมูลตามรหัสสินค้า

เลือกเฉพาะรายการสินค้าที่รหัสขึ้นต้นด้วย "PROD" หรือ "SKU"

จัดกลุ่มข้อมูลตามหมวดหมู่

ถ้าข้อความในคอลัมน์ขึ้นต้นด้วย "Fruits" ให้จัดอยู่ในหมวดหมู่ผลไม้

Examples

ตัวอย่างที่ 1: ตรวจสอบการขึ้นต้นแบบ Case Sensitive
Text.StartsWith("Hello World", "Hello")
ข้อความ "Hello World" ขึ้นต้นด้วย "Hello" ตรงทุกตัว (รวมตัวพิมพ์ใหญ่ H) ดังนั้นจึงคืนค่า true
.
ส่วนตัวผมใช้ example นี้เป็นการตรวจสอบพื้นฐาน เพราะการแยกตัวพิมพ์เล็ก-ใหญ่เป็นจริงใน Power Query
Power Query Formula:

=Text.StartsWith("Hello World", "Hello")

Result:

true

ตัวอย่างที่ 2: ตรวจสอบแล้วคืนค่า false
Text.StartsWith("Hello World", "hello")
ข้อความ "Hello World" ไม่ได้ขึ้นต้นด้วย "hello" (ตัวพิมพ์เล็ก h) เพราะมันขึ้นต้นด้วย "Hello" (ตัวพิมพ์ใหญ่ H) ดังนั้นคืนค่า false
.
นี่คือสาเหตุทั่วไปของเหตุการณ์ที่ unexpected ครับ เพราะบางคนลืมว่า Power Query เป็น case-sensitive 😅
Power Query Formula:

=Text.StartsWith("Hello World", "hello")

Result:

false

ตัวอย่างที่ 3: ใช้ Comparer.OrdinalIgnoreCase สำหรับ Case Insensitive
Text.StartsWith("Apple Pie", "apple", Comparer.OrdinalIgnoreCase)
ด้วยการใช้ Comparer.OrdinalIgnoreCase ฟังก์ชันจะไม่สนใจความแตกต่างของตัวพิมพ์เล็ก-ใหญ่ ดังนั้น "Apple Pie" ถือว่าขึ้นต้นด้วย "apple" จึงคืนค่า true
.
ที่ต้องระวังคือ Comparer.OrdinalIgnoreCase จะทำการเปรียบเทียบแบบ ordinal (ตามลำดับไบต์) ไม่ใช่ culturally aware ถ้าต้องการ culture-aware comparison ให้ใช้ Comparer.FromCulture("th-TH") แทน
Power Query Formula:

=Text.StartsWith("Apple Pie", "apple", Comparer.OrdinalIgnoreCase)

Result:

true

ตัวอย่างที่ 4: ใช้ในตาราง Power Query เพื่อกรองข้อมูล
let Products = Table.FromRecords({ [ProductCode = "PROD-001", ProductName = "Apple"], [ProductCode = "PROD-002", ProductName = "Banana"], [ProductCode = "SERV-0…
ตัวอย่างนี้แสดงการใช้ Text.StartsWith ร่วมกับ Table.SelectRows ในสถานการณ์จริง โดยสร้างตาราง Products แล้วกรองเฉพาะสินค้าที่มีรหัส (ProductCode) ขึ้นต้นด้วย "PROD-"
.
โดยใช้เงื่อนไข each Text.StartsWith([ProductCode], "PROD-") ซึ่ง 'each' วนลูปตรวจสอบทุกแถว และ [ProductCode] คือการอ้างอิงคอลัมน์ ProductCode ในแถวปัจจุบัน
.
ผลลัพธ์จะได้เฉพาะแถวสินค้า 3 รายการ (PROD-001, PROD-002, PROD-003) ส่วน SERV-001 ถูกกรองออก เพราะมันขึ้นต้นด้วย "SERV-" ไม่ใช่ "PROD-" ส่วนตัวผมชอบใช้ pattern นี้มากครับ เพราะทำให้โค้ด readable และ maintainable ได้ดี 💡
Power Query Formula:

let
    Products = Table.FromRecords({
        [ProductCode = "PROD-001", ProductName = "Apple"],
        [ProductCode = "PROD-002", ProductName = "Banana"],
        [ProductCode = "SERV-001", ProductName = "Consulting"],
        [ProductCode = "PROD-003", ProductName = "Cherry"]
    }),
    OnlyProductCodes = Table.SelectRows(
        Products,
        each Text.StartsWith([ProductCode], "PROD-")
    )
in
    OnlyProductCodes

Result:

Table with 3 rows:
[ProductCode="PROD-001", ProductName="Apple"]
[ProductCode="PROD-002", ProductName="Banana"]
[ProductCode="PROD-003", ProductName="Cherry"]

FAQs

Text.StartsWith เป็น Case Sensitive โดยค่าเริ่มต้นหรือไม่?

ใช่ครับ เป็น Case Sensitive เมื่อไม่ระบุ Comparer parameter ดังนั้น Text.StartsWith(“Apple”, “apple”) จะคืนค่า false เพราะมันขึ้นต้นด้วย “A” ตัวพิมพ์ใหญ่ ไม่ใช่ “a” ตัวพิมพ์เล็ก
.
ถ้าต้องการให้ case-insensitive ต้องเพิ่มพารามิเตอร์ที่สามดังนี้ Text.StartsWith(“Apple”, “apple”, Comparer.OrdinalIgnoreCase) หรือสามารถแปลงข้อความก่อนเปรียบเทียบได้เช่น Text.StartsWith(Text.Lower(“Apple”), Text.Lower(“apple”)) ครับ

ต่างจาก Text.Contains อย่างไร?

Text.StartsWith ตรวจสอบเฉพาะว่าข้อความขึ้นต้นด้วยข้อความย่อยที่กำหนดหรือไม่ ส่วน Text.Contains ตรวจสอบว่าข้อความใดจะมีข้อความย่อยนั้นอยู่ที่ไหนก็ได้ (ต้น กลาง ท้าย)
.
เช่น Text.StartsWith(“Hello World”, “World”) จะคืนค่า false เพราะ “World” ไม่ได้อยู่ที่ต้น แต่ Text.Contains(“Hello World”, “World”) จะคืนค่า true เพราะ “World” อยู่ในข้อความ 😎

ถ้า text parameter เป็น null จะคืนค่าอะไร?

ถ้า text parameter (ตัวแรก) เป็น null ฟังก์ชันจะคืนค่า null โดยไม่คืนค่า true หรือ false
.
ดังนั้นถ้าต้องการตรวจสอบและจัดการกรณี null ต้องเขียนเงื่อนไขพิเศษ เช่น each [Column] null and Text.StartsWith([Column], “Prefix”) เพื่อให้แน่ใจว่า [Column] ไม่เป็น null ก่อนทำการเปรียบเทียบ

Comparer.OrdinalIgnoreCase กับ Comparer.FromCulture ต่างกันอย่างไร?

Comparer.OrdinalIgnoreCase ทำการเปรียบเทียบแบบ ordinal (ตามลำดับไบต์) โดยไม่สนใจตัวพิมพ์เล็ก-ใหญ่ แต่ไม่ได้พิจารณา cultural differences
.
ส่วน Comparer.FromCulture(“th-TH”) ทำการเปรียบเทียบแบบ culture-aware ซึ่งอาจให้ผลลัพธ์ต่างกันเมื่อจัดการกับภาษาอื่น เช่น ภาษาไทย ส่วนตัวผมแนะนำให้ใช้ Comparer.OrdinalIgnoreCase สำหรับการเปรียบเทียบทั่วไป และ Comparer.FromCulture เมื่อต้องจัดการข้อมูลที่มีความสำคัญทางวัฒนธรรม 💡

Resources & Related

Additional Notes

ฟังก์ชัน Text.StartsWith เป็นฟังก์ชันพื้นฐานสำหรับตรวจสอบว่าข้อความหลักขึ้นต้นด้วยข้อความย่อย (substring) ที่กำหนดหรือไม่ โดยจะคืนค่าเป็น true หากขึ้นต้นตรงกัน และ false หากไม่ตรงกัน เมื่อข้อความหลักเป็น null ฟังก์ชันจะคืนค่า null

ที่เจ๋งคือเราสามารถควบคุมว่าจะให้ตรวจสอบแบบ Case Sensitive (แยกตัวพิมพ์เล็ก-ใหญ่) หรือ Case Insensitive (ไม่แยก) ได้โดยใช้พารามิเตอร์ Comparer ซึ่งทำให้ยืดหยุ่นมากในการตรวจสอบข้อความ 😎

ส่วนตัวผมใช้ฟังก์ชันนี้บ่อยมากเมื่อต้องการกรองข้อมูลตามคำขึ้นต้น เช่น กรองรหัสสินค้าที่ขึ้นต้นด้วย “PROD-” หรือกรองชื่อลูกค้าที่ขึ้นต้นด้วยอักษรบางตัว โดยมักใช้ร่วมกับ Table.SelectRows เพื่อสร้าง filter condition ที่ซับซ้อน

Leave a Reply

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