Thep Excel

Table.Split – แบ่งตารางเป็น Page

แบ่งตารางออกเป็นรายการของตารางย่อยตามจำนวนแถวที่กำหนด เหมาะสำหรับ Pagination และ Batch Processing

=Table.Split(table as table, pageSize as number) as list

By ThepExcel AI Agent
6 December 2025

Function Metrics


Popularity
5/10

Difficulty
4/10

Usefulness
6/10

Syntax & Arguments

=Table.Split(table as table, pageSize as number) as list

Argument Type Required Default Description
table table Yes ตารางที่ต้องการแบ่ง
pageSize number Yes จำนวนแถวต่อหนึ่งส่วน (Page Size) ต้องเป็นตัวเลขบวก

How it works

Pagination

Pagination

Batch Processing

Batch Processing

Examples

แบ่งทีละ 2 แถว
let Source = #table({"ID"}, {{1}, {2}, {3}, {4}, {5}}), Split = Table.Split(Source, 2) in Split
แบ่งข้อมูล 5 แถวออกเป็นชุดละ 2 แถว จะได้ 3 ตาราง (2, 2, 1 แถว) – ตารางสุดท้ายเหลือแถวน้อยเพราะหารไม่ลงตัว
Power Query Formula:

let
    Source = #table({"ID"}, {{1}, {2}, {3}, {4}, {5}}),
    Split = Table.Split(Source, 2)
in
    Split

Result:

List of 3 Tables: {2 rows}, {2 rows}, {1 row}

Batch Processing (ประมวลผลทีละชุด)
let Source = #table({"Value"}, List.Zip({1..100})), // แบ่งเป็นชุดละ 10 แถว Batches = Table.Split(Source, 10), // นำไปประมวลผล (เช่น: นับจำนวนแถว) RowCounts = L…
แบ่งข้อมูล 100 แถว เป็น 10 ชุด (ชุดละ 10 แถว) แล้วนำไปประมวลผลต่อด้วย List.Transform
Power Query Formula:

let
    Source = #table({"Value"}, List.Zip({1..100})),
    // แบ่งเป็นชุดละ 10 แถว
    Batches = Table.Split(Source, 10),
    // นำไปประมวลผล (เช่น: นับจำนวนแถว)
    RowCounts = List.Transform(Batches, each Table.RowCount(_))
in
    RowCounts

Result:

{10, 10, 10, 10, 10, 10, 10, 10, 10, 10}

แบ่งข้อมูลเพื่อส่ง API
let CustomerData = Table.FromRecords({ [ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"], [ID=4, Name="David"], [ID=5, Name="Eve"], [ID=6, Name="…
ตัวอย่างการแบ่งข้อมูลเพื่อส่ง API ที่มีข้อจำกัดจำนวนรายการ – จะส่ง 3 ครั้ง ครั้งละ 2 รายการ
Power Query Formula:

let
    CustomerData = Table.FromRecords({
        [ID=1, Name="Alice"], [ID=2, Name="Bob"], [ID=3, Name="Charlie"],
        [ID=4, Name="David"], [ID=5, Name="Eve"], [ID=6, Name="Frank"]
    }),
    // API รับข้อมูลได้ทีละ 2 รายการ
    Pages = Table.Split(CustomerData, 2),
    // ส่งข้อมูลทีละหน้า (ตัวอย่าง)
    BatchText = List.Transform(Pages, each "Batch: " & Text.From(Table.RowCount(_)) & " rows")
in
    BatchText

Result:

{"Batch: 2 rows", "Batch: 2 rows", "Batch: 2 rows"}

แบ่งข้อมูลแล้วแปลงเป็น Table List
let Source = Table.FromList( {"A", "B", "C", "D", "E", "F", "G"}, Splitter.SplitByNothing(), {"Letter"} ), SplitPages = Table.Split(Source, 3), // หากต้องการ Li…
แบ่งตารางแล้วแปลง rows เป็น nested lists สำหรับการประมวลผลที่ต้องการ row-by-row structure
Power Query Formula:

let
    Source = Table.FromList(
        {"A", "B", "C", "D", "E", "F", "G"},
        Splitter.SplitByNothing(),
        {"Letter"}
    ),
    SplitPages = Table.Split(Source, 3),
    // หากต้องการ List of Lists เพื่อจัดการต่อไป
    AsList = List.Transform(SplitPages, each Table.ToRows(_))
in
    AsList

Result:

List of lists: {{"A"}, {"B"}, {"C"}}, {{"D"}, {"E"}, {"F"}}, {{"G"}}

FAQs

ถ้า pageSize มากกว่าจำนวนแถวทั้งหมด จะเกิดอะไร?

จะส่งกลับ list ที่มีตารางเดียว (ตารางต้นฉบับ) เช่น ถ้าตารางมี 5 แถว แต่กำหนด pageSize=100 ผลลัพธ์จะเป็น list ที่มีตารางเดียวที่มี 5 แถว

ถ้า pageSize เป็น 0 หรือจำนวนลบ จะเกิดอะไร?

จะเกิด error: “Expression.Error: The value of pageSize parameter of Table.Split must be greater than 0” – ต้องใช้ pageSize ที่เป็นตัวเลขบวก

Table.Split เหมาะสำหรับตารางขนาดเท่าไหร่?

สามารถใช้กับตารางขนาดใดก็ได้ แต่มีประโยชน์มากโดยเฉพาะตารางที่มีแถวนับพันหรือนับหมื่น เพราะช่วยให้ประมวลผล batch ได้ง่ายและหลีกเลี่ยงโอเวอร์โหลด

ความต่างระหว่าง Table.Split กับ Table.Group คืออะไร?

Table.Split แบ่งตามจำนวนแถว (ตำแหน่ง) ส่วน Table.Group แบ่งตามค่าในคอลัมน์ (หมวดหมู่) – Table.Split สำหรับ pagination, Table.Group สำหรับ grouping ตามข้อมูล

Resources & Related

Additional Notes

ฟังก์ชัน Table.Split ใช้สำหรับแบ่งตารางออกเป็นรายการของตารางย่อย (List of Tables) ตามขนาด Page Size (จำนวนแถว) ที่กำหนด เหมาะสำหรับการทำ Pagination หรือแบ่งข้อมูลเพื่อประมวลผลทีละชุด (Batch Processing).

ที่เจ๋งของ Table.Split คือมันทำให้คุณไม่ต้องปวดหัวกับเรื่อง modulo หรือการคำนวณหน้าด้วยตัวเอง ถ้าตารางมี 100 แถวและคุณต้องการแบ่งทีละ 30 แถว มันจะสร้างตารางที่มี 30, 30, 30, 10 แถวให้โดยอัตโนมัติ

ส่วนตัวผมมักใช้มันตอน API มีข้อจำกัดจำนวนรายการต่อครั้ง (เช่น 1000 รายการ) และข้อมูลมีเยอะเกินไป ก็แบ่งด้วย Table.Split แล้วใช้ List.Transform ประมวลผลแต่ละ batch ครับ 😎

Leave a Reply

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