Thep Excel

UNIONรวมหลายตารางให้เป็นตารางเดียว (ต่อแถว)

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

fx
=UNION(<table1>, <table2>[, <table3>, …])

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

อัปเดต 13 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
table1 Table ตารางแรก (จะใช้ชื่อคอลัมน์จากตารางนี้)
table2 Table ตารางที่สอง (จะต่อเพิ่มเข้าไปหลังตารางแรก)
[table3]ไม่บังคับ Table ไม่ระบุ ตารางที่สาม (และต่อเติมได้อีก)

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

UNION เป็นฟังก์ชันที่ใช้รวมหลายตารางให้เป็นตารางเดียว โดยนำแถวของแต่ละตารางมาต่อรวมกันแนวตั้ง (แบบ append/stack) ซึ่งต่างจากการ join ที่ต่อแนวนอน

ประเด็นสำคัญคือ UNION เก็บแถวซ้ำไว้ทั้งหมด (duplicates retained) ต่างจาก SQL UNION ที่ลบแถวซ้ำ ถ้าต้องการลบแถวซ้ำ ให้ครอบ UNION ด้วย DISTINCT

คอลัมน์ต้องตรงกันตามตำแหน่ง (position, ไม่ใช่ชื่อ) และตารางที่ได้จะใช้ชื่อคอลัมน์จากตารางตัวแรก

ส่วนตัวผมเห็นว่า UNION จริงๆ มีประโยชน์มากเวลาต้องรวมข้อมูลจากหลายแหล่ง เช่น ข้อมูลปีต่างๆ หรือสาขาต่างๆ หรือแม้แต่รวมข้อมูล sales กับ returns ให้เป็นชุดเดียว ก่อนจะนำไปสรุปรวม 😎

How it works

รวมข้อมูลจากหลายตารางที่คอลัมน์เหมือนกัน

เช่น รวมยอดขายจากหลายไฟล์/หลายช่วงที่แยกตารางไว้

รวมชุดรายการเพื่อทำสรุปต่อ

รวมรายการจากหลายเงื่อนไขก่อนสรุปด้วย COUNTROWS หรือ SUMX

Examples

รวมข้อมูล Sales กับ Returns เป็นตารางเดียวAll Transactions = UNION( VALUES(Sales[ProductID]), VALUES(Returns[ProductID]) )

นำ ProductID จาก Sales และ Returns มาต่อรวมกัน ถ้าสินค้า ID ตัวเดียวมีทั้ง sales และ return ก็จะปรากฏ 2 แถว

fx
All Transactions =
UNION(
VALUES(Sales[ProductID]),
VALUES(Returns[ProductID])
)

ผลลัพธ์ตารางที่มี ProductID จากทั้ง Sales และ Returns รวมกัน
รวมสามตาราง (ข้อมูลปีต่างๆ)All Years Data = UNION( VALUES(Year2022[CustomerID]), VALUES(Year2023[CustomerID]), VALUES(Year2024[CustomerID]) )

สามารถระบุตารางได้มากกว่า 2 ตัว เพื่อรวมข้อมูลหลายปีหรือหลายช่วงเวลาในครั้งเดียว

fx
All Years Data =
UNION(
VALUES(Year2022[CustomerID]),
VALUES(Year2023[CustomerID]),
VALUES(Year2024[CustomerID])
)

ผลลัพธ์ตารางที่มี CustomerID จากทั้งสามปีรวมกัน
ลบแถวซ้ำด้วย DISTINCTUnique Products = DISTINCT( UNION( VALUES(Sales[ProductID]), VALUES(Returns[ProductID]) ) )

เพราะ UNION เก็บแถวซ้ำ หากต้องการเอาซ้ำออก ให้ครอบด้วย DISTINCT

fx
Unique Products =
DISTINCT(
UNION(
VALUES(Sales[ProductID]),
VALUES(Returns[ProductID])
)
)

ผลลัพธ์ตารางที่มี ProductID ที่ไม่ซ้ำ
สร้างข้อมูลหลายคอลัมน์จากตารางต่างกันCombined Data = UNION( SELECTCOLUMNS(Sales, "ID", Sales[ID], "Amount", Sales[Amount]), SELECTCOLUMNS(Returns, "ID", Returns[ID], "Amount", Returns[Amount]) )

ใช้ SELECTCOLUMNS เพื่อแนวทางคอลัมน์ให้ตรงกัน (ชื่อและประเภทข้อมูล) ก่อนที่จะ UNION

fx
Combined Data =
UNION(
SELECTCOLUMNS(Sales, "ID", Sales[ID], "Amount", Sales[Amount]),
SELECTCOLUMNS(Returns, "ID", Returns[ID], "Amount", Returns[Amount])
)

ผลลัพธ์ตารางที่มี ID และ Amount จากทั้ง Sales และ Returns

FAQs

UNION ลบแถวซ้ำหรือไม่?+

ไม่ลบ UNION เก็บแถวซ้ำไว้ทั้งหมด ต่างจาก SQL UNION ถ้าต้องการลบแถวซ้ำ ให้ใช้ DISTINCT(UNION(…))

ตารางต้องมีคอลัมน์เหมือนกันไหม?+

ต้องมีจำนวนคอลัมน์เท่ากัน และชนิดข้อมูลต้องเข้ากันได้ คอลัมน์จะจับคู่ตามตำแหน่ง (position) ไม่ใช่ชื่อ

ต่างจาก JOIN อย่างไร?+

UNION ต่อแนวตั้ง (append rows) JOIN ต่อแนวนอน (combine columns) เลือกตามลักษณะงาน

สามารถรวมตารางมากกว่า 2 ตัวได้ไหม?+

ได้ สามารถระบุตารางได้กี่ตัวก็ได้ UNION(Table1, Table2, Table3, … )

ชื่อคอลัมน์จะเป็นอะไร?+

จะใช้ชื่อคอลัมน์จากตารางแรก (table1) ตารางที่เหลือจะปรับตามตำแหน่ง

Resources & Related

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

ฟังก์ชันนี้UNIONTable manipulation
Table manipulation (7)
DATATABLE

DATATABLE สร้างตารางแบบ hardcode ด้วยข้อมูลคงที่ โดยระบุชื่อคอลัมน์ ชนิดข้อมูล และค่าของแต่ละแถว เหมาะสำหรับตารางอ้างอิงเล็กๆ เช่น lookup table หรือข้อมูลตัวอย่าง

DISTINCT

DISTINCT คืนค่าตารางที่มีคอลัมน์เดียว ซึ่งประกอบด้วยค่าที่ไม่ซ้ำกันจากคอลัมน์ที่ระบุ โดยไม่รวม Blank Row ที่เกิดจาก Invalid Relationship ความแตกต่างหลักจาก VALUES คือ DISTINCT จะซ่อน Data Quality Issues ในขณะที่ VALUES จะเตือนให้เห็น

EXCEPT

EXCEPT คืนตารางของแถวที่อยู่ใน LeftTable แต่ไม่อยู่ใน RightTable เหมาะกับการหาสิ่งที่ขาดหาย เช่น สินค้าที่ไม่เคยขาย ลูกค้าที่ไม่มีธุรกรรม

INTERSECT

INTERSECT คืนตารางของแถวที่อยู่ในทั้ง LeftTable และ RightTable เหมาะกับการหาสิ่งที่ซ้ำกัน/ร่วมกันระหว่างสองชุดข้อมูล โดยรักษาเอาแถวที่ซ้ำกันไว้ด้วย

SELECTCOLUMNS

สร้างตารางใหม่โดยเลือกเฉพาะคอลัมน์ที่ต้องการจากตารางต้นฉบับและเพิ่มคอลัมน์ที่คำนวณได้ ต่างจาก ADDCOLUMNS ตรงที่ SELECTCOLUMNS เริ่มจากตารางว่างแล้วเพิ่มเฉพาะคอลัมน์ที่ระบุ ทำให้สามารถปรับโครงสร้างตารางและเลือกข้อมูลที่จำเป็นได้อย่างยืดหยุ่น

SUMMARIZE

SUMMARIZE สร้างตารางสรุปโดยจัดกลุ่มข้อมูลตามคอลัมน์ที่กำหนด คล้าย GROUP BY ใน SQL หรือ Pivot Table ใน Excel คืนค่าตารางที่มีหนึ่งแถวต่อหนึ่ง unique combination ของคอลัมน์ที่เลือก สามารถอ้างถึงคอลัมน์จาก related table ได้โดยตรงโดยไม่ต้องใช้ RELATED มักใช้สร้าง virtual table ใน measure เพื่อทำ intermediate calculations ก่อนใช้ iterator functions อย่าง SUMX, AVERAGEX คำนวณต่อ ⚠️ Best Practice: ใช้ ADDCOLUMNS ครอบ SUMMARIZE แทนการใส่ extension columns ตรงๆ เพื่อ performance และ filter context control ที่ดีกว่า สำหรับ calculated table แนะนำใช้ SUMMARIZECOLUMNS แทนเนื่องจากมี performance ดีกว่าอย่างมาก

VALUES

VALUES ดึงค่าที่ไม่ซ้ำจากคอลัมน์ หรือดึงแถวทั้งหมดจากตาราง โดยรวมแถว BLANK ที่เกิดจากข้อผิดพลาดของความสัมพันธ์ (Referential Integrity Violations) ส่วน DISTINCT จะไม่รวมแถว BLANK นี้

Comments

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