FLATTEN รวมข้อมูลจากหนึ่งหรือหลายช่วงเข้าด้วยกันเป็นคอลัมน์เดียว โดยเรียงลำดับแถวก่อน (Row-major order) ช่วงข้อมูลไม่จำเป็นต้องมีขนาดเดียวกัน และสามารถผสมเซลล์ เรนจ์ และค่าคงที่ได้
=FLATTEN(range1, [range2, ...])
=FLATTEN(range1, [range2, ...])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| range1 | Range/Array | Yes | ช่วงข้อมูลแรกที่ต้องการแปลง สามารถเป็นเซลล์เดี่ยว แถว คอลัมน์ หรือตาราง 2 มิติ ได้ | |
| range2 | Range/Array | Optional | ช่วงข้อมูลเพิ่มเติม (ตัวเลือก) ฟังก์ชันจะนำข้อมูลจาก range2 มาเรียงต่อท้าย range1 คุณสามารถเพิ่มได้ถึง 254 ช่วง |
แปลงตารางสรุป (Crosstab) กลับเป็นตารางฐานข้อมูล (Database Format) เพื่อนำไปทำ Pivot Table
รวมรายชื่อนักเรียนที่อยู่คนละคอลัมน์ (เช่น ห้อง 1, ห้อง 2, ห้อง 3) ให้มาอยู่ในคอลัมน์เดียวกัน
ใช้ร่วมกับ UNIQUE เพื่อหาค่าที่ไม่ซ้ำ (Unique Values) จากช่วงข้อมูล 2 มิติ
FLATTEN(A1:C2)A1='Name' B1='Age' C1='City'
A2='John' B2='25' C2='BKK'
ผลลัพธ์จะออกมาเรียงแบบ: Name, Age, City, John, 25, BKK (ไม่ใช่ Name, John, Age, 25, …)
=FLATTEN(A1:C2)
A1, B1, C1, A2, B2, C2
UNIQUE(FLATTEN(A2:C10))สมมติในตาราง มี Name 'John' อยู่ 3 ที่ อยากหายังไงให้ 'John' ปรากฏแค่ครั้งเดียวในผลลัพธ์ UNIQUE(FLATTEN(…)) ก็ช่วยได้
=UNIQUE(FLATTEN(A2:C10))
รายการค่าที่ไม่ซ้ำกันทั้งหมด เรียงลงในคอลัมน์เดียว
FILTER(FLATTEN(A2:C10), FLATTEN(A2:C10) "")ในตัวอย่างนี้ FLATTEN(A2:C10) จะเรียงทั้งหมด แล้วก่อนส่งต่อให้ FILTER ประโยค FLATTEN(A2:C10) <> "" จะเก็บแค่ค่าที่ไม่เท่ากับช่องว่างเท่านั้น
=FILTER(FLATTEN(A2:C10), FLATTEN(A2:C10) <> "")
รายการข้อมูลเรียงกันในคอลัมน์เดียว โดยไม่รวมช่องว่าง
FLATTEN(A1:A10, C1:C10, E1:E10)นี่มีประโยชน์เวลาคุณต้องการรวมข้อมูลจากหลายโซนที่ไม่ติดกัน เช่น เงินฝากจากสาขา A, B, C ที่อยู่คนละเซลล์กัน
=FLATTEN(A1:A10, C1:C10, E1:E10)
ค่าทั้งหมดจาก A1:A10 เรียงลงมา แล้วค่อย C1:C10 แล้ว E1:E10
ใน Excel 365 มี TOCOL ที่ทำหน้าที่คล้ายกัน แต่ TOCOL ใน Excel มีฟีเจอร์เพิ่มเติม เช่น สามารถลบเซลล์ว่างได้ในตัว ส่วน Google Sheets’ FLATTEN ต้องใช้ FILTER ช่วยเพื่อเก็บเฉพาะเซลล์ที่ไม่ว่าง หากอยากเรียงแบบ Column-major (ลำดับคอลัมน์ก่อน) ต้องใช้ TRANSPOSE ช่วยครับ
FLATTEN ใช้ Row-major order หมายความว่าเรียงตามแถวก่อน (Row by Row) ถ้าข้อมูล A1:C2 เป็นแบบนี้:
A1=อ B1=ข C1=ค
A2=ก B2=ค C2=ง
ผลลัพธ์จะออกมาเป็น: อ, ข, ค, ก, ค, ง (ไม่ใช่ อ, ก, ข, ค, ค, ง)
ถ้าคุณต้องการเรียงแบบ Column-major ลองใช้ TRANSPOSE(FLATTEN(…)) ดูครับ
ผมแนะนำใช้ FLATTEN ในสถานการณ์เหล่านี้:
– เวลาต้องทำ Unpivoting (เปลี่ยนจากตาราง Wide Format เป็น Long Format)
– อยากรวมข้อมูลจากหลายคอลัมน์เข้าด้วยกัน
– ต้องการหาค่า Unique จากหลายคอลัมน์ (รวม UNIQUE)
– ต้องการกรองข้อมูลจากช่วงใหญ่ๆ (รวม FILTER)
ส่วนตัวผมมักใช้ FLATTEN + UNIQUE + FILTER เป็นคอมโบเก็บเก่า ครับ 😎
FLATTEN เป็นฟังก์ชันที่เจ๋งจริง เพราะมันช่วยแปลงข้อมูลแบบตาราง 2 มิติ เป็นรายการ 1 มิติได้อย่างง่าย
เวลามีข้อมูลกระจายอยู่หลายคอลัมน์แล้ว ต้องการรวมมันลงเป็นคอลัมน์เดียว FLATTEN ก็ทำได้ทันที ไม่ต้องใช้ Helper Column หรือวิธีซับซ้อนอื่นๆ
ส่วนตัวผมชอบใช้ FLATTEN กับฟังก์ชันอื่นๆ เช่น UNIQUE, FILTER, QUERY เพื่อทำข้อมูลให้สะอาดและมีประโยชน์มากขึ้น ครับ