Thep Excel

Table.TransformColumnNames – แปลงชื่อคอลัมน์ด้วยฟังก์ชัน

Table.TransformColumnNames ใช้ฟังก์ชันแปลงชื่อ (Name Generator) เพื่อเปลี่ยนชื่อคอลัมน์ทั้งหมดในตาราง เหมาะสำหรับจัดรูปแบบชื่อคอลัมน์เป็นแบบเดียวกัน เช่น ตัวพิมพ์ใหญ่ ลบช่องว่าง หรือเพิ่ม Prefix

=Table.TransformColumnNames(table as table, nameGenerator as function, optional options as nullable record) as table

By ThepExcel AI Agent
3 December 2025

Function Metrics


Popularity
5/10

Difficulty
4/10

Usefulness
6/10

Syntax & Arguments

=Table.TransformColumnNames(table as table, nameGenerator as function, optional options as nullable record) as table

Argument Type Required Default Description
table table Yes ตารางที่ต้องการแปลงชื่อคอลัมน์
nameGenerator function Yes ฟังก์ชันที่รับชื่อคอลัมน์เก่า (แทนด้วย _ หรือตัวแปรอื่น) และส่งคืนชื่อใหม่
options record Optional null ตัวเลือก (optional) เช่น MaxLength สำหรับจำกัดความยาวชื่อคอลัมน์ หรือ Comparer สำหรับการเปรียบเทียบ

How it works

แปลงชื่อคอลัมน์เป็นตัวพิมพ์ใหญ่ทั้งหมด

เพื่อสร้างมาตรฐานชื่อคอลัมน์ที่ชัดเจนและสอดคล้องกัน

ลบอักขระพิเศษออกจากชื่อคอลัมน์

เช่น ลบเครื่องหมายวรรคตอน หรือสัญลักษณ์ที่ไม่ต้องการออกจากชื่อคอลัมน์

เพิ่ม Prefix/Suffix ให้ชื่อคอลัมน์

เช่น เพิ่ม 'Data_' นำหน้าชื่อคอลัมน์ทั้งหมด

Examples

ตัวอย่างที่ 1: แปลงชื่อคอลัมน์เป็นตัวพิมพ์ใหญ่ทั้งหมด
let Source = Table.FromRecords({{"firstName", "lastName", "email"}}, {"First Name", "Last Name", "Email"}), Transformed = Table.TransformColumnNames(Source, eac…
ใช้ Text.Upper กับชื่อคอลัมน์แต่ละชื่อ (แทนด้วย _) เพื่อแปลงเป็นตัวพิมพ์ใหญ่ทั้งหมด เมื่อไปทำ Report ต้องให้หน้าตาเหมือน 'OFFICIAL' แบบนี้
Power Query Formula:

let
    Source = Table.FromRecords({{"firstName", "lastName", "email"}}, {"First Name", "Last Name", "Email"}),
    Transformed = Table.TransformColumnNames(Source, each Text.Upper(_))
in
    Transformed

Result:

[First Name, Last Name, Email] → [FIRST NAME, LAST NAME, EMAIL]

ตัวอย่างที่ 2: ลบช่องว่างในชื่อคอลัมน์
let Source = Table.FromRecords({{1, 2}}, {"First Name", "Last Name"}), Transformed = Table.TransformColumnNames(Source, each Text.Replace(_, " ", "")) in Transf…
ใช้ Text.Replace เพื่อลบช่องว่างทั้งหมด มีประโยชน์มากเวลาต้อง Merge กับข้อมูลอื่นที่ชื่อคอลัมน์ไม่มีช่องว่าง
Power Query Formula:

let
    Source = Table.FromRecords({{1, 2}}, {"First Name", "Last Name"}),
    Transformed = Table.TransformColumnNames(Source, each Text.Replace(_, " ", ""))
in
    Transformed

Result:

[First Name, Last Name] → [FirstName, LastName]

ตัวอย่างที่ 3: เพิ่ม Prefix ให้กับชื่อคอลัมน์
let Source = Table.FromRecords({{1, 2}}, {"Amount", "Date"}), Transformed = Table.TransformColumnNames(Source, each "DIM_" & _) in Transformed
เพิ่มคำว่า "DIM_" นำหน้าชื่อคอลัมน์ทั้งหมด เนื่องจากต้อง Follow ชื่อตามมาตรฐาน Star Schema หรือ Naming Convention บางที่ 555
Power Query Formula:

let
    Source = Table.FromRecords({{1, 2}}, {"Amount", "Date"}),
    Transformed = Table.TransformColumnNames(Source, each "DIM_" & _)
in
    Transformed

Result:

[Amount, Date] → [DIM_Amount, DIM_Date]

ตัวอย่างที่ 4: ลบอักขระพิเศษและแปลงเป็น PascalCase
let Source = Table.FromRecords({{1, 2}}, {"Order-ID_123", "Customer@Name"}), Transformed = Table.TransformColumnNames(Source, each Text.Replace(Text.Replace(Tex…
ลบอักขระพิเศษ (-_@) เพื่อให้ชื่อคอลัมน์เป็นตัวอักษรและตัวเลขเท่านั้น ก่อนที่จะใช้ในการเขียน DAX หรือ M Code
Power Query Formula:

let
    Source = Table.FromRecords({{1, 2}}, {"Order-ID_123", "Customer@Name"}),
    Transformed = Table.TransformColumnNames(Source, 
        each Text.Replace(Text.Replace(Text.Replace(_, "-", ""), "_", ""), "@", ""))
in
    Transformed

Result:

[Order-ID_123, Customer@Name] → [OrderID123, CustomerName]

FAQs

Table.TransformColumnNames ต่างจาก Table.RenameColumns อย่างไร?

Table.TransformColumnNames แปลงชื่อ ‘ทั้งหมด’ ด้วยฟังก์ชัน เหมาะงาน Mass Transformation เช่น ลบช่องว่างหรือแปลงเป็นตัวพิมพ์ใหญ่ทั้งตาราง ส่วน Table.RenameColumns เปลี่ยนชื่อเฉพาะคอลัมน์ที่ระบุชื่อเก่า-ใหม่เท่านั้น ผมแนะนำให้ใช้ TransformColumnNames เวลาต้องจัดรูปแบบเป็นแบบเดียวกัน แต่ RenameColumns ตอนเปลี่ยนชื่อคอลัมน์เฉพาะ 1-2 คอลัมน์

_ (underscore) มีความหมายอย่างไร?

_ คือ ‘ตัวแทน’ (placeholder) สำหรับชื่อคอลัมน์เดิม ตอนเขียน each Text.Upper(_) มันจะเอาชื่อแต่ละคอลัมน์มา Replace ตัว _ แล้วส่งไปให้ Text.Upper ทำงาน ผมเคยนึกว่า _ มีความหมายตรงนั้นไม่ได้ เลยสับสนสำหรับตอนแรก 😅 แต่พอเข้าใจแล้ว มันก็ง่ายมาก

ถ้า nameGenerator ฟังก์ชันให้ชื่อซ้ำกันหรือเหมือนชื่อเดิม จะเกิดอะไร?

ถ้าชื่อซ้ำกันแล้ว Power Query จะโยน Error เพราะคอลัมน์ต้องมีชื่อไม่ซ้ำกัน ถ้าให้ชื่อเหมือนเดิม มันก็จะผ่านนะ (ไม่มีการเปลี่ยนแปลง) ผมแนะนำให้เทสด้วย Table.ColumnNames(Source) ก่อน เพื่อดูว่าชื่อใหม่จะออกมาแบบไหน

ใช้ฟังก์ชันแบบซ้อนกันได้มั้ย?

ได้สิครับ! เช่น each Text.Upper(Text.Trim(Text.Replace(_, ” “, “_”))) ก็ได้ แต่ถ้ามันเยอะเกินไป ผมแนะนำให้เขียน Custom Function ทำไว้ก่อน แล้วใช้ function นั้นใน nameGenerator แทน จะดูสะอาดและ Maintainable ขึ้นเยอะ

Resources & Related

Additional Notes

Table.TransformColumnNames คือฟังก์ชันจัดรูปแบบชื่อคอลัมน์ที่ใช้ฟังก์ชัน nameGenerator เพื่อแปลงชื่อแต่ละชื่อ ซึ่งแตกต่างจาก Table.RenameColumns ตรงที่มันแปลงชื่อ ‘ทั้งหมด’ โดยใช้ฟังก์ชัน เหมาะกับการจัดรูปแบบแบบเป็นไปทั่วทั้งตาราง

ที่เจ๋งคือสามารถใช้ฟังก์ชันใดก็ได้ตราบเท่าที่รับชื่อเดิมและส่งคืนชื่อใหม่ เช่น Text.Upper, Text.Lower, Text.Replace, หรือแม้แต่ฟังก์ชันที่สร้างเอง ทำให้มีความยืดหยุ่นสูง

ส่วนตัวผมใช้บ่อยมากเวลาข้อมูลเข้ามาจากหลายแหล่ง (API, CSV, Excel) ที่ชื่อคอลัมน์ไม่สม่ำเสมอ – บางที่เป็น UPPERCASE บางที่ mIxEdCasE บางที่มีช่องว่าง ประมาณนี้ต้องใช้ Table.TransformColumnNames เลย 😎

Leave a Reply

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