บทที่ 5 การสร้างฟังก์ชั่น



ฟังก์ชั่น (Function)
ฟังก์ชั่นคือ สูตรคำนวน หรือรหัสคำสั่งที่ได้จัดเตรียมไว้ล่วงหน้า โดยการใช้ค่าที่ระบุเฉพาะ หรือที่เรียกว่า อะกิวเม้นท์ (aguments) ใส่เข้าไปในโครงสร้าง ซึ่งค่า   อะกิวเม้นท์ ก็คือ ค่าของตัวแปรต่างๆ ที่จำเป็นในการคำนวน

โครงสร้างของฟังก์ชั่น
ฟังก์ชันที่ใช้ในโปรแกรมเอ็กเซล จะประกอบด้วย
= ชื่อฟังก์ชัน (อาร์กิวเมนต์ 1, อากิวเมนต์ 2,  …)
1. เครื่องหมาย =
2. ชื่อของฟังก์ชัน
3. ค่าอิวกิวเม้นท์ เป็นค่าของตัวแปรต่างๆ ที่จำเป็นในการคำนวน อาจเป็น ตัวเลข ตัวอักษร ค่าตรรกะ ค่าอ้างอิงเซลล์ต่างๆ หรืออาจเป็นสูตร หรือฟังก์ชั่นอื่น ซ้อนอีกชั่นหนึ่งก็ได้ โดยค่าอะกิวเม้นท์อาจมีได้หลายค่าโดยแยกค่าต่างๆ ด้วย (,)
ตัวอย่าง
เช่น ฟังก์ชั่นหาผลรวม SUM ซึ่งมีโครงสร้างคือ =SUM(A1:A10)
ชื่อฟังก์ชั่น คือ SUM โดยมีอะกิวเม้นท์เป็นช่วงการอ้างอิงเซลล์ในเวิร์คชีทคือ ช่วงเซลล์ A1 ถึง A10
ฟังก็ชั่นที่ใช้ในโปรแกรมเอ็กเซลล์ หากจำแนกตามแหล่งที่มา ก็จะจำแนกได้เป็น 2 ประเภทคือ
1. ฟังก์ชั่นสำเร็จรูปที่มาพร้อมกับโปรแกรม
2. ฟังก์ชั่นที่ผู้ใช้งานสร้างขึ้นมาเองเพื่อตอบสนองต่อประโยชน์เฉพาะอย่าง ที่ผู้ใช้ต้องการ


1.ฟังก์ชั่นสำเร็จรูป
เป็นฟังก์ชั่นที่มาพร้อมกับโปรแกรมเอ็กเซลล์ ผู้ใช้งานสามารถเรียกใช้ฟังก์ชั่นสำเร็จรูปได้ทันที ตัวอย่างเช่น

ประเภท
ชื่อฟังก์ชั่น
รายละเอียด
Finance
FV
ส่งคืนค่ามูลค่าเงินในอนาคต

NPV
ส่งคืนค่ามูลค่าปัจจุบันสุทธิของเงินลงทุน

PV
ส่งคืนค่ามูลค่าเงินในปัจจุบัน
Date&Time
DAY
ส่งคืนค่าเลขวันที่ 1-31 ออกมาจากข้อมูล วันที่, เดือน, ปี

NOW
ส่งคืนค่าวันที่และเวลาปัจจุบัน ที่อยู่ในเครื่องคอมพิวเตอร์

TODAY
ส่งคืนค่าวันที่ปัจจุบัน ตามที่อยู่ในเครื่องคอมพิวเตอร์
Math&Trig
FACT
ส่งค่าผลคำนวนแฟคทอเรียล

INT
ปัดตัวเลขลง ให้เท่ากับจำนวนเต็มที่ใกล้เคียงที่สุด

PI
ส่งคืนค่า Pi = 22/7

SUM
ส่งค่าผลรวมตัวเลขที่กำหนด หรือในช่วงที่กำหนดทั้งหมด
Statistical
AVERAGE
ส่งคืนค่าเฉลี่ยของจำนวนตัวเลข

COUNT
ส่งคืนค่าจำนวนเซลล์ที่บรรจุจำนวนตัวเลข

MAX
ส่งคืนค่ามากที่สุดจากชุดข้อมูลที่กำหนด

MIN
ส่งคืนค่าน้อยที่สุดจากชุดข้อมูลที่กำหนด
TEXT
FIND
ส่งคืนค่าตำแหน่งเริ่มต้นของการค้นหาข้อความหนึ่งจากในข้อความหนึ่ง

LEN
ส่งกลับจำนวนอักขระในสตริงข้อความ LEN

MID
ส่งกลับจำนวนตัวอักษรจากข้อความที่ระบุตำแหน่งที่คุณระบุขึ้นอยู่กับจำนวนของตัวอักษรที่คุณระบุ

TRIM
ลบช่องว่างทั้งหมดออกจากข้อความยกเว้นช่องว่างระหว่างคำ

2.ฟังก์ชั่นที่สร้างขึ้นมาใช้งานเอง
นอกเหนือจากฟังก์ชั่นสำเร็จรูป ที่โปรแกรมเอ็กเซลล์ได้จัดเตรียมไว้ให้ผู้ใช้โปรแกรมได้เลือกใช้อย่างมากมายแล้วก็ตาม บางครั้ง ผู้ใช้งานก็มีความต้องการที่จะคำนวน หรือให้โปรแกรมประมวลผลที่ซับซ้อนมากกว่า หรือต้องการให้โปรแกรมสามารถตอบสนองต่อความต้องการงานที่ผู้ใช้ทำอยู่ ด้วยเหตุนี้ การพัฒนาความสามารถของโปรแกรมอาจต้องใช้การเขียนรหัสคำสั่งเพิ่มเติม เพื่อให้ได้ฟังก์ชั่นตามที่ต้องการ ซึ่งการสร้างฟังก์ชั่นนั้นมีโครงสร้างพื้นฐานที่ต้องทำความเข้าใจในเบื้องต้น ตามโครงสร้างดังนี้
 [Public | Private] [Static] Function name [(arglist)] [As type]
[statements]
[name = expression]
[Exit Function]
[statements]
[name = expression]
End Function
Private หมายถึง กำหนดให้ฟังก์ชันที่สร้างขึ้นมา มีขอบเขตในการเรียกใช้งานเฉพาะฟอร์ม หรือโมดูลที่ประกาศเท่านั้น
Public หมายถึง กำหนดให้ฟังก์ชันที่สร้างขึ้นมา สามารถถูกเรียกใช้งานได้ทุกส่วน
Static หมายถึง กำหนดให้ฟังก์ชันเก็บค่าที่ได้จากการประมวลผลไว้ เมื่อมีการเรียกใช้งานฟังก์ชันครั้งต่อๆ ไป ค่าดังกล่าวจะมีค่าเท่าเดิม
Sub หมายถึง ต้องการสร้างโพรซีเดอร์ทั่วๆ ไป แบบฟังก์ชัน
name หมายถึง ชื่อของฟังก์ชัน
arglist หมายถึง อาร์กิวเมนต์ที่ต้องใช้ในฟังก์ชัน ซึ่งจะมีหรือไม่มีก็ได้
As type หมายถึง ชนิดของข้อมูลที่ฟังก์ชั่นจะส่งค่าคืนมาเช่น Integer, Long เป็นต้น
statements หมายถึง ชุดคำสั่งต่างๆ ในฟังก์ชัน
Exit Function หมายถึง คำสั่ง ที่สั่งให้ออกจากฟังก์ชันทันที
End Function หมายถึง จบการทำงานของฟังก์ชั่น
ตัวอย่างที่ 1 การสร้างฟังก์ชั่นคำนวนหาพื้นที่สี่เหลี่ยม
เป็นการสร้างฟังก์ชั่นคำนวนหาพื้นที่สี่เหลี่ยม โดยมีตัวแปร area เป็นชื่อฟังก์ชั่น และเป็นตัวแปรรับค่าคืนจากการคำนวน ของตัวแปร x และ y โดย x เป็นตัวแปรของความยาวด้านหนึ่ง และ y เป็นตัวแปรของความยาวอีกด้านหนึ่ง
1. เปิดโปรแกรมเอ็กเซลล์
2. เปิดหน้าต่าง Visual Basic Editor โดยที่เมนูบาร์คลิก Tools>Macro> Visual Basic Editor
3. เมื่อหน้าจอ Visual Basic Editor ปรากฏขึ้น ให้คลิกเลือก Insert > Module
4. ให้พิมพ์คำสั่งฟังก์ชั่นดังนี้
Function area(x As Integer, y As Integer) As Integer
area = x * y
End Function
รูปที่ 5.1

การเรียกใช้ฟังก์ชั่น
ฟังก์ชั่นสำเร็จรูปและฟังก์ชั่นที่สร้างขึ้นมาใช้งานเอง มีวิธีการเรียกใช้งานอยู่ 3 วิธีคือ
วิธีที่ 1 การใช้ฟังก์ชั่นผ่านเวิร์คชีท
ด้วยการคลิกเลือกเซลล์ที่ต้องการแสดงผลการคำนวน ใส่เครื่องหมายเท่ากับ (=) แล้วตามด้วยชื่อฟังก์ชั่น และใส่ค่าอะกิวเม้นท์ต่างๆ ในวงเล็บ

รูปที่ 5.2
จากรูปตัวอย่างแสดงการใช้งานฟังก์ชั่นด้วยการคลิกเลือกเซลล์ A11 เพื่อแสดงผลการคำนวนค่า SUM ด้วยการพิมพ์ =Sum(A1:A10) เพื่อหาค่าผลรวมช่วงข้อมูลตั้งแต่เซลล์ A1 ถึงเซลล์ A10
สำหรับฟังก์ชั่นที่สร้างขึ้นมาใช้เองก็สามารถเรียกใช้ได้เช่นกัน เช่น การเรียกใช้ฟังก์ชั่นการหาพื้นที่ ที่ได้สร้างเอาไว้แล้ว

รูปที่ 5.3

วิธีที่ 2 กำหนดฟังก์ชั่นผ่าน Paste function
เลือกใช้ฟังก์ชั่นผ่านเมนูบาร์ฟังก์ชั่น โดยการคลิกที่ปุ่ม fx จะปรากฏไดอะล็อกของ Insert Function ขึ้นมาให้เราได้เลือกใช้ฟังก์ชั่น

รูปที่ 5.4
จากรูปตัวอย่างเป็นการเรียกใช้ฟังก์ชั่นโดยการเรียก ไดอะล็อก Insert Function ขึ้นมาจากนั้นเลือกฟังก์ชั่น SUM แล้วกดปุ่ม OK ก็จะปรากฏไดอะล็อกอะกิวเม้นท์ขึ้นมาเพื่อให้ผู้ใช้ได้กำหนดค่าอะกิวเม้นท์ ซึ่งฟังก์ชั่น SUM ในตัวอย่างนี้ ค่าอะกิวเม้นท์ ก็คือ ช่วงอ้างอิงข้อมูลในเซลล์ ตั้งแต่ A1 ถึง A10

รูปที่ 5.5

สำหรับฟังก์ชั่นที่สร้างขึ้นมาใช้เองก็สามารถเรียกใช้ได้เช่นกัน โดยการเลือก Select  Category เป็น User Defined เช่น ตัวอย่างการสร้างฟังก์ชั่นหาพื้นที่สี่เหลี่ยม ที่ได้สร้างเอาไว้แล้ว จะปรากฏในไดอะล็อก Insert Function ในกลุ่ม User Defined

รูปที่ 5.6

วิธีที่ 3 การเรียกใช้ฟังก์ชั่นด้วยการเขียนรหัสคำสั่ง
ในการเขียนรหัสคำสั่ง VBA หรือสร้างโปรแกรมใช้งานบางครั้งต้องมีการใช้ฟังก์ชั่นต่างๆ เพื่อการคำนวนหรือประมวลผล ซึ่งฟังก์ชั่นบางชนิดก็ถูกสร้างมาพร้อมกับโปรแกรมเอ็กเซลล์แล้ว ทำให้ผู้ใช้ไม่ต้องเขียนฟังก์ชั่นเพิ่ม เพียงแค่รู้จักวิธีการใช้งาน หน้าที่ของฟังก์ชั่น และการเรียกใช้งานของฟังก์ชั่นนั้นๆ ก็สามารถนำมาใช้งานได้แล้ว
3.1 การเรียกใช้งานฟังก์ชั่นสำเร็จรูปแบบเขียนรหัสคำสั่งนี้จะใช้คุณสมบัติ Worksheetfunction (property) ในการส่งค่าคืนจากฟังก์ชั่น ซึ่งมีโครงสร้างดังนี้(ดูตัวอย่างที่ 2)
= Worksheetfunction.[name](agument)
3.2 การเรียกใช้งานฟังก์ชั่นที่เขียนขึ้นมาเอง (UserDefined) แบบเขียนรหัสคำสั่งซึ่งมีโครงสร้างดังนี้ (ดูตัวอย่างที่ 3)
=[name](agument)
ตัวอย่างที่ 2 การเรียกใช้ฟังก์ชั่นสำเร็จรูปด้วยการเขียนคำสั่ง VBA  ซึ่งในตัวอย่างนี้ จะเป็นการให้โปรแกรมคำนวนหาค่าผลรวมของช่วงข้อมูล A1 ถึง A10 แล้วส่งคืนมาแสดงที่ TextBox1
1. เปิดโปรแกรมเอ็กเซลล์
2. เปิดหน้าต่าง Visual Basic Editor โดยที่เมนูบาร์คลิก Tools>Macro> Visual Basic Editor
3. เมื่อหน้าจอ Visual Basic Editor ปรากฏขึ้น ให้คลิกเลือก Insert > UserForm
4. UserForm1 จะปรากฏขึ้น ให้ปรับขนาดตามต้องการโดยการคลิกลากส่วนขอบของ UserForm1 หรืออาจกำหนดขนาดในหน้าต่างพร็อพเพอร์ตี้ก็ได้
7. ใส่ TextBox1 เพื่อป้อนค่าหรือพิมพ์ตัวอักษร
8. ใส่ CommandButton1 เพื่อเป็นปุ่มกด สั่งให้โปรแกรมทำงาน
9. กำหนดค่าคุณสมบัติ (property) ให้แต่ละคอนโทรลดังนี้

คอนโทรล
พร็อพเพอร์ตี้
ค่าที่กำหนด
UserForm1
Caption
UserForm1

Height
125

Width
240
TextBox1
Caption
-

Height
30

Width
120
CommandButton1
Caption
SUM

Height
30

Width
90


10. จะได้ Userform1 ที่ประกอบด้วยคอนโทรลต่างๆ ดังรูป

รูปที่ 5.7
11. ใส่โค๊ดคำสั่งใน CommandButton1 โดยการดับเบิ้ลคลิกที่ CommandButton1 หน้าต่างโค๊ดคำสั่งจะปรากฏขึ้นมา ให้พิมพ์คำสั่งดังนี้
Private Sub CommandButton1_Click()
TextBox1.Text = WorksheetFunction.Sum(Range("A1:A10"))
End Sub
โปรแกรมจะเรียกฟังก์ชั่น SUM โดยอาศัยคุณสมบัติ (property) WorksheetFunction เพื่อส่งคืนค่าจากฟังก์ชั่น โดยอะกิวเม้นท์คือ ช่วงอ้างอิงของข้อมูลตั้งแต่เซลล์ A1 ถึง เซลล์ A10
12. ทดสอบโปรแกรม โดยการกลับไปที่หน้าต่าง Worksheet แล้วสร้างปุ่ม Button1 ขึ้นมา (ถ้าไม่มีปุ่ม Button1 ให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms) คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button1

รูปที่ 5.8
13. จากนั้นหน้าต่าง Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New
14. เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้
Sub Button1_Click()
UserForm1.Show
End Sub
15. การทดสอบโปรแกรม ให้พิมพ์ค่าตัวเลขลงในช่วงเซลล์ A1 ถึง A10 แล้วคลิกที่ปุ่ม Button1 เพื่อเรียก UserForm1 ขึ้นมา จากนั้นให้กดปุ่ม CommandButton1 (ปุ่ม SUM) จะได้ผลรวมทั้งหมดซึ่งแสดงใน TextBox1

รูปที่ 5.9

ตัวอย่างที่ 3 การเรียกใช้ฟังก์ชั่นที่เขียนขึ้นเอง ด้วยการเขียน VBA ในตัวอย่างนี้ เป็นการให้โปรแกรมคำนวนหาค่าพื้นที่รูปสี่เหลี่ยมที่มีความกว้าง และความยาวตามที่กำหนด
1. เปิดโปรแกรมเอ็กเซลล์
2. เปิดหน้าต่าง Visual Basic Editor โดยที่เมนูบาร์คลิก Tools>Macro> Visual Basic Editor
3. เมื่อหน้าจอ Visual Basic Editor ปรากฏขึ้น ให้คลิกเลือก Insert>Module
4. สร้างฟังก์ชั่นโดยการพิมพ์คำสั่งฟังก์ชั่นดังนี้
Function area(x As Integer, y As Integer) As Integer
area = x * y
End Function

รูปที่ 5.10
5. ที่หน้าจอ Visual Basic Editor ให้เลือก Insert>UserForm
6. UserForm1 จะปรากฏขึ้น ให้ปรับขนาดตามต้องการโดยการคลิกลากส่วนขอบของ UserForm1 หรืออาจกำหนดขนาดในหน้าต่างพร็อพเพอร์ตี้ก็ได้
7. ใส่ TextBox1 และ TextBox2 เพื่อป้อนค่าหรือพิมพ์ตัวอักษร
8. ใส่ Label1 และLabel2 เพื่อป้ายชื่อ
9. ใส่ Label3 เพื่อแสดงค่าผลการคำนวน
10. ใส่ CommandButton1 เพื่อสั่งให้โปรแกรมทำงาน
11. กำหนดค่าคุณสมบัติ (property) ให้แต่ละคอนโทรลดังนี้

คอนโทรล
พร็อพเพอร์ตี้
ค่าที่กำหนด
UserForm1
Caption
UserForm1

Height
125

Width
240
TextBox1
Caption
-

Height
25

Width
66
TextBox2
Caption
-

Height
25

Width
66
Label1
Caption
ความกว้าง

Height
25

Width
66
Label2
Caption
ความยาว

Height
25

Width
66
Label3
BackColor
&H8000000E&

Caption
-

Height
30

Width
66
CommandButton1
Caption
พื้นที่

Height
30

Width
72



รูปที่ 5.11
12. ใส่โค๊ดคำสั่งใน CommandButton1 โดยการดับเบิ้ลคลิกที่ CommandButton1 หน้าต่างโค๊ดคำสั่งจะปรากฏขึ้นมา ให้พิมพ์คำสั่งดังนี้
Private Sub CommandButton1_Click()
Dim a As String
Dim x As Integer
Dim y As Integer
x = TextBox1.Text
y = TextBox2.Text
a = area(x, y)
Label3.Caption = a
End Sub
จากรหัสคำสั่งจะสังเกตุเห็นว่า การเรียกฟังก์ชั่นที่เราสร้างขึ้นสามารถเรียกโดยการพิมพ์ชื่อและอะกิวเม้นเท่านั้น = area(x,y)
13. ทดสอบโปรแกรม โดยการกลับไปที่หน้าต่าง Worksheet แล้วสร้างปุ่ม Button1 ขึ้นมา (ถ้าไม่มีปุ่ม Button1 ให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms) คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button1

รูปที่ 5.12

14. จากนั้นหน้าต่าง Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New
15. เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้
Sub Button1_Click()
UserForm1.Show
End Sub
16. การแสดงผลโดยการกดปุ่ม Button1 เพื่อเรียกโปรแกมขึ้นมา ให้ลองใส่ข้อมูลความกว้างและความยาวลงใน TextBox1 และ TextBox2  แล้วกดปุ่ม CommandButton1 เพื่อคำนวนพื้นที่

รูปที่ 5.13