---
title: Excel.CurrentWorkbook – เข้าถึง Table และ Named Range ใน Workbook ปัจจุบัน
url: https://www.thepexcel.com/functions/power-query/accessing-data-functions/excel-currentworkbook/
type: function-explainer
program: Power Query
syntax: Excel.CurrentWorkbook() as table
date: 2025-12-18
scores:
  popularity: 9
  difficulty: 2
  usefulness: 9
---

# Excel.CurrentWorkbook – เข้าถึง Table และ Named Range ใน Workbook ปัจจุบัน

> return table ของ Table, Named Range และ Dynamic Array ทั้งหมดใน Excel workbook ปัจจุบัน

## คำอธิบาย

Excel.CurrentWorkbook เป็น function ที่ใช้เข้าถึง Table, Named Range และ Dynamic Array ทั้งหมดที่อยู่ใน Excel workbook ปัจจุบัน โดย return เป็น table ที่มี metadata และเนื้อหาของแต่ละ object ทำให้สามารถอ้างอิงข้อมูลภายใน workbook ได้อย่างยืดหยุ่น เหมาะสำหรับการสร้าง query ที่ portable และไม่ต้องพึ่งพา file path

## Syntax

```excel
Excel.CurrentWorkbook() as table
```

**Variant**

```excel
Excel.CurrentWorkbook()
```

return table ของทุก object ที่เข้าถึงได้ใน workbook ปัจจุบัน

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| (ไม่มี parameter) | No | none | N/A | ฟังก์ชันนี้ไม่รับพารามิเตอร์ใดๆ เรียกใช้งานโดยใส่วงเล็บว่างเปล่า () ระบบจะทำงานโดยอัตโนมัติในการสแกนหาออบเจ็กต์ทั้งหมดที่มีชื่อภายในเวิร์กบุ๊กปัจจุบัน |

## เคสการใช้งาน

### เข้าถึง Excel Table ภายใน Workbook

เมื่อต้องการดึงข้อมูลจาก Excel Table ที่สร้างไว้ใน workbook เดียวกัน โดยไม่ต้องระบุ absolute path

_เหมาะกับ:_ data-transformation

### Dynamic Reference ไปยัง Named Range

เมื่อต้องการอ้างอิงข้อมูลจาก Named Range ที่อาจเปลี่ยนแปลงตำแหน่งหรือขนาดได้

_เหมาะกับ:_ data-consolidation

### Consolidate หลาย Table ใน Workbook เดียวกัน

เมื่อต้องการรวมข้อมูลจากหลาย Table หรือ Named Range ที่อยู่ใน workbook เดียวกันเข้าด้วยกัน

_เหมาะกับ:_ data-consolidation

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ดึงรายการ Table และ Named Range ทั้งหมด

```excel
= Excel.CurrentWorkbook()
```

**ผลลัพธ์:** `Table ที่มี columns: Name, Content, Kind

แสดงรายการของทุก Table, Named Range และ Dynamic Array ในไฟล์

ตัวอย่าง result:
Name          | Content    | Kind
SalesData     | [Table]    | Table
ProductList   | [Table]    | Range
MonthlyTarget | [Table]    | Range`

Excel.CurrentWorkbook() return table ที่มี 3 columns หลัก: Name (ชื่อ object), Content (ข้อมูลเป็น table format) และ Kind (ประเภท เช่น Table หรือ Range)
.
แต่ละแถวคือหนึ่ง object ที่สามารถเข้าถึงได้ในไฟล์ ไม่รวม worksheet tabs นะครับ
.
💡 สังเกตว่า Kind จะบอกว่า object นั้นเป็น Table (สร้างด้วย Ctrl+T) หรือ Range (Named Range ทั่วไป) ทำให้เราสามารถ filter แยกประเภทได้

### 2. ตัวอย่างที่ 2: เลือกเฉพาะ Table ที่ต้องการด้วย Table.SelectRows

```excel
let
    AllObjects = Excel.CurrentWorkbook(),
    SalesTable = Table.SelectRows(AllObjects, each [Name] = "SalesData"),
    Content = SalesTable{0}[Content]
in
    Content
```

**ผลลัพธ์:** `Table ข้อมูลจาก SalesData Table เท่านั้น

ถ้า SalesData มีข้อมูล:
OrderID | Product  | Amount
1       | Laptop   | 15000
2       | Mouse    | 500
3       | Keyboard | 1200

Result จะได้ table ข้อมูลทั้งหมดจาก SalesData`

ใช้ Table.SelectRows ร่วมกับ each keyword เพื่อ filter เฉพาะแถวที่ [Name] = "SalesData"
.
จากนั้นใช้ {0} เพื่อเข้าถึงแถวแรก (index 0) และดึง [Content] column ออกมาซึ่งเป็น table ข้อมูลจริง
.
📝 Pattern นี้ใช้บ่อยมากครับเมื่อต้องการเข้าถึงข้อมูลจาก Table เฉพาะตัวใน workbook ส่วนตัวผมใช้เกือบทุกครั้งที่ทำงานกับ Excel.CurrentWorkbook

### 3. ตัวอย่างที่ 3: Filter เฉพาะ Excel Table (ไม่รวม Named Range)

```excel
let
    AllObjects = Excel.CurrentWorkbook(),
    TablesOnly = Table.SelectRows(AllObjects, each [Kind] = "Table"),
    TableNames = TablesOnly[Name]
in
    TableNames
```

**ผลลัพธ์:** `List ของชื่อ Excel Table ทั้งหมด

ตัวอย่าง:
{"SalesData", "ProductList", "CustomerInfo"}

ไม่รวม Named Range ที่มี Kind = "Range"`

ใช้ Table.SelectRows กับ condition [Kind] = "Table" เพื่อ filter เฉพาะ Excel Table (ไม่รวม Named Range ที่จะมี Kind = "Range")
.
จากนั้นดึงเฉพาะ Name column ออกมาเป็น list ของชื่อ Table ทั้งหมด
.
💡 วิธีนี้เหมาะเมื่อต้องการแยกประเภท object ที่ Excel.CurrentWorkbook return มา เพราะบางครั้งเราอาจมีทั้ง Table และ Named Range ปนกัน ต้องการเฉพาะ Table เท่านั้น

### 4. ตัวอย่างที่ 4: Combine ข้อมูลจากหลาย Table ด้วย Table.Combine

```excel
let
    AllObjects = Excel.CurrentWorkbook(),
    SalesTables = Table.SelectRows(AllObjects, each Text.StartsWith([Name], "Sales_")),
    TableContents = SalesTables[Content],
    CombinedData = Table.Combine(TableContents)
in
    CombinedData
```

**ผลลัพธ์:** `Table รวมจากทุก Table ที่ชื่อขึ้นต้นด้วย "Sales_"

ถ้ามี Sales_Q1, Sales_Q2, Sales_Q3:
Result จะรวมข้อมูลจากทั้ง 3 Table เป็น table เดียว

OrderID | Product | Amount | Quarter
1       | Laptop  | 15000  | Q1
2       | Mouse   | 500    | Q1
3       | Monitor | 8000   | Q2
4       | Keyboard| 1200   | Q3`

ใช้ Text.StartsWith ร่วมกับ Table.SelectRows เพื่อ filter เฉพาะ Table ที่ชื่อขึ้นต้นด้วย "Sales_" (เช่น Sales_Q1, Sales_Q2)
.
จากนั้นดึงเฉพาะ [Content] column ออกมาเป็น list ของ tables แล้วใช้ Table.Combine รวมทุก table เข้าด้วยกัน
.
🔥 Pattern นี้เจ๋งมากครับ เหมาะสำหรับ consolidate ข้อมูลจากหลาย Table ที่มี naming convention เดียวกัน ไม่ต้องมานั่งเพิ่ม Table ทีละตัวในคิวรี แค่ตั้งชื่อให้ตรงกับ pattern ก็รวมให้อัตโนมัติเลย 😎

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

💡 **Tip จากประสบการณ์จริง:** Excel.CurrentWorkbook เป็น function พื้นฐานที่สำคัญมากใน Power Query เมื่อต้องการทำงานกับข้อมูลภายใน Excel workbook เดียวกัน
.
ช่วยให้ query มี portability สูง สามารถ copy ไปใช้ใน workbook อื่นได้โดยไม่ต้องแก้ไข file path ซึ่งเป็นข้อดีใหญ่มากครับ
.
ส่วนตัวผมแนะนำให้ใช้ร่วมกับ Table.SelectRows เพื่อเลือก object ที่ต้องการอย่างแม่นยำ และควร validate ว่า Table หรือ Named Range ที่ต้องการมีอยู่จริงก่อนใช้งานเพื่อป้องกัน error
.
📝 **Pattern ที่ผมใช้บ่อย:**
- Filter ด้วย Text.StartsWith เพื่อเลือก Table หลายตัวพร้อมกัน
- Check Kind = "Table" vs "Range" เพื่อแยกประเภท object
- ใช้ร่วมกับ Table.Combine เพื่อรวมข้อมูลจาก Table หลายตัวที่มี structure เดียวกัน
.
ถ้าใช้ pattern เหล่านี้ให้คล่อง การทำงานกับ Power Query จะสะดวกขึ้นเยอะครับ 😎

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

**Q: Excel.CurrentWorkbook จะ return worksheet tabs ด้วยหรือไม่?**

ไม่ครับ Excel.CurrentWorkbook จะ return เฉพาะ named object เท่านั้น ได้แก่ Excel Table (ที่สร้างด้วย Ctrl+T), Named Range และ Dynamic Array
.
ไม่รวม worksheet tabs นะครับ ถ้าต้องการเข้าถึง worksheet ต้องใช้ Excel.Workbook แทน
.
💡 เคยสงสัยมั้ยว่าทำไมถึงไม่ให้เข้าถึง worksheet? เพราะ Excel.CurrentWorkbook ออกแบบมาให้ query มี portability สูง ถ้าอิงกับ worksheet name แล้วเอาไป copy ไปใช้ที่อื่น มันก็พังครับ 😅

**Q: ต่างจาก Excel.Workbook อย่างไร?**

Excel.Workbook ใช้เปิดไฟล์ Excel จาก file path และ return ทั้ง worksheets, Tables และ Named Ranges
.
ในขณะที่ Excel.CurrentWorkbook ใช้กับ workbook ปัจจุบันเท่านั้น (ไม่ต้องระบุ path) และ return เฉพาะ named object ไม่รวม worksheet tabs
.
ส่วนตัวผมมองว่า Excel.CurrentWorkbook เหมาะสำหรับ reference ข้อมูลภายใน workbook เดียวกัน ส่วน Excel.Workbook เหมาะเมื่อต้องดึงข้อมูลจากไฟล์อื่น

**Q: ถ้าไม่มี Table หรือ Named Range ใน workbook จะเกิดอะไรขึ้น?**

Excel.CurrentWorkbook จะ return table ว่างเปล่า (empty table) ที่มี column structure แต่ไม่มีแถวข้อมูล ไม่เกิด error
.
ดังนั้นควร check ว่า table ที่ return มา empty หรือไม่ก่อนใช้งาน เช่น Table.RowCount(Excel.CurrentWorkbook()) = 0
.
📝 Tip: ถ้าเจอ empty table บ่อยๆ อาจเป็นเพราะลืมสร้าง Table (Ctrl+T) หรือลืม define Named Range ไปก็ได้นะครับ

**Q: วิธีเลือกเฉพาะ Table ที่ต้องการจาก result ทำอย่างไร?**

ใช้ Table.SelectRows ร่วมกับ each [Name] = "ชื่อ Table" เพื่อ filter แถวที่ต้องการ
.
จากนั้นใช้ {0}[Content] เพื่อดึง table ข้อมูลออกมา
.
ตัวอย่าง:
Table.SelectRows(Excel.CurrentWorkbook(), each [Name] = "SalesData"){0}[Content]
.
จะได้ข้อมูลจาก SalesData Table ออกมาทันที 😎

**Q: สามารถใช้ Excel.CurrentWorkbook ใน Power BI Desktop ได้หรือไม่?**

ได้ครับ แต่ต้อง import ไฟล์ Excel เข้าไปใน Power BI Desktop ก่อน
.
เมื่อใช้ Excel.CurrentWorkbook ใน query editor ของ Power BI จะ return object จากไฟล์ Excel ที่ import ไว้ ไม่ใช่ workbook ของ Power BI เอง
.
💡 ทำไมถึงเป็นแบบนี้? เพราะ Power BI ไม่ใช่ Excel workbook ครับ มันแค่ import ข้อมูลจาก Excel มาเท่านั้น

**Q: Excel.CurrentWorkbook detect Dynamic Array (spill range) ได้หรือไม่?**

ได้ครับ ใน Excel 365 ที่มี Dynamic Array function ถ้า define Dynamic Array เป็น Named Range Excel.CurrentWorkbook จะสามารถ return object นั้นออกมาได้
.
โดยจะมี Kind = "Range" เหมือนกับ Named Range ทั่วไป ทำให้สามารถอ้างอิงข้อมูลจาก Dynamic Array ใน Power Query ได้
.
🔥 เจ๋งตรงที่ถ้า Dynamic Array ขยายหรือหดตัว (spill) ข้อมูลที่ดึงมาก็จะปรับตามอัตโนมัติ ไม่ต้องมานั่งแก้ช่วงข้อมูลเอง

**Q: ถ้าเปลี่ยนชื่อ Table หรือ Named Range จะกระทบ query หรือไม่?**

ถ้า query ใช้ hardcode ชื่อใน Table.SelectRows เช่น each [Name] = "OldName" แล้วเปลี่ยนชื่อ Table เป็น "NewName" query จะหา Table ไม่เจอและเกิด error
.
ต้อง update ชื่อใน query ให้ตรงกับชื่อใหม่ครับ
.
ส่วนตัวผมแนะนำให้มี naming convention ที่ชัดเจนและไม่เปลี่ยนชื่อบ่อย ถ้าต้องเปลี่ยนจริงๆ ก็ต้อง Ctrl+H แก้ทุก query ที่อ้างอิงไปครับ 😅

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

- [Excel.Workbook – อ่านและแยกเนื้อหาไฟล์ Excel ทั้งหมด](https://www.thepexcel.com/functions/power-query/accessing-data-functions/excel-workbook/)
- [Table.SelectRows – กรองแถวตามเงื่อนไขใน Power Query](https://www.thepexcel.com/functions/power-query/table-functions/table-selectrows/)
- [Table.Combine – รวมหลาย table เข้าด้วยกัน](https://www.thepexcel.com/functions/power-query/table-functions/table-combine/)
- [Excel.ShapeTable](https://www.thepexcel.com/functions/power-query/value-functions/excel-shapetable/)

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

- [Microsoft Learn: Excel.CurrentWorkbook](https://learn.microsoft.com/en-us/powerquery-m/excel-currentworkbook) _(documentation)_
- [Microsoft Power Query M Reference](https://learn.microsoft.com/en-us/powerquery-m/) _(documentation)_
- [Power Query Documentation - Accessing Data](https://learn.microsoft.com/en-us/power-query/) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/power-query/accessing-data-functions/excel-currentworkbook/](https://www.thepexcel.com/functions/power-query/accessing-data-functions/excel-currentworkbook/)_
