---
title: 4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query
url: https://www.thepexcel.com/4-steps-function-query/
type: post
date: 2020-03-28
updated: 2025-12-22
author: Sira Ekabut
categories: [Power Query]
tags: [function query, parameter, Table.ColumnNames, List.Transform, Web.Contents, Web.Page, List.Union, Table.ExpandTableColumn]
---

# 4 ขั้นตอนในการสร้าง Function Query แบบที่มี UI ให้แก้เล่นได้ใน Power Query

ในบทความนี้ผมจะมาแนะนำวิธีสร้าง Function Query ขึ้นใน Power Query ซึ่งไม่ใช่แบบปกติ แต่จะเป็นแบบที่ยังยอมให้เราแก้ไข Step ต่างๆ ใน Function นั้นได้โดยง่าย

 

แต่ถ้าใครยังไม่รู้ว่าผมพูดถึงเรื่องอะไร ลองอ่าน recap นี้ดูก่อนเล็กน้อย…

 

## Recap

 

Power Query เป็นเครื่องมือสำหรับการดัดแปลงข้อมูลที่ทรงพลังและใช้ง่ายมากๆ อยากจะทำอะไรก็มีเมนูสำเร็จรูปเอาไว้ให้กดได้เลยโดยแทบไม่ต้องเขียนสูตร แต่ว่าหลายครั้งก็น่าเบื่อเวลาที่เราต้องทำ Step อะไรซ้ำๆ เหมือนเดิมกับหลายๆ Query จะดีกว่ามั้ยถ้าเราทำ Step พวกนั้นเป็นฟังก์ชันแล้วเรียกใช้ได้อย่างง่ายๆ เลย?

 

ใน[หนังสือ Excel Power Up!](https://www.thepexcel.com/product/excel-power-up-book/) ที่ผมเขียนไว้ ในบทหลังๆ ก็มีเขียนวิธีที่ทำให้ Query กลายเป็นฟังก์ชันได้ง่ายๆ โดยเปิด Advanced Editor แล้วใส่คำว่า (input1, input2)=> นำหน้า code เดิม

 

ซึ่งมันจะเปลี่ยน Query นั้นให้กลายเป็นฟังก์ชันที่มี input 2 ตัวคือ input1 กับ input2 ทันที แต่**ข้อเสียคือถ้าจะแก้ต้องมาแก้ใน Advanced Editor ไม่สามารถมี User Interface ง่ายๆ ให้แก้อีกแล้ว**

 

ในบทความนี้ผมก็เลยจะมาแชร์วิธีสร้าง Function อีกวิธีนึงซึ่งยังสามารถทำให้เราแก้ไขได้ง่ายๆ โดยใช้ User Interface ได้อยู่ โดยที่ผมเห็นวิธีนี้ครั้งแรกมาจาก**คุณโบแห่ง [Excel Wizard](https://web.facebook.com/XcWizard/)** ที่ไปตอบในคลิปของ อ. Mike แห่ง [Excel is fun](https://www.youtube.com/user/ExcelIsFun)

 

ผมเห็นว่ามันเป็นประโยชน์มาก เลยขออนุญาตนำเทคนิคนี้มาถ่ายทอดอีกที แต่มีการดัดแปลงเล็กน้อยให้เข้าใจง่ายขึ้น (ล่ะมั๊ง) นะครับ 555

 

## วิธีใช้ Function Query แบบแก้ไขได้

 

หลักการมี 4 ขั้นตอน คือ

 
1. **สร้าง New Parameter ขึ้นมา **โดยจะสร้างกี่ตัวก็ได้ สมมติชื่อ Para1, Para2
2. **เอา Parameter จากข้อ 1 ไปเรียกใช้ใน Query ที่ต้องการจะให้เป็นต้นแบบ** (อันนี้ต้อง Manual แก้สูตรนิดนึง) สมมติชื่อ StepQuery ซึ่ง Function ของเราจะทำ Step ตาม Query ตัวนี้เลย
3. **สร้างฟังก์ชัน **โดยกดคลิ๊กขวา ที่ StepQuery แล้ว Create Function แล้วตั้งชื่อฟังก์ชันอะไรก็ได้
4. **นำฟังก์ชันไปใช้งาน** เช่นเอาไปใช้ใน Query หลัก อาจใช้ผ่าน Invoke Custom Function ก็ได้ง่ายดี

 

ซึ่งแบบที่เข้าใจง่ายที่สุดก็คือ Parameter ที่เป็นพวกค่าเดี่ยวๆ เช่น ตัวเลข หรือ ข้อความ เป็นต้น

 

ตัวอย่างของการใช้ Parameter แบบนี้แล้วมีประโยชน์มากก็คือ การดึงข้อมูลจากเว็บไซต์ต่างๆ โดยเปลี่ยน URL ไปเรื่อยๆ เช่น การดึงข้อมูลหุ้น เป็นต้น

 

## ตัวอย่างการสร้าง Function ดึงข้อมูลหุ้นจาก symbol ที่ต้องการ

 

สมมติผมต้องการข้อมูลจากเว็บหน้านี้ [https://www.set.or.th/set/companyhighlight.do?symbol=SCC](https://www.set.or.th/set/companyhighlight.do?symbol=SCC)

 ![1](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-001-1024x680.png) 

ผมก็สามารถสั่ง Get Data From Web ได้ โดยเลือกว่าจะดูด table ในรูป

 ![2](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-002-1024x795.png) 

ที่นี้มันจะดูดข้อมูลเข้า Power Query เฉพาะ Symbol นี้อันเดียว

 

ให้เปลี่ยนชื่อ Query เป็น StepQuery ซะ เพราะตารางนี้แหละที่เราจะใช้เป็นแม่เแบบของการ Transform Data ซึ่งเราจะ Transform ข้อมูลให้เสร็จไปเลยก็ได้ แต่ผมยังไม่ทำ เพราะไปทีหลังได้

 

### 1. สร้าง Parameter

 

ทีนี้ให้เราสร้าง Parameter ขึ้นมา โดยกด Manage Parameter แล้ว New แล้วตั้งชื่อว่า StockSymbol จากนั้นเลือก Type เป็น Text เพราะว่า Parameter นี้คือข้อความ จากนั้นใส่ Current Value เป็น SCC ไปก่อน เพื่อจะได้ดึงค่าจากหุ้น SCC ได้

 ![3](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-004-1024x580.png) 

### 2.เอา Parameter ไปใช้ใน Step Query

 

กดตามรูป แล้วไปแก้สูตรของ Source ซะ ให้เปลี่ยนจากข้อความว่า SCC เป็น Parameter ที่ชื่อว่า StockSymbol แทน ซึ่งเชื่อมด้วยเครื่องหมาย &

 

```
= Web.Page(Web.Contents("https://www.set.or.th/set/companyhighlight.do?symbol="&StockSymbol))
```

 ![4](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-005-1024x245.png) 

พอลองกดกลับมาดู Step หลังๆ ก็ควรจะต้องเห็นว่ายังใช้งานได้อยู่เหมือนเดิม

 ![5](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-006-1024x454.png) 

### 3.สร้างฟังก์ชัน

 

จากนั้นคลิ๊กขวาที StepQuery แล้วกด Create Function

 ![6](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-007.png) 

จากนั้นตั้งชื่อตามใจชอบเช่น GetStockData แล้วกด ok

 ![7](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-008.png) 

มันจะสร้างฟังก์ชันแล้วผูก Query ให้เราโดยอัตโนมัติ

 ![8](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-009.png) 

### 4.**นำฟังก์ชันไปใช้งาน**

 

ทีนี้เราจะลองใช้งานเพื่อดูดหุ้นซัก 5-6 ตัว แต่เนื่องจากเรายังไม่มี List รายชื่อหุ้นเลย ดังนั้นเดี๋ยวไปสร้าง List รายชื่อหุ้นก่อน ซึ่งเราจะสร้างใน Excel ไฟล์นี้แหละ

 

ดังนั้นก่อนอื่นให้เรา Close & Load To… -> Only Create Connection เพื่อออกไปยัง Excel ก่อน (ไม่งั้นมันไม่ให้ออกไปสร้าง)

 

ให้เราใส่ Data ลงไปตามต้องการ แล้วกดสร้าง Table ชื่อ StockList ซะ

 ![9](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-010.png) 

จากนั้นกด Get Data From Table/Range เพื่อเอาเข้า Power Query

 

จากนั้นกด Add Column -> Invoke Custom Function เพื่อเรียกใช้ฟังก์ชันที่เราสร้างขึ้นมา

 ![10](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-011-1024x569.png) 

มันอาจจะมีขึ้นมาเตือนเรื่อง Data Privacy เพราะมีการดึงข้อมูลจาก Local ผสมกับจากแหล่งออนไลน์ ก็ให้กด Continue ไป

 ![11](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-012.png) 

จุดนี้ถ้าไม่คิดอะไรมาก ติ๊ก Ignore Privacy Level ก็ได้ (มันก็จะไม่แคร์เรื่องข้อมูลรั่วไหลอะไรเลย)

 ![12](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-013x.png) 

จากนั้นมันก็จะดึงข้อมูล Symbol ทุกตัวออกมาเป็น Table ดังรูป เมื่อคลิ๊กแต่ละช่องที่เป็น Table เราก็จะเห็นไส้ในของ Table นั้น

 ![13](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-014-1024x431.png) 

ถ้าเรากด Expand ที่มุมขวาบนของคอลัมน์ มันก็จะเอาทุก Table มา Append ต่อแถวกันโดยอัตโนมัติ โดยการ Append ก็จะยึดจากชื่อคอลัมน์ที่เป็นหัวตารางเป็นหลัก

 

แต่เนื่องจากหัวตารางไส้ในของเรายังไม่ ok ดังนั้นเราจะกลับไปแก้ StepQuery ให้เรียบร้อยก่อน

 

### กลับไปแก้ StepQuery (เพราะเราข้ามมา)

 ![14](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-015-1024x386.png) 

เอาล่ะ เรากดย้อนหลับมายัง StepQuery เพื่อจัดการตารางให้เรียบร้อยกัน

 

ก่อนอื่นจะ Filter เอาบรรทัดที่ไม่เกี่ยวข้องออก นั่นก็คือคอลัมน์แรกจะเอาตัวที่มีคำว่า “สำคัญ” ออกไปซะ

 ![15](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-016-1024x456.png) 

ให้ Transpose ตารางลงมาก่อน

 ![16](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-017-1024x289.png) 

แล้ว Use First Row as Header ซะ แต่จะลบ Step Change Type ออกเพื่อไม่ให้มันระบุชื่อหัวตารางในสูตร

 ![17](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-018-1024x294.png) 

จากนั้นเราอยากใส่ลำดับปีเป็น Y-4, Y-3, Y-2, Y-1, Y-0 ดังนั้นจะกด Add Index Column ใหม่แบบ Custom

 ![18](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-019-1024x584.png) 

จากนั้นจะได้เลขเรียง 4,3,2,1,0 ออกมา

 

แต่คราวนี้เราจะใส่คำว่า Y- ไว้ข้างหน้า ก็ไปที่ Transform -> Format-> Add Prefix

 ![19](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-020-1024x483.png) 

ก็จะได้ผลลัพธ์ตามต้องการ

 ![20](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-021-1024x202.png) 

### กลับไปดูผลที่ Query หลัก (หลังจากแก้ StepQuery)

 

เมื่อกดกลับไปดูที่ StockList ซึ่งเป็น Query หลักของเรา จะเห็นว่าที่เราไปแก้ใน StepQuery นั้นได้สะท้อนออกมายัง Query หลักแล้ว

 ![21](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-024x-1024x419.png) 

คราวนี้เราก็ Expand ข้อมูลได้อย่างสบายใจแล้ว

 ![22](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-025x.png) 

แค่นี้เราก็จะได้ข้อมูลจากทุก Symbol มารวมกันแล้วครับ

 ![23](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-026x-1024x636.png) 

ถ้าใครไม่อยากให้ตอน Expand มันระบุชื่อคอลัมน์ ก็[สามารถทำตาม Tips ของบทความนี้ได้ เพื่อให้มันอ่านหัวคอลัมน์ใหม่ได้ตลอด](https://www.thepexcel.com/dynamic-expand-column-power-query/)

 

เช่น เราจะแก้สูตรเป็น

 

```markdown
= Table.ExpandTableColumn(#"Invoked Custom Function", "GetStockData", List.Union(List.Transform(#"Invoked Custom Function"[GetStockData],each Table.ColumnNames(_))))
```

 

ผลลัพธ์ที่ได้จะเหมือนเดิม แต่จะยืดหยุ่นขึ้นกรณีที่ในอนาคตอาจจะมี Field เพิ่มก็จะเห็นทันที

 ![24](https://www.thepexcel.com/wp-content/uploads/2020/03/function-query-028-1024x385.png) 

ต่อจากนี้จะเปลี่ยน Datatype ตัวไหนยังไงก็แล้วแต่เลยครับ ผมขอไม่ทำให้ดูแล้วนะ ^^

 

## ตอนต่อไปคืออะไร?

 

ในบทความตอนถัดไป จะเป็น[วิธีสร้างฟังก์ชันคล้ายๆ แบบบทความนี้ แต่สร้าง Parameter เป็น Any แทนที่จะเป็น Parameter แค่ Text ธรรมดา เพื่อให้ดึงข้อมูลจาก Table ที่ต้องการได้](https://www.thepexcel.com/get-excel-folder-with-transfrom/)ซึ่งจะยากขึ้นอีกเล็กน้อยครับ

 

ซึ่งแบบหลังนี้แหละที่คุณโบ Excel Wizard ทำให้ดูในคลิป Excel is fun แต่ถ้าให้ผมอธิบายวิธีนั้นเลย น่าจะงงแน่นอน เลยต้องสอนแบบง่ายก่อนนะ

 

แล้วพบกันในตอนต่อไปครับ รับรองว่าเจ๋งมากๆ อีกแล้ววว

---

_Source: [https://www.thepexcel.com/4-steps-function-query/](https://www.thepexcel.com/4-steps-function-query/)_
