---
title: "สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊"
url: https://www.thepexcel.com/excel-running-total/
type: post
date: 2025-05-06
updated: 2025-12-27
author: Sira Ekabut
categories: [Excel, Power Query, Excel Advanced Formula, Python in Excel]
tags: [SUMIFS, List.Count, python, List.Generate, FILTER, LAMBDA, Table.Buffer, running, Table.ColumnNames, SUM, total, Table.FromColumns, SCAN, Table.ToColumns, max, List.Sum, Table.TransformColumnTypes, dax, Table.AddColumn, Value.ReplaceType, m code, Table.SelectRows, Excel.CurrentWorkbook, List.Buffer]
---

# สารพัดวิธีคำนวณ Running Total ใน Excel: ตั้งแต่วิธีพื้นฐานไปจนถึงขั้นสูง 📊

เคยสงสัยไหมว่า “ยอดสะสม” (Running Total) ใน Excelทำได้กี่วิธี? ซึ่งแน่นอนว่าคงมีหลายทางเลือกมากมาย! แต่สิ่งที่ผมอยากให้ลองทำ คือ **การลองแก้โจทย์เดียวกันด้วยวิธีที่ต่างกันนี่แหละ คือหนึ่งในวิธีฝึก Excel ให้เก่งขึ้นแบบก้าวกระโดด!**

 

บทความนี้จะพาไปดูสารพัดวิธีคำนวณ Running Total ที่ครอบคลุมทุกระดับ ตั้งแต่มือใหม่จนถึงสายการใช้เครื่องมือขั้นสูงแบบจัดเต็มครับ!

 
- **มือใหม่**: เรียนรู้การใช้ SUM และ SUMIFS แบบเข้าใจง่าย
- **สายวิเคราะห์**: ลอง Pivot Table หรือสูตร Array สุดทันสมัย
- **ขั้นโปร**: จัดเต็มด้วย Python, Power Query (M Code) และ DAX
- **เปรียบเทียบทุกวิธี:** รู้ว่าแบบไหนเหมาะกับงานคุณ

 

## ข้อมูลตัวอย่างที่ใช้

 

เราเอาข้อมูลไว้ในพื้นที่ A2:B10 นะครับ

 

| OrderID | Amount |
| --- | --- |
| Order0001 | 200 |
| Order0002 | 150 |
| Order0003 | 75 |
| Order0004 | 125 |
| Order0005 | 50 |
| Order0006 | 100 |
| Order0007 | 250 |
| Order0008 | 300 |

 

และเราอาจมีบางเคสทำเป็น Table จะสะดวกกว่า โดยเราจะทำเป็น Table ชื่อ Sales นะครับ

 ![1](https://www.thepexcel.com/wp-content/uploads/2025/05/data-001.png) 

เราจะคำนวณยอดสะสมของคอลัมน์ **Amount** โดยอิงจากลำดับของ **OrderID** ไปทีละวิธีกันเลย!

 

---

 

## 1. วิธีพื้นฐานโดยใช้สูตรปกติ (Regular Formula)

 

วิธีนี้เหมาะสำหรับผู้เริ่มต้น เพราะง่ายและรวดเร็ว ไม่ต้องใช้เครื่องมือพิเศษใดๆ

 

### 1.1 วิธีพื้นฐานแบบดั้งเดิม (ใช้ SUM)

 

เพิ่มคอลัมน์ใหม่ชื่อ “RunningTotal” ในคอลัมน์ C โดยในเซลล์ C3 (แถวแรกของข้อมูล) ใส่สูตร`:`

 

```
=SUM($B$3:B3)
```

 
- `$B$3` ล็อกแถวเริ่มต้นให้คงที่
- `B3` จะขยายไปตามแถวที่สูตรถูก Copy ลงมา

 

ลากสูตรลงไปจนถึงแถวสุดท้าย (C10) จะได้ตามรูป

 ![2](https://www.thepexcel.com/wp-content/uploads/2025/05/data-000.png) 

#### ผลลัพธ์:

 
- C3: 200
- C4: 350 (200+150)
- C5: 425 (200+150+75)
- และต่อไปเรื่อยๆ

 

**Tips** : เคสนี้ ถ้าข้อมูลเป็น Table จะใช้ [@Amount] ที่เป็น Structure Reference ของ Table วิธีนี้จะไม่ Work ยังไงก็ต้องใช้การอ้างอิงด้วย Cell Reference ตามปกติอยู่ดีนะ แต่ข้อดีของการทำเป็น Table คือสูตรจะถูก Copy ลงมาโดยอัตโนมัตินั่นเอง

 ![3](https://www.thepexcel.com/wp-content/uploads/2025/05/data-000-1.png) 

วิธี 1.1 นี้เหมาะกับตารางเล็กๆ และไม่ซับซ้อน แต่ถ้าข้อมูลเยอะ อาจเริ่มช้าได้ เพราะต้องบวกการสะสมใหม่ทั้งหมดซ้ำหลายรอบโดยไม่จำเป็น (ลองสังเกตวิธีคิดในสูตร)

 

### 1.2 : ใช้สูตรอ้างอิงข้อมูลสะสมก่อนหน้า

 

เพื่อแก้ปัญหาความไม่มีประสิทธิภาพจากวิธีแรก และใช้ประโยชน์จากตาราง Excel (Structured Table) เราสามารถปรับสูตรให้อ้างอิงยอดสะสมจากแถวก่อนหน้าได้ง่ายขึ้น

 

ในเซลล์ C3 (แถวแรกของข้อมูล) ใส่สูตร:

 

```
=SUM(C2)+[@Amount]
```

 
- SUM(C2) อ้างอิงยอดสะสมจากแถวก่อนหน้า (ถ้า C2 เป็นหัวตารางที่เป็น text เช่น “RunningTotal” ฟังก์ชัน SUM จะไม่สนใจค่า text โดยอัตโนมัติอยู่แล้ว)
- [@Amount] อ้างอิงค่า Amount ในแถวปัจจุบันโดยใช้ Structured Reference

 

กด Enter สูตรจะถูกเติมลงในทุกแถวของคอลัมน์ในตารางอัตโนมัติ

 

#### ผลลัพธ์:

 ![4](https://www.thepexcel.com/wp-content/uploads/2025/05/data-002.png) 
- C3: 200
- C4: 350 (200+150)
- C5: 425 (350+75)
- และต่อไปเรื่อยๆ

 

#### ข้อดี:

 

วิธีนี้เร็วกว่าวิธีแรก เพราะคำนวณเฉพาะการบวกเพิ่มจากยอดก่อนหน้า ไม่ต้องบวกใหม่ทั้งหมด และใช้ Structured Reference ทำให้สูตรอ่านง่ายและยืดหยุ่น เหมาะกับข้อมูลขนาดใหญ่กว่า

 

### 1.3 ใช้ `SUMIFS` เพื่อยึดตาม OrderID แม้เรียงข้อมูลใหม่

 

อีกวิธีนึงที่สามารถใช้ได้ดี คือ SUMIFS ซึ่งใช้ประโยชน์จากการอ้างอิง OrderID มาช่วยในการคำนวณสะสมได้

 

```
=SUMIFS(Sales[Amount], Sales[OrderID], "<=" & [@OrderID])
```

 

**คำอธิบาย**:

 
- ฟังก์ชัน `SUMIFS` จะบวกเฉพาะค่าจากคอลัมน์ `Amount` ที่ `OrderID` มีค่าน้อยกว่าหรือเท่ากับแถวปัจจุบัน
- ใช้ `[@OrderID]` เพื่ออ้างอิงค่าในแถวปัจจุบัน
- ข้อดีคือ **ไม่ต้องอาศัยลำดับแถวใน Excel** จะเรียงข้อมูลใหม่ หรือ Filter ยังไง Running Total ก็ยังคำนวณได้ถูกต้องเสมอ (เพราะดูจากค่า ไม่ใช่ตำแหน่ง)

 

📌 **เหมาะกับใคร?**

 
- เหมาะกับงานที่มีการ Sort หรือ Filter ข้อมูลบ่อยๆ
- ใช้ใน Table ได้เต็มรูปแบบ ทำงานร่วมกับ Structured Reference ได้
- ไม่สนตำแหน่งของแถว ใช้ได้แม้ Sort / Filter / สลับลำดับข้อมูล
- อย่างไรก็ตาม การคำนวณแบบนี้จะไม่สามารถเอายอดสะสมก่อนหน้ามาคิดได้นะ ต้องคำนวณใหม่ทุกตัว (เพื่อรองรับการเรียงใหม่)

 

---

 

## 2. ใช้ Pivot Table: วิธีที่สะดวกสำหรับการวิเคราะห์

 

ถ้าคุณชอบเครื่องมือที่ช่วยจัดการข้อมูลอัตโนมัติแบบง่ายๆ โดยไม่ต้องเขียนสูตรเลย Pivot Table คือตัวเลือกที่ดี

 

#### ขั้นตอน:

 
1. เลือก Table ที่ทำไว้
2. ไปที่แท็บ **Insert** > **Pivot Table** > เลือก “New Worksheet”
3. ใน Pivot Table Fields: 
    - ลาก “OrderID” ไปที่ **Rows**
    - ลาก “Amount” ไปที่ **Values** (เลือกให้เป็น Sum of Amount)
4. คลิกที่ “Sum of Amount” ใน Values > เลือก **Value Field Settings**
5. ไปที่ **Show Values As** > เลือก **Running Total In** > Base Field เลือก “OrderID”
6. กด OK

 

#### ผลลัพธ์:

 ![5](https://www.thepexcel.com/wp-content/uploads/2025/05/data-003.png) 

Pivot Table จะแสดงยอดสะสมตามลำดับ OrderID อัตโนมัติ โดยไม่ต้องเขียนสูตรเอง

 

วิธีนี้เหมาะกับการวิเคราะห์ข้อมูลแบบรวดเร็ว และสามารถปรับแต่งเพิ่มเติมได้ แต่ข้อเสียคือ โครงสร้างตารางมันต้องมีหน้าตาแบบ PivotTable เท่านั้น และต้องมีการ Refresh ผลลัพธ์ถึงจะอัปเดทตามข้อมูลใหม่

 

---

 

## 3. ใช้สูตร Array: วิธีทันสมัยใน Excel 365/2021

 

สำหรับผู้ใช้ Excel เวอร์ชันใหม่ (365 หรือ 2021) สามารถใช้ฟังก์ชัน **SCAN** เพื่อคำนวณยอดสะสมแบบอาร์เรย์ได้

 

แต่เวลาเราใช้ Dynamic Arrays แล้วกรณีผลลัพธ์ออกมาหลายค่า จะใส่ไว้ใน Table ไม่ได้ ดังนั้นมันจะเหมาะกับกรณีที่ผลลัพธ์ออกมาในบริเวณที่เป็นข้อมูลปกติที่ไม่ได้เป็น Table ซะมากกว่า

 

#### ขั้นตอน:

 

ในเซลล์ C3 ใส่สูตร: SCAN + LAMBDA มาช่วยได้

 

```
SCAN(initial_value,array,function)
=SCAN(0, Sales[Amount], LAMBDA(acc,val, acc+val))
```

 
- `0` คือค่าเริ่มต้นของผลรวม
- `Sales[Amount]` คือช่วงข้อมูล Amount ซึ่งเป็น Array ที่มีหลายค่า
- `LAMBDA(acc, val, acc+val)` บอกให้บวกสะสมไปเรื่อยๆ 
    - acc = accum value ก่อนหน้า (ค่าเริ่มต้นคือ initial_value คือ 0)
    - val = ค่าแต่ละตัวที่กำลังไล่ SCAN อยู่
    - ชื่อตัวแปรจะตั้งอะไรก็ได้ ไม่จำเป็นต้องใช้ acc กับ val นะ

 

กด Enter สูตรจะคำนวณยอดสะสมทั้งหมดในครั้งเดียว

 ![6](https://www.thepexcel.com/wp-content/uploads/2025/05/data-005.png) 

#### ผลลัพธ์:

 
- C3: 200
- C4: 350 (200+150)
- C5: 425 (350+75)
- และต่อไปเรื่อยๆ

 

วิธีนี้ก็สะดวก ไม่ต้องลากสูตร และทำงานได้มีประสิทธิภาพ เพราะเอาผลลัพธ์ที่สะสมไว้มาใช้ต่อได้

 

---

 

## 4. ใช้ Python in Excel: วิธีที่ง่ายกว่าที่คิด

 

ในเมื่อ Excel รุ่นใหม่อย่าง Excel 365 สามารถใช้ Python ที่เหมาะกับการคำนวณขั้นสูงได้แล้ว! เรามาลองใช้ Python คำนวณ Running Total ดู

 

#### ขั้นตอน:

 

ไปที่ช่อง Cell ว่างๆ พิมพ์ =PY แล้ว Tab เพื่อเข้าสู่โหมดเขียน Code ด้วย Python

 

ใส่โค้ด

 

```python
df=xl("Sales[#All]", headers=True)
df['RunningTotal'] = df['Amount'].cumsum() 
df
```

 

กด Ctrl+Enter เพื่อรัน Code

 

#### ผลลัพธ์:

 

ตอนแรกจะแสดงเป็น Python Object ก่อน

 ![7](https://www.thepexcel.com/wp-content/uploads/2025/05/data-007.png) 

ให้กดเปลี่ยนเป็น Excel Value มันจะได้ Spill ออกมาเป็น Dynamic Array (กด Ctrl+Shift+Alt+M ก็ได้)

 ![8](https://www.thepexcel.com/wp-content/uploads/2025/05/data-008-1024x364.png) 

ตารางจะแสดงคอลัมน์ “RunningTotal” พร้อมยอดสะสม

 

วิธีนี้ได้ผลลัพธ์ออกมาง่ายๆ เลย เพราะมีฟังก์ชันสำเร็จรูปอย่าง .cumsum() มาช่วยอยู่แล้วนั่นเอง

 

---

 

## 5. ใช้ Power Query (M Code)

 

Power Query เหมาะกับการจัดการข้อมูลที่มีหลายขั้นตอน แล้วบันทึกเป็น Step การทำงานไว้ได้ หากต้องการทำซ้ำ สามารถกด Refresh ได้เลย

 

เลือกตารางข้อมูล > ไปที่ **Data** > **Get & Transform Data** > **From Table/Range**

 

ใน Power Query Editor ใช้โค้ด M ดังนี้

 

### 5.1 วิธี M Code สร้าง List ที่เปลี่ยนช่วงข้อมูลให้เยอะขึ้นเรื่อยๆ

 

```
let
    Source = Excel.CurrentWorkbook(){[Name="Sales"]}[Content],
    AddRunningTotal = Table.AddColumn(Source, "RunningTotal", (current) => 
        List.Sum(
            Table.SelectRows(Source, each [OrderID] <= current[OrderID])[Amount]
        ), type number)
in
    AddRunningTotal
```

 

#### หลักการ:

 
- สูตร (current) => List.Sum(Table.SelectRows(Source, each [OrderID] <= current[OrderID])[Amount])   
    
  จะสร้าง List ของ Amount โดย Filter OrderID ที่ไม่เกิน OrderID ปัจจุบัน แล้วบวกผลรวม
- ตัวอย่าง: ที่แถว Order0003 จะได้ List [200, 150, 75] แล้วคำนวณเป็น 425

 ![9](https://www.thepexcel.com/wp-content/uploads/2025/05/data-006-1024x621.png) 

#### ข้อสังเกต:

 

วิธีนี้ยังไม่ค่อยมีประสิทธิภาพ เพราะมีการคำนวณซ้ำซ้อนในแต่ละแถว (ถ้าเปิดดู List ก่อนใช้ List.Sum จะเห็นชัดว่าเป็น List ที่ซ้ำกันในแต่ละรอบ)

 

---

 

### 5.2 วิธี M Code แบบมีประสิทธิภาพ (แต่ยากนะ)

 

เพื่อลดการคำนวณซ้ำซ้อน เราจะใช้การสะสม (Accumulation) ด้วย List.Generate เพื่อคำนวณ Running Total ทีละแถว

 

#### ขั้นตอน:

 

ใช้โค้ด M ดังนี้ จะ Efficient ขึ้นเยอะ

 

```
let
    Source = Excel.CurrentWorkbook(){[Name="Sales"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source, {{"OrderID", type text}, {"Amount", Int64.Type}}),
    MyData = Table.Buffer(#"Changed Type"),
    AmountList = List.Buffer(MyData[Amount]),
    RunningTotalList = List.Generate(
        () => [Total = AmountList{0}, Index = 0],
        each [Index] < List.Count(AmountList), 
        each [Total = List.Sum({[Total], AmountList{[Index] + 1}}), Index = [Index] + 1], 
        each [Total]
    ),
    TransfromToList = Table.ToColumns(MyData) & {Value.ReplaceType(RunningTotalList, type {number})},
    Result = Table.FromColumns(TransfromToList, Table.ColumnNames(MyData) & {"Running Total"})
in
    Result
```

 ![10](https://www.thepexcel.com/wp-content/uploads/2025/05/data-013-1024x365.png) 

คลิก **Close & Load** เพื่อโหลดข้อมูลกลับไปที่ Excel

 

#### หลักการทำงานของโค้ด

 
- **Source **: ดึงตาราง “Sales” จาก Excel มาเป็นตารางใน Power Query
- **#”Changed Type”** : กำหนด Data Type
- **MyData** : ใช้ Table.Buffer เพื่อเก็บตารางไว้ในหน่วยความจำ ลดการประเมินซ้ำเมื่ออ้างอิง MyData ภายหลัง (เช่น ดึง Amount, Table.ToColumns)
- **AmountList** : ดึงคอลัมน์ Amount ออกมาเป็น List (เช่น {200, 150, 75, …}) และใช้ List.Buffer เพื่อเก็บในหน่วยความจำ
- **RunningTotalList** : คำนวณ Running Total ด้วย List.Generate ซึ่งจะอธิบายถัดไป
- **TransfromToList** : แปลงตารางเป็น List และเพิ่ม Running Total โดยกำหนด Type เป็น Number 
    - Table.ToColumns(MyData): แปลงตาราง MyData เป็น List ของคอลัมน์ (เช่น {{OrderID1, OrderID2, …}, {Amount1, Amount2, …}})
    - Value.ReplaceType(RunningTotalList, type {number}): กำหนด Data Type ให้ RunningTotalList เป็น List ของ number
    - รวม RunningTotalList เข้ากับ List ของคอลัมน์จาก MyData
- **Result ** : สร้างตารางผลลัพธ์ 
    - ใช้ Table.FromColumns เพื่อสร้างตารางใหม่จาก TransfromToList
    - ใช้ชื่อคอลัมน์จาก Table.ColumnNames(MyData) และเพิ่ม Running Total

 

#### ส่วนสำคัญ

 

ส่วนสำคัญ คือ Part ที่ เป็น Running Total List ที่ใช้สูตรนี้ ที่ทำให้มัน Efficient ขึ้นมาก

 

```
= List.Generate(
        () => [Total = AmountList{0}, Index = 1],
        each [Index] <= List.Count(AmountList),
        each [Total = [Total] + AmountList{[Index]}, Index = [Index] + 1],
        each [Total]
    )
```

 

#### หลักการ ของ **RunningTotalList**

 
- เริ่มต้นที่ Total = AmountList{0} (Amt แรก คือ 200) และ Index = 0
- วนลูปจนถึง Index < List.Count(AmountList) (เช่น 8 สมาชิก วนถึง Index = 7)
- คำนวณ Total โดยใช้ List.Sum({[Total], AmountList{[Index] + 1}}), **บวกยอดสะสมจาก Total เดิม** และ Amount ใหม่ของแถวถัดไป
- คืนค่า Total เป็น List ของ Running Total (เช่น {200, 350, 425, …})

 ![11](https://www.thepexcel.com/wp-content/uploads/2025/05/data-012.png) 

#### ผลลัพธ์:

 
- RunningTotal จะแสดงยอดสะสมตามลำดับ (200, 350, 425, 550, 600, 700, 950, 1250)

 

#### ข้อดี:

 

วิธีนี้ลดการคำนวณซ้ำซ้อนเมื่อเทียบกับวิธี 4.1 เพราะคำนวณสะสมทีละครั้งแทนการ Filter ใหม่ทุกแถว เหมาะกับข้อมูลขนาดใหญ่

 

---

 

## 6. ใช้ DAX

 

DAX เหมาะสำหรับการทำงานใน Power Pivot (หรือ Power BI) โดยที่เราทำได้ 2 วิธี คือ ใช้ DAX สร้าง New Column หรือ สร้าง New Measure ก็ได้

 

### 6.1 DAX New Column

 

DAX New Column จะคำนวณ Running Total และเก็บผลลัพธ์เป็นคอลัมน์ใหม่ในตาราง Sales

 

กดสร้าง New Column ใน Data Model ชื่อ Running Total แล้วใส่สูตรนี้

 

#### โค้ด DAX สำหรับ New Column

 

```
= 
VAR CurrentID=Sales[OrderID]
VAR AccumTable=FILTER(
        ALL(Sales[Amount],Sales[OrderID]) ,
        Sales[OrderID] <= CurrentID)    
RETURN
    SUMX(AccumTable,Sales[Amount])
```

 ![12](https://www.thepexcel.com/wp-content/uploads/2025/05/data-011.png) 

#### การทำงาน

 
- VAR CurrentID = Sales[OrderID]: เก็บค่า OrderID ของแถวปัจจุบัน (เช่น Order0001)
- VAR AccumTable = FILTER… 
    - ALL(Sales[Amount], Sales[OrderID]): ล้างบริบทการกรองและเลือกเฉพาะคอลัมน์ Amount และ OrderID
    - Sales[OrderID] <= CurrentID: กรองแถวที่มี OrderID น้อยกว่าหรือเท่ากับ CurrentID
- SUMX(AccumTable, Sales[Amount]): รวมค่า Amount จากตาราง AccumTable ที่กรองแล้ว

 
- 

 

#### ข้อดี

 
- โค้ดอ่านง่ายขึ้นด้วย VAR
- เหมาะสำหรับการเก็บค่า Running Total แบบคงที่ไว้ในตารางเลย ตอนเรียกดูรายงานจะเร็ว

 

#### ข้อควรระวัง

 
- ต้องเรียงลำดับ OrderID ให้ถูกต้อง (เช่น ใช้ Power Query เพื่อเรียงลำดับก่อน)
- ค่าเหล่านี้จะไม่เปลี่ยนตาม Filter Context ของรายงานแล้ว

 

---

 

### 6.2 DAX Measure (ใช้ VAR)

 

DAX Measure จะคำนวณ Running Total ตามบริบทการกรอง (เช่น ใน Visual หรือ PivotTable) โดยไม่เก็บผลลัพธ์ในตารางเลย

 

#### โค้ด DAX สำหรับ New Measure

 

```
Running Total Measure = 
VAR CurrentID = MAX(Sales[OrderID])
RETURN
CALCULATE(
    SUM(Sales[Amount]),
        Sales[OrderID] <= CurrentID
)
```

 ![13](https://www.thepexcel.com/wp-content/uploads/2025/05/data-010-1024x463.png) 

#### การทำงาน

 
- VAR CurrentID = MAX(Sales[OrderID]): เก็บค่า OrderID สูงสุดในบริบทการกรองปัจจุบัน (เช่น ถ้าใน PivotTable กรองถึง Order0003, CurrentID จะเป็น Order0003)
- CALCULATE: คำนวณผลรวมของ Amount โดยล้าง Filter Context เกี่ยวกับ OrderID แล้วค่อยกรองแถวใน Sales โดยเลือกเฉพาะแถวที่มี OrderID น้อยกว่าหรือเท่ากับ CurrentID
- **ผลลัพธ์**: 
    - ถ้าใน Visual กรองถึง Order0003: 200 + 150 + 75 = 425
    - ถ้าแสดงทั้งตาราง: 200 + 150 + 75 + 125 + 50 + 250 + 100 + 300 = 1250

 

#### ข้อดี

 
- โค้ดชัดเจนด้วย VAR
- คำนวณแบบไดนามิกตามบริบทการกรอง
- ประหยัดหน่วยความจำ เพราะไม่เก็บในตาราง

 

#### ข้อควรระวัง

 
- ต้องใช้ใน Visual หรือ PivotTable ที่มีการกรอง OrderID
- อาจช้าลงถ้ามีการกรองจำนวนมาก

 

---

 

### การเปรียบเทียบ

 

| คุณสมบัติ | New Column (VAR) | Measure (VAR) |
| --- | --- | --- |
| **ที่เก็บข้อมูล** | อยู่ในตาราง | คำนวณแบบไดนามิก |
| **ประสิทธิภาพ** | อาจช้าตอน refresh    แต่เร็วตอนดูรายงาน | เร็วตอน refresh    แต่อาจช้าตอนดูรายงาน |
| **การใช้งาน** | แสดงผลคงที่ | วิเคราะห์แบบโต้ตอบได้ |

 

#### คำแนะนำ

 
- **New Column**: ใช้เมื่อต้องการค่า Running Total แบบคงที่และไม่เปลี่ยนแปลงบ่อย
- **Measure**: ใช้เมื่อต้องการวิเคราะห์แบบไดนามิกหรือกรองข้อมูลใน Visual

 

## 📌 สรุป: วิธีไหนเหมาะกับใคร?

 

| วิธี | จุดเด่น | เหมาะกับกรณี |
| --- | --- | --- |
| 1.1 SUM ปกติ | เข้าใจง่าย มือใหม่ใช้ได้ทันที | ตารางเรียงลำดับแน่นอน |
| 1.2 SUM + [@Amount] | ลากสูตรอัตโนมัติ, อ่านง่าย | ใช้กับ Table ได้ดี   และประสิทธิภาพสูง |
| 1.3 SUMIFS | ไม่พึ่งลำดับแถว, คงผลลัพธ์เดิมไว้ได้แม้มีการสลับลำดับ | ข้อมูลถูก Sort ใหม่แล้วไม่พัง |
| 2. Pivot Table | ไม่ต้องเขียนสูตร | วิเคราะห์ข้อมูลแบบ เปลี่ยนมุมมองได้สะดวก |
| 3. SCAN (Array) | เขียนครั้งเดียว คำนวณทั้งชุด | งานไม่อยู่ใน Table / ชอบสูตรใหม่ |
| 4. Python | เขียนสั้น ใช้ .cumsum() | เขียน Script/Advanced Data Analysis |
| 5.1 Power Query    (Filter) | ขั้นตอนชัดเจน | เหมาะในขั้นตอนข้อมูล ที่ข้อมูลไม่เยอะ |
| 5.2 Power Query (Accumulate) | เร็วกว่าแบบ Filter | เหมาะในขั้นตอนข้อมูล ใช้กับข้อมูลจำนวนมากได้ |
| 6.1 DAX Column | ค่าเก็บคงที่ ดูรายงานเร็ว | สร้าง Data Model |
| 6.2 DAX Measure | Dynamic ตาม Context | วิเคราะห์ใน PowerPivot / Visual |

 

## ส่งท้าย

 

Running Total อาจดูเหมือนเรื่องเล็กๆ แต่พอเราได้ลองใช้หลายๆ วิธี จะพบว่าแต่ละแบบมี “แนวคิดเบื้องหลัง” ที่แตกต่างกัน และนั่นแหละคือกุญแจสู่การเป็น “คนเก่ง Excel” เลยล่ะ!  
ลองใช้หลายเทคนิคกับข้อมูลจริงดูนะ แล้วคุณจะเข้าใจ Excel ในแบบที่ลึกและสนุกยิ่งขึ้นแน่นอนครับ 😊

---

_Source: [https://www.thepexcel.com/excel-running-total/](https://www.thepexcel.com/excel-running-total/)_
