Thep Excel

DAX · Text

MIDดึงข้อความจากตรงกลางตามตำแหน่งและจำนวนตัวอักษร

MID คืนสตริงย่อยจากข้อความ โดยเริ่มที่ StartNum (เริ่มนับที่ 1) และดึง NumChars ตัว ใช้บ่อยในการแยก/ตัดข้อความร่วมกับ LEFT/RIGHT/FIND/SEARCH

fx
=MID(<Text>, <StartNum>, <NumChars>)

ความนิยม6/10
ความยาก3/10
ประโยชน์6/10

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
Text text ข้อความต้นฉบับ (สตริง) สามารถเป็นลิเทอรัลข้อความ หรือ column reference
StartNum number ตำแหน่งเริ่มต้น เริ่มนับที่ 1 (ไม่ใช่ 0) ถ้า StartNum มากกว่าความยาวข้อความ ได้ผลลัพธ์ว่าง
NumChars number จำนวนตัวอักษรที่ต้องการดึง ต้องเป็นเลขบวก ถ้ากำหนดมากกว่าความยาวที่เหลือ จะดึงได้เท่าที่มี

Additional Notes

MID เป็นฟังก์ชันดึงข้อความจาก “ตรงกลาง” ของสตริง โดยกำหนดตำแหน่งเริ่มต้น (เริ่มนับที่ 1) และจำนวนตัวอักษรที่ต้องการดึง มันเป็นคู่หูของ LEFT (ดึงจากซ้าย) และ RIGHT (ดึงจากขวา) ใช้เวลาเวลาไหนต้องแยกรหัสที่มีโครงสร้างคงที่ หรือตัดโค้ดที่อยู่ตรงกลางสตริง

ที่เจ๋งคือ MID ร่วมกับ FIND/SEARCH ทำให้คุณหาตำแหน่งตัวคั่น (เช่น “-” หรือ “:”) แล้วดึงข้อมูลระหว่างตัวคั่นได้หมด ผมใช้มันสำหรับแยก SKU, ตัดปีจากรหัสสินค้า, หรือดึงรหัสตัวจริงจากข้อมูลที่มาจากหลายแหล่ง

ส่วนตัวผมถือว่า MID + FIND เป็นคู่หูสุดเก๋า ของการจัดการข้อมูลที่โครงสร้างมั่นคง ผมแนะนำให้เรียนรู้จัดการกับ MID เป็นหนึ่งในทักษะพื้นฐานของการทำความสะอาดข้อมูล

How it works

แยกส่วนของรหัสที่อยู่ตำแหน่งคงที่

เช่น รหัสรูปแบบ ABC-2025-001 ต้องการดึงปี 2025

ดึงข้อความระหว่างตัวคั่น

ใช้ร่วมกับ FIND/SEARCH เพื่อหาตำแหน่งตัวคั่น แล้วใช้ MID ดึงช่วงที่ต้องการ

Examples

ตัวอย่างที่ 1: ดึงตัวอักษร 4 ตัวเริ่มจากตำแหน่งที่ 5ช่วงกลาง = MID("ABCDEFGHIJ", 5, 4)

ตำแหน่งนับจาก 1 ดังนั้น ตำแหน่งที่ 5 คือ E ดึง 4 ตัว = E, F, G, H

fx
ช่วงกลาง = MID("ABCDEFGHIJ", 5, 4)

ผลลัพธ์ได้ "EFGH"
ตัวอย่างที่ 2: ดึงปีจากรหัสแบบ ABC-2025-001ปี = MID(Data[Code], 5, 4)

ถ้ารูปแบบรหัสคงที่เป็น ABC-2025-001 ตัวอักษร 4 ตัว ตำแหน่งที่ 5 คือปี

fx
ปี = MID(Data[Code], 5, 4)

ผลลัพธ์ได้ "2025"
ตัวอย่างที่ 3: ดึงข้อความหลังเครื่องหมาย – ตัวแรก (ใช้กับ FIND)ข้อมูลหลังเครื่องหมาย = VAR dashPos = FIND("-", Data[Code]) RETURN IF( dashPos = 0, BLANK(), MID(Data[Code], dashPos + 1, LEN(Data[Code])) )

FIND หาตำแหน่ง – แล้วใช้ MID ดึงตั้งแต่ตำแหน่งถัดไปไปจนจบ LEN(Data[Code]) – dashPos คำนวณจำนวนตัวอักษรที่เหลือ

fx
ข้อมูลหลังเครื่องหมาย =
VAR dashPos = FIND("-", Data[Code])
RETURN
IF(
dashPos = 0,
BLANK(),
MID(Data[Code], dashPos + 1, LEN(Data[Code]))
)

ผลลัพธ์ดึงข้อความหลังเครื่องหมาย – แรก
ตัวอย่างที่ 4: ปิดบังรหัสโค้ดสินค้า ให้เห็นแค่ 3 ตัวท้ายปิดบังรหัส = "XXX-XX-" & MID(Data[ProductCode], 8, 3)

ใช้ MID ดึงตัวที่ 8-10 แล้วต่อกับ "XXX-XX-" เหมาะสำหรับการปิดบังข้อมูลสำคัญ

fx
ปิดบังรหัส = "XXX-XX-" & MID(Data[ProductCode], 8, 3)

ผลลัพธ์"XXX-XX-123" (ถ้า ProductCode = "ABC-DEF-123")

FAQs

MID เริ่มนับตำแหน่งจาก 0 หรือ 1?+

เริ่มนับจาก 1 ไม่ใช่ 0 ดังนั้น MID("ABC", 1, 1) ได้ "A" ไม่ใช่ "B" ต่างจากภาษาโปรแกรมมิ่งบางตัวที่เริ่มจาก 0

ถ้า StartNum มากกว่าความยาวข้อความ จะเกิดอะไร?+

ได้ผลลัพธ์ว่าง (BLANK) ตัวอย่าง MID("ABC", 10, 2) ได้ "" เพราะตำแหน่งที่ 10 อยู่นอกข้อความ

ถ้า NumChars มากกว่าจำนวนตัวอักษรที่เหลือจะเกิดอะไร?+

MID จะดึงได้เท่าที่มี เช่น MID("ABCDE", 3, 10) ได้ "CDE" (ไม่ใช่ error) เพราะจากตำแหน่งที่ 3 มีแค่ 3 ตัว

ถ้าต้องการดึงจากซ้ายหรือขวา ใช้ฟังก์ชันอะไร?+

ใช้ LEFT เพื่อดึงจากซ้าย เช่น LEFT("ABCDE", 2) ได้ "AB" และใช้ RIGHT เพื่อดึงจากขวา เช่น RIGHT("ABCDE", 2) ได้ "DE"

MID สามารถใช้ในแบบ calculated column ได้ไหม?+

ได้ MID ทำงานในทั้ง calculated column, calculated table, measure, และ visual calculation ผมมักใช้ในคำนวณ column เพื่อสร้างคอลัมน์ใหม่ที่ดึงข้อมูลบางส่วน

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ MID จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้MIDText
Text (11)
CONCATENATEX

CONCATENATEX ทำหน้าที่รวมข้อความจากแต่ละแถวในตารางเข้าด้วยกัน เหมาะสำหรับสร้างรายชื่อค่าที่คั่นด้วยจุลภาค หรือรวมข้อมูลจากหลายแถว ใช้ได้กับตัวอักษรหรือค่าใดๆที่ต้องการทำให้เป็นข้อความ

FIND

FIND คืนค่าตำแหน่งเริ่มต้นของ FindText ภายใน WithinText (เริ่มนับที่ 1) โดยค้นหาแบบแยกตัวพิมพ์ใหญ่/เล็ก และสามารถระบุ StartNum/NotFoundValue เพื่อควบคุมจุดเริ่มค้นหาและผลลัพธ์เมื่อไม่พบได้

LEFT

LEFT คืนค่าตัวอักษรจำนวนหนึ่งจากจุดเริ่มต้นของข้อความ ใช้ได้กับ Calculated Column โดยจะประมวลผลภาษาต่างๆ (Unicode) อย่างเดียวกัน

LEN (DAX)

LEN นับจำนวนอักขระของสตริง รวมช่องว่างด้วย ใช้สำหรับตรวจสอบความยาวข้อมูล การทำความสะอาด และงานเงื่อนไขตามความยาวข้อความ

LOWER

LOWER แปลงข้อความให้เป็นตัวพิมพ์เล็กทั้งหมด มีประโยชน์มากสำหรับการทำความสะอาดข้อมูลและแก้ปัญหาคีย์ไม่ตรงกันเพราะเหตุคำต่างชั้นอักษร

REPLACE

REPLACE แทนที่อักขระจำนวนหนึ่งในสตริง โดยเริ่มจากตำแหน่งที่ระบุ เหมาะกับการแก้ไขข้อความเฉพาะตำแหน่ง เช่น เปลี่ยนคำนำหน้า แทนที่ตัวเลขบางหลัก หรือซ่อนบางส่วนของข้อมูล

RIGHT

RIGHT คืนค่าตัวอักษรจำนวนหนึ่งจากจุดสิ้นสุดของข้อความ (ด้านขวา) ตามจำนวนที่ระบุ

SEARCH

SEARCH คืนค่าตำแหน่งเริ่มต้นของข้อความที่ค้นหา (ค้นหาแบบไม่สนตัวพิมพ์) หากไม่พบจะเกิดข้อผิดพลาด สามารถใช้กับ IFERROR หรือ COALESCE เพื่อจัดการกรณีไม่พบ

TRIM

ฟังก์ชันทำความสะอาดข้อความ ลบช่องว่างส่วนเกินนำหน้า ท้าย และช่องว่างหลายตัวระหว่างคำ โดยคงไว้ช่องว่างเดี่ยวระหว่างคำเท่านั้น

UNICODE

UNICODE คืนค่า code point ของอักขระตัวแรกในข้อความ ใช้ในการตรวจสอบ/จำแนกข้อความตามอักขระนำหน้า หรือทำตรรกะเกี่ยวกับการเข้ารหัส และมักใช้คู่กับ UNICHAR

UPPER

UPPER แปลงข้อความให้เป็นตัวพิมพ์ใหญ่ทั้งหมด ใช้บ่อยเพื่อปรับปรุงคุณภาพข้อมูลและทำให้การเปรียบเทียบข้อความแม่นยำ

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่