Thep Excel

Table.ToColumnsแปลงตารางเป็น List ของ List (รายคอลัมน์)

Table.ToColumns แปลงตาราง (Table) ให้เป็น List ของ List โดยแต่ละ List ย่อยแทนข้อมูลจากคอลัมน์เดียว เรียงตามลำดับคอลัมน์จากซ้ายไปขวา ส่วนกลับกันของ Table.FromColumns

fx
= Table.ToColumns(table) as list

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

อัปเดต 3 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด คำอธิบาย
table table ตารางที่ต้องการแปลงให้เป็น List ของ List

Additional Notes

ฟังก์ชัน Table.ToColumns ใช้สำหรับแปลงตารางให้เป็น List ของ List โดยคอลัมน์แต่ละคอลัมน์จะกลายเป็น List ย่อยหนึ่งตัว บ่อยครั้งใช้เมื่อต้องการประมวลผลข้อมูลแบบรายคอลัมน์ หรือต้องการเปลี่ยนโครงสร้างข้อมูลให้เป็นรูปแบบ List เพื่อใช้กับฟังก์ชัน List อื่นๆ

ที่เจ๋งคือ Table.ToColumns เป็นการผกผันของ Table.FromColumns ถ้าคุณแปลงตาราง → List ของ List แล้วแปลงกลับ ก็ได้ตารางเดิมคืนมา ซึ่งมีประโยชน์มากในการจัดการข้อมูลที่ต้องเปลี่ยนรูปแบบไปมา

ส่วนตัวผมชอบใช้ Table.ToColumns เวลาต้องทำ dynamic formula บน List ของคอลัมน์ หรือต้องดึง metadata เกี่ยวกับคอลัมน์ต่างๆ มันให้ความยืดหยุ่นมากขึ้น

How it works

ประมวลผลข้อมูลรายคอลัมน์

ใช้ร่วมกับ List.Transform เพื่อแปลงค่าในแต่ละคอลัมน์ทีละคอลัมน์

ใช้กับ List.Zip

ใช้เตรียมข้อมูลสำหรับ List.Zip เพื่อรวมคอลัมน์ต่างๆ เข้าด้วยกัน

Examples

ตัวอย่างที่ 1: แปลงตารางพื้นฐานlet SampleTable = Table.FromRecords({ [CustomerID = 1, Name = "Bob", Amount = 100], [CustomerID = 2, Name = "Jim", Amount = 200] }), Result = Table.ToColumns(Sa…

ตาราง 2 แถว 3 คอลัมน์ ถูกแปลงเป็น List ของ 3 Lists ย่อย คอลัมน์ที่ 1 คือ {1, 2}, คอลัมน์ที่ 2 คือ {"Bob", "Jim"}, คอลัมน์ที่ 3 คือ {100, 200}

fx
let
SampleTable = Table.FromRecords({
[CustomerID = 1, Name = "Bob", Amount = 100],
[CustomerID = 2, Name = "Jim", Amount = 200]
}),
Result = Table.ToColumns(SampleTable)
in
Result

ผลลัพธ์{{1, 2}, {"Bob", "Jim"}, {100, 200}}
ตัวอย่างที่ 2: ใช้กับตาราง Source และเข้าถึง List แต่ละตัวlet Source = Table.FromRows( {{"Alice", 1500}, {"Bob", 2000}, {"Charlie", 1800}}, {"Employee", "Salary"} ), ColumnsList = Table.ToColumns(Source), FirstColumn =…

แปลง Source ทั้งหมดเป็น List ของ Lists จากนั้นสามารถเข้าถึง List แต่ละรายการด้วย index {0}, {1} เป็นต้น เหมือนกับการใช้ array indexing

fx
let
Source = Table.FromRows(
{{"Alice", 1500}, {"Bob", 2000}, {"Charlie", 1800}},
{"Employee", "Salary"}
),
ColumnsList = Table.ToColumns(Source),
FirstColumn = ColumnsList{0},
SecondColumn = ColumnsList{1}
in
ColumnsList

ผลลัพธ์{{"Alice", "Bob", "Charlie"}, {1500, 2000, 1800}}
ตัวอย่างที่ 3: ประมวลผลเฉพาะคอลัมน์ด้วย List.Transformlet Source = Table.FromRecords({ [ID = 1, Value = 10], [ID = 2, Value = 20], [ID = 3, Value = 30] }), ColumnsList = Table.ToColumns(Source), SecondColumnDoubled…

ดึงคอลัมน์ที่ 2 จาก List ของ Lists แล้วคูณแต่ละค่าด้วย 2 โดยใช้ List.Transform กับ each keyword เพื่อสร้าง dynamic transformation

fx
let
Source = Table.FromRecords({
[ID = 1, Value = 10],
[ID = 2, Value = 20],
[ID = 3, Value = 30]
}),
ColumnsList = Table.ToColumns(Source),
SecondColumnDoubled = List.Transform(ColumnsList{1}, each _ * 2),
Result = {ColumnsList{0}, SecondColumnDoubled}
in
Result

ผลลัพธ์{{1, 2, 3}, {20, 40, 60}}
ตัวอย่างที่ 4: นับจำนวนคอลัมน์และแถวlet Source = Table.FromRecords({ [A = 1, B = 2, C = 3], [A = 4, B = 5, C = 6], [A = 7, B = 8, C = 9] }), ColumnsList = Table.ToColumns(Source), ColumnCount = Li…

นับจำนวนคอลัมน์ด้วย List.Count ของผลลัพธ์ทั้งหมด (3 Lists = 3 คอลัมน์) และนับจำนวนแถวด้วย List.Count ของคอลัมน์แรก (3 ค่า = 3 แถว)

fx
let
Source = Table.FromRecords({
[A = 1, B = 2, C = 3],
[A = 4, B = 5, C = 6],
[A = 7, B = 8, C = 9]
}),
ColumnsList = Table.ToColumns(Source),
ColumnCount = List.Count(ColumnsList),
RowCount = List.Count(ColumnsList{0})
in
{ColumnCount, RowCount}

ผลลัพธ์{3, 3}

FAQs

Table.ToColumns ต่างจาก Table.ToRows อย่างไร?+

Table.ToColumns แปลงข้อมูลรายคอลัมน์ (ผลลัพธ์เป็น List ของคอลัมน์) ส่วน Table.ToRows แปลงข้อมูลรายแถว (ผลลัพธ์เป็น List ของแถว) ถ้าตาราง 3 แถว 2 คอลัมน์ ToColumns ให้ {2 Lists ของแถวละ 3 ค่า} แต่ ToRows ให้ {3 Lists ของแถวละ 2 ค่า}

สามารถแปลงกลับเป็นตารางได้ไหม?+

ได้ครับ ใช้ Table.FromColumns เพื่อแปลง List ของ List กลับไปเป็นตาราง ผมมักจะใช้ workflow นี้เวลาต้องประมวลผลข้อมูลแบบ column-by-column แล้วแปลงกลับเป็นตารางเหมือนเดิม

ถ้าตารางว่าง (0 แถว) จะเกิดอะไร?+

ยังคงได้ List ของ Lists ที่ว่างเปล่า ตัวอย่าง: Table.ToColumns(Table.FromRecords({})) → {} ไม่มี List ย่อยเลยครับ เพราะไม่มีคอลัมน์ที่จะแปลง

ใช้ Table.ToColumns แบบไหนถึง optimize ได้?+

ปัญหาคือถ้าตารางใหญ่มากๆ การแปลงเป็น List จะใช้ memory เยอะ ผมแนะนำให้กรอง (filter) ก่อนแปลง หรือใช้ List functions แบบ lazy evaluation ถ้าเป็นไปได้

Resources & Related

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

ฟังก์ชันนี้Table.ToColumnsTable functions
Table functions (4)
Table.ColumnNames

Table.ColumnNames ดึงชื่อคอลัมน์ทั้งหมดจากตารางและคืนค่าเป็นลิสต์ของข้อความ เหมาะสำหรับการทำงานแบบไดนามิกกับโครงสร้างตารางที่ไม่แน่นอน

Table.FromColumns

Table.FromColumns สร้างตารางจากลิสต์ของลิสต์ โดยแต่ละลิสต์จะเป็นคอลัมน์หนึ่ง เหมาะกับข้อมูล column-oriented จาก API หรือ JSON

Table.FromRows

Table.FromRows สร้างตารางจาก List ของ List โดยแต่ละ List ย่อยแทนข้อมูลในแถวหนึ่ง คล้ายกับการ transpose ข้อมูลแบบแถว-คอลัมน์ แต่ทำให้เป็นตารางจริงในทันที

Table.ToRows

Table.ToRows แปลงตารางให้เป็น List ของ List โดยแต่ละ List ย่อยแทนข้อมูล 1 แถว ไม่มีชื่อคอลัมน์ เหมาะสำหรับส่งออกข้อมูลเป็น JSON/CSV หรือประมวลผลแถวโดยไม่สนใจชื่อฟิลด์

List functions (1)
List.Transform

List.Transform ใช้สำหรับสร้างลิสต์ใหม่โดยนำฟังก์ชันไปประมวลผลแต่ละตัวในลิสต์เดิม

Comments

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