---
title: Table.FillDown – เติมค่าว่างด้วยค่าจากแถวด้านบน
url: https://www.thepexcel.com/functions/power-query/table-functions/table-filldown/
type: function-explainer
program: Power Query
syntax: "= Table.FillDown(table as table, columns as list) as table"
date: 2025-12-03
updated: 2025-12-20
scores:
  popularity: 8
  difficulty: 3
  usefulness: 8
---

# Table.FillDown – เติมค่าว่างด้วยค่าจากแถวด้านบน

> Table.FillDown เติมเต็มค่า null ด้วยค่าจากแถวด้านบน (forward fill) เหมาะสำหรับข้อมูลที่มีการ merge c

## คำอธิบาย

Table.FillDown เติมเต็มค่า null ด้วยค่าจากแถวด้านบน (forward fill) เหมาะสำหรับข้อมูลที่มีการ merge cell หรือจัดกลุ่มข้อมูลแบบ hierarchical ทำให้ได้ตารางที่สมบูรณ์พร้อมใช้ต่อได้เลย

## Syntax

```excel
= Table.FillDown(table as table, columns as list) as table
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| table | Yes | table |  | ตารางข้อมูลต้นฉบับที่มีค่า null ที่ต้องการเติมเต็ม |
| columns | Yes | list |  | List ของชื่อคอลัมน์ที่ต้องการ fill down (เช่น {"Department", "Category"}) |

## ตัวอย่าง

### 1. เติมคอลัมน์ Category เดี่ยว

```excel
= let
    Source = #table(
        {"Category", "Item", "Price"},
        {{"Fruit", "Apple", 10}, {null, "Banana", 5}, {null, "Orange", 8}, {"Veg", "Carrot", 3}, {null, "Corn", 4}}
    ),
    Filled = Table.FillDown(Source, {"Category"})
in
    Filled
```

**ผลลัพธ์:** `Table: (Fruit, Apple, 10), (Fruit, Banana, 5), (Fruit, Orange, 8), (Veg, Carrot, 3), (Veg, Corn, 4)`

null ในคอลัมน์ Category จะเติมด้วยค่า "Fruit" จนกว่าจะเจอค่า "Veg" ที่ต่างกัน - ทำให้ข้อมูลสมบูรณ์แล้วสามารถ group หรือ analyze ได้

### 2. เติมหลายคอลัมน์พร้อมกัน (ข้อมูล Hierarchical)

```excel
= let
    Source = #table(
        {"Company", "Department", "Employee", "Salary"},
        {{"TechCorp", "IT", "Alice", 50000}, {null, null, "Bob", 48000}, {null, "HR", "Carol", 45000}, {null, null, "Dave", 46000}, {"FineCorp", "Finance", "Eve", 55000}}
    ),
    Filled = Table.FillDown(Source, {"Company", "Department"})
in
    Filled
```

**ผลลัพธ์:** `Table: (TechCorp, IT, Alice, 50000), (TechCorp, IT, Bob, 48000), (TechCorp, HR, Carol, 45000), (TechCorp, HR, Dave, 46000), (FineCorp, Finance, Eve, 55000)`

ระบุสองคอลัมน์ {"Company", "Department"} ทำให้ null ในทั้ง Company และ Department จะเติมด้วยค่าจากด้านบน - ข้อมูล hierarchical สมบูรณ์แล้ว สามารถ group by ได้เลย

### 3. แก้ข้อมูลจาก Excel ที่มี Merge Cell

```excel
= let
    Source = #table(
        {"Section", "Subsection", "Item", "Qty"},
        {{"OfficeSupplies", "Writing", "Pen", 100}, {null, null, "Pencil", 50}, {null, "Paper", "A4", 200}, {null, null, "Notebook", 30}}
    ),
    Filled = Table.FillDown(Source, {"Section", "Subsection"})
in
    Filled
```

**ผลลัพธ์:** `Table: (OfficeSupplies, Writing, Pen, 100), (OfficeSupplies, Writing, Pencil, 50), (OfficeSupplies, Paper, A4, 200), (OfficeSupplies, Paper, Notebook, 30)`

Excel ที่มี merge cell มักจะ import มาด้วย null หลายตัว เมื่อใช้ FillDown ก็จะได้ข้อมูลที่สมบูรณ์ แล้วนำไป สร้าง pivot หรือ group ได้ตรงตัว

### 4. จัดการข้อมูล Sales ที่มี null ใน Date และ Region

```excel
= let
    Source = #table(
        {"Date", "Region", "Product", "Sales"},
        {{"2025-01-01", "Bangkok", "Laptop", 5}, {null, null, "Desktop", 3}, {null, null, "Monitor", 2}, {"2025-01-02", "Chiang Mai", "Laptop", 4}, {null, null, "Phone", 6}}
    ),
    Filled = Table.FillDown(Source, {"Date", "Region"})
in
    Filled
```

**ผลลัพธ์:** `Table: (2025-01-01, Bangkok, Laptop, 5), (2025-01-01, Bangkok, Desktop, 3), (2025-01-01, Bangkok, Monitor, 2), (2025-01-02, Chiang Mai, Laptop, 4), (2025-01-02, Chiang Mai, Phone, 6)`

ข้อมูล sales ที่หลายแถวใช้ Date และ Region เดียวกัน จึงเก็บเป็น null เพื่อประหยัดพื้นที่ FillDown จะช่วยเติมให้สมบูรณ์ และสามารถ pivot หรือ group by date/region ได้

### 5. ใช้หลังจาก Import เพื่อปรับเตรียมข้อมูล

```excel
= let
    Source = Csv.Document(File.Contents("C:\\data.csv"), null, ",", null, 1252),
    Headers = Table.PromoteHeaders(Source),
    Filled = Table.FillDown(Headers, {"Category", "SubCategory"}),
    Filtered = Table.SelectRows(Filled, each [Sales] > 1000)
in
    Filtered
```

**ผลลัพธ์:** `Table: ข้อมูล sales > 1000 พร้อมข้อมูล Category และ SubCategory สมบูรณ์แล้ว`

วิธีการใช้จริง: Import CSV → Promote Headers → FillDown เพื่อให้ข้อมูลสมบูรณ์ → SelectRows เพื่อกรอง - นี่คือ workflow ที่ผมใช้เกือบทุกวัน 😎

## หมายเหตุเพิ่มเติม

- FillDown ใช้ก่อน SelectRows เสมอ - ให้ข้อมูลสมบูรณ์ก่อน แล้วค่อยกรองข้อมูล

- ถ้า null อยู่หลายแถวติดต่อกัน FillDown จะดึงค่าจากแถวแรกที่ไม่ใช่ null ทำให้ได้ค่าเดียวกันหมด (forward fill behavior)

- ใช้ Table.Profile หรือเช็ค Data Preview เพื่อดูว่า null อยู่ที่ไหน ก่อน apply FillDown

- ถ้าต้องให้ null ในแถวแรก รอง fill ก่อน (FillUp) แล้วค่อย FillDown จะปลอดภัยกว่า

- ส่วนตัวผมชอบใช้ FillDown คู่กับ Table.AddColumn เพื่อสร้างคอลัมน์ key สำหรับ pivot หรือ group

## คำถามที่พบบ่อย

**Q: ถ้าแถวแรกเป็น null จะเกิดอะไรขึ้น?**

ค่า null ในแถวแรก (ที่ไม่มีค่าด้านบนให้ยืมมา) จะยังคงเป็น null นะครับ เพราะว่า FillDown จะดึงค่าจากแถวด้านบนเท่านั้น ถ้าแถวแรกมี null ไม่มีค่าด้านบนจึงไม่สามารถเติมได้ - ลองใช้ Table.ReplaceValue หรือ Table.FillUp สำหรับแถวแรก

**Q: FillDown แล้วข้อมูลเหมือนเดิม เพราะไง?**

เจอบ่อยครับ 😅 ส่วนมากเพราะว่าไม่มี null เลย ถ้าคอลัมน์ไม่มี null อยู่แล้ว FillDown ก็ไม่ต้องทำอะไร ลองเช็คด้วย View ที่ทำให้เห็น null หรือใช้ Table.Profile เพื่อดูจำนวน null ในแต่ละคอลัมน์

**Q: ต่างกับ Table.FillUp ยังไง?**

FillDown ดึงค่าจากแถวด้านบน (forward fill), FillUp ดึงค่าจากแถวด้านล่าง (backward fill) - เลือกให้เหมาะกับลักษณะข้อมูลของเราครับ

**Q: เกิด error ว่า 'column not found' เพราะไง?**

ชื่อคอลัมน์ในลิสต์ต้องตรงกับชื่อในตาราง (case-sensitive) - เช็คสะกดให้ถูกนะครับ ถ้าคอลัมน์ไม่มี FillDown จะ error ทันที

**Q: สามารถใช้กับ dynamic columns list ได้ไหม?**

ได้ครับ เช่น เก็บชื่อคอลัมน์ในตัวแปรแล้วส่งเข้า FillDown ได้เลย - เรียก List.Select หรือ Table.ColumnNames เพื่อหาคอลัมน์ที่ต้องการเติม

## ฟังก์ชันที่เกี่ยวข้อง

- [Table.FillUp – เติมค่าว่างด้วยค่าจากแถวด้านล่าง](https://www.thepexcel.com/functions/power-query/table-functions/table-fillup/)
- [Table.ReplaceValue – แทนที่ค่าในตารางตามเงื่อนไข](https://www.thepexcel.com/functions/power-query/table-functions/table-replacevalue/)
- [Table.RemoveColumns – ลบคอลัมน์ที่ไม่ต้องการจาก table](https://www.thepexcel.com/functions/power-query/table-functions/table-removecolumns/)
- [Table.AddColumn – เพิ่มคอลัมน์ใหม่ด้วย Calculated Values](https://www.thepexcel.com/functions/power-query/table-functions/table-addcolumn/)
- [Table.Sort – เรียงลำดับข้อมูลในตาราง](https://www.thepexcel.com/functions/power-query/table-functions/table-sort/)

## แหล่งข้อมูลเพิ่มเติม

- [Microsoft Learn - Table.FillDown](https://learn.microsoft.com/en-us/powerquery-m/table-filldown) _(official)_
- [Microsoft Learn - Table.FillUp](https://learn.microsoft.com/en-us/powerquery-m/table-fillup) _(official)_
- [PowerQuery.how - Table.FillDown](https://powerquery.how/table-filldown/) _(article)_

---

_Source: [https://www.thepexcel.com/functions/power-query/table-functions/table-filldown/](https://www.thepexcel.com/functions/power-query/table-functions/table-filldown/)_
