บทที่ 8 การเขียนผังงานและการควบคุมทิศทางของโปรแกรม

การเขียนผังงาน FLOW CHART
ผังงานเป็นแผนภาพที่แสดงถึงขั้นตอนวิธีการหรือกระบวนการที่แสดงขั้นตอน โดยใช้สัญลักษณ์ชนิดต่างๆ เชื่อมต่อด้วยลูกศร การเขียนผังงาน flow chart ช่วยในการแสดงขั้นตอนการดำเนินงานทีละขั้นตอน โดยลูกศรเป็นตัวเชื่อมขั้นตอนการดำเนินงาน เพื่อแสดงทิศทางการควบคุม หรือการจัดการกระบวนการด้านต่างๆ

ประโยชน์ของการเขียนผังงาน
1. ใช้แสดงโครงสร้างการทำงานของโปรแกรมทั้งหมด
2. ทำความเข้าใจภาพรวมทั้งหมดของกระบวนการได้ง่าย และรวดเร็ว
3. การเขียนผังงานสามารถนำไปประยุกต์ในการเขียนโปรแกรมได้ทุกภาษา
4. การเขียนผังงานช่วยให้ตรวจสอบข้อผิดพลาดของโปรแกรมได้อย่างรวดเร็ว
5. สามารถนำไปพัฒนา ปรับปรุงในอนาคตได้

ลักษณะของผังงานที่ดี
1. ลำดับขั้นตอนการทำงานควรจะเริ่มจากบนลงล่าง หรือจากซ้ายไปขวา
2. มีทางเข้าหรือจุดเริ่มต้น และทางออกหรือจุดสิ้นสุดเพียงทางเดียวเท่านั้น
3. ในสัญลักษณ์ใด ๆ มีทางออกเพียงทางเดียว ยกเว้นสัญลักษณ์แสดงการตัดสินใจ หรือ ทางเลือกสามารถมีทางออกได้มากกว่าหนึ่งทาง
4. ผังงานควรชัดเจน เป็นระเบียบ
5. ข้อความหรือคำสั่งใด ๆ ที่อยู่ในสัญลักษณ์ควรสั้น กระชับ ได้ใจความ และสามารถเข้าใจได้ง่าย
6. ใช้สัญลักษณ์ที่มีขนาดเหมาะสมกับคำสั่ง
7. ในกระบวนการทำงานที่ต้องการเพิ่มคำอธิบายเข้าไปเพื่อให้เกิดความเข้าใจ ก็สามารถทำได้โดยการใช้สัญลักษณ์หมายเหตุประกอบ


การเขียนผังงาน Flowchart มีสัญลักษณ์ที่ควรทราบ ดังนี้

การเขียนผังงาน Flowchart แบบโครงสร้าง
การเขียน Flowchart แบบโครงสร้างมีประโยชน์คือทำให้การตรวจสอบขั้นตอนการทำงานทำได้ง่ายและเป็นระเบียบ ซึ่งมีหลักการเขียนอยู่ 3 ข้อ ดังนี้

การควบคุมการทำงานของโปรแกรม
คำสั่งควบคุมการทำงาน มีหลายประเภท ดังนี้
1. แบบเรียงลำดับการทำงาน (Sequence)
เป็นการควบคุมการทำงานของโปรแกรม แบบลำดับขั้นตอน หรือกระบวนการที่กำหนดไว้ ตั้งแต่เริ่มต้น จนสิ้นสุด
2. แบบเงื่อนไข (Condition Statement)
เป็นการควบคุมการทำงานของโปรแกรม แบบมีเงื่อนไข ให้ตัดสินใจ ให้โปรแกรม กระทำหรือไม่กระทำ เมื่อผลเป็นไปตามเงื่อนไขหรือไม่เป็นไปตามเงื่อนไข
2.1ประโยคแบบเงื่อนไข IF-THEN
2.2ประโยคแบบเงื่อนไข IF-THEN-ELSE
2.3ประโยคแบบเงื่อนไข IF-THEN-ELSEIF
2.4ประโยคแบบเงื่อนไข SELECT CASE
3. แบบวนซ้ำ (Iteration Statement)
เป็นการควบคุมการทำงานของโปรแกรม แบบวนซ้ำ เพื่อให้โปรแกรมวนซ้ำคำสั่ง ตามจำนวนรอบที่กำหนด หรือมีเงื่อนไขให้ออกจากลูปการทำงาน
3.1ประโยคแบบวนซ้ำ FOR NEXT
3.2.ประโยคแบบวนซ้ำ (Iteration Statement) DO-WHILE-LOOP
3.3.ประโยคแบบวนซ้ำ (Iteration Statement) DO-LOOP-WHILE
3.4ประโยคแบบวนซ้ำ (Iteration Statement) DO-UNTIL-LOOP
3.5ประโยคแบบวนซ้ำ (Iteration Statement) DO-LOOP-UNTIL



1. แบบเรียงลำดับการทำงาน (Sequence)
เป็นโครงสร้างการทำงานแบบลำดับขั้นตอน หรือกระบวนการที่กำหนดไว้ โดยไม่มีคำสั่ง หรือส่วนของการตัดสินใจ


ตัวอย่าง หาผลคูณของ A x B=C โดย A และ B เป็นตัวแปรรับค่าจาก Input box
วิธีทำ 
1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New

รูปที่ 8.1

6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้

Sub sequence()
Dim a, b, c As Integer
a = InputBox("Please input value of A")
b = InputBox("Please input value of B")
c = a * b
MsgBox "Sum is " & c
End Sub

ทดสอบโปรแกรม
1.กดปุ่ม Button เพื่อสั่งให้โปรแกรมทำงาน
2.เมื่อ Input box แสดงขึ้นมาให้ใส่ค่า A แล้วกดปุ่ม OK

รูปที่ 8.2
3.เมื่อ Input box แสดงขึ้นมาให้ใส่ค่า B แล้วกดปุ่ม OK

รูปที่ 8.3
4.โปรแกรมจะทำการคำนวน และแสดงผลการคำนวนออกมาโดย Message box

รูปที่ 8.4


2. ประโยคแบบเงื่อนไข (Condition Statement)
2.1ประโยคแบบเงื่อนไข IF-THEN (1 เงื่อนไข 1 คำสั่ง)
คำสั่ง IF…Then ใช้สำหรับตรวจสอบเงื่อนไข โดยถ้าเงื่อนไขเป็นจริง จะทำตามคำสั่ง
Syntax โครงสร้าง
If <เงื่อนไข> then <คำสั่ง>

ตัวอย่าง ตรวจเช็ครหัสผ่านที่ได้จากใส่รหัสผ่านใน InputBox ถ้ารหัสผ่านถูกต้องให้แสดงข้อความ Your password is correct
วิธีทำ
1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New

รูปที่ 8.5
6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้
Sub if_then()
Password = InputBox("Please enter your password")
If Password = 1234 Then MsgBox ("Your password is correct")
End Sub
การแสดงผลคลิกที่ปุ่ม Button1 เพื่อแสดงผล
1.เมื่อคลิกปุ่ม Button ไดอะล็อคบล็อคเพื่อรับค่าจะปรากฏขึ้น ให้พิมพ์รหัสตัวเลขลงไป เป็น 1234

รูปที่ 8.6
2.ถ้ารหัสถูกต้องจะมีไดอะล็อคบล๊อค แสดงขึ้นมาด้วยข้อความ Your password is correct แต่ถ้าไม่ถูกต้องก็จะไม่มีไดอะล็อคบล๊อค แสดงขึ้นมา

รูปที่ 8.7
2.2ประโยคแบบเงื่อนไข IF-THEN-ELSE (1 เงื่อนไข 2 คำสั่ง)
คำสั่ง IF…Then…Else ใช้สำหรับตรวจสอบเงื่อนไขหนึ่ง ๆ โดยถ้าเงื่อนไงนี้เป็นจริงจะทำชุดคำสั่งหนึ่งแต่ถ้าเป็นเท็จจะทำอีกชุดคำสั่งหนึ่ง
Syntax โครงสร้าง
If <เงื่อนไข> then
<ชุดคำสั่งเมื่อเงื่อนไขเป็นจริง>
Else
<ชุดคำสั่งเมื่อเงื่อนไขเป็นเท็จ>
End if


ตัวอย่าง ตรวจเช็ครหัสผ่านที่ได้จากใส่รหัสผ่านใน InputBox ถ้ารหัสผ่านถูกต้องให้แสดงข้อความ “Your password is correct” ถ้ารหัสผ่านไม่ถูกต้องให้แสดงข้อความ “Please try again”
วิธีทำ 
1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New

รูปที่ 8.8

6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้

Sub if_then_else()
Password = InputBox("Please enter your password")
If Password = 1234 Then
MsgBox ("Your password is correct")
Else
MsgBox ("Please try again")
End If
End Sub



การแสดงผลคลิกที่ปุ่ม Button เพื่อแสดงผล
1.เมื่อคลิกปุ่ม Button ไดอะล็อคบล็อคเพื่อรับค่าจะปรากฏขึ้น ให้พิมพ์รหัสตัวเลข

รูปที่ 8.9
2.ถ้ารหัสถูกต้องจะมีไดอะล็อคบล๊อค แสดงขึ้นมาด้วยข้อความ Your password is correct แต่ถ้าไม่ถูกต้องก็จะมีไดอะล็อคบล๊อค แสดงข้อความ “Please try again” ขึ้นมา

รูปที่ 8.10



2.3ประโยคแบบเงื่อนไข IF-THEN-ELSEIF (หลายเงื่อนไข หลายคำสั่ง)
คำสั่ง IF…Then…Elseif ใช้สำหรับตรวจสอบเงื่อนไข โดยถ้าเงื่อนไขที่ 1 เป็นจริงก็จะทำชุดคำสั่งที่หนึ่ง แต่ถ้าเป็นเท็จ ก็จะเช็คเงื่อนไขและทำในคำสั่งถัดไป
Syntax โครงสร้าง
If <เงื่อนไขที่ 1 > then
<ชุดคำสั่งที่ 1>
Elseif <เงื่อนไขที่ 2> then
<ชุดคำสั่งที่ 2>
Elseif <เงื่อนไขที่ 3> then
<ชุดคำสั่งที่ 3>
End if

ตัวอย่าง โปรแกรมคิดเกรดที่ระดับคะแนนต่างๆ
วิธีทำ
1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New

รูปที่ 8.11
6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้
Sub if_then_elseif()
Score = InputBox("Please enter your score")
If Score >= 80 Then
Grade = "A"
ElseIf Score >= 70 Then
Grade = "B"
ElseIf Score >= 60 Then
Grade = "C"
ElseIf Score >= 50 Then
Grade = "D"
Else
Grade = "F"
End If
MsgBox "Your grade is " & Grade
End Sub
การแสดงผลคลิกที่ปุ่ม Button3 เพื่อแสดงผล

รูปที่ 8.12
1.เมื่อคลิกปุ่ม Button 3 ไดอะล็อคบล็อคเพื่อรับค่าจะปรากฏขึ้น ให้พิมพ์คะแนนลงไป
แล้วกดปุ่ม OK โปรแกรมจะแสดงผลการคำนวนเกรด ออกมา
2.4ประโยคแบบเงื่อนไข SELECT CASE
Syntax โครงสร้าง
Select Case ชื่อตัวแปร
Case เงื่อนไข 1 : คำสั่ง 1
Case เงื่อนไข 2 : คำสั่ง 2
Case เงื่อนไข n : คำสั่ง n
End Select

ตัวอย่าง โปรแกรมให้เกรดระดับคะแนน
วิธีทำ 
1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New


รูปที่ 8.13

6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้
Sub select_case()
Score = InputBox("Please enter your score")
Select Case Score
Case 80 To 100: Grade = "A"
Case 70 To 79: Grade = "B"
Case 60 To 69: Grade = "C"
Case 50 To 59: Grade = "D"
Case 0 To 49: Grade = "F"
End Select
MsgBox "Your grade is " & Grade
End Sub

การแสดงผลคลิกที่ปุ่ม Button เพื่อแสดงผล

รูปที่ 8.14
1.เมื่อคลิกปุ่ม Button ไดอะล็อคบล็อคเพื่อรับค่าจะปรากฏขึ้น ให้พิมพ์คะแนนลงไป
แล้วกดปุ่ม OK โปรแกรมจะแสดงผลของเกรดออกมา


3. ประโยคแบบวนซ้ำ (Iteration Statement)
3.1ประโยคแบบวนซ้ำ FOR NEXT
เป็นการวนซ้ำของกลุ่มคำสั่ง โดยกำหนดจำนวนรอบ
Syntax โครงสร้าง
For counter = start To end [Step step]
[คำสั่ง]
[Exit For]
[คำสั่ง]
Next [counter]

ตัวอย่าง พิมพ์ค่า 1 ถึง 10 ในเรียงลงมาในคอลัมป์ A
วิธีทำ 
1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New

รูปที่ 8.15

6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้
Sub for_next()
Dim i As Integer
For i = i To 10
Cells(i,1) = i
Next i
End Sub

การแสดงผลคลิกที่ปุ่ม Button เพื่อแสดงผล
เมื่อกดปุ่ม Button 5 โปรแกรมจะแสดงค่าในเซลล์ ตั้งแต่ 1 ถึง 10 ดังรูป

รูปที่ 8.16


3.2 ประโยคแบบวนซ้ำ (Iteration Statement) DO-WHILE-LOOP
Do While จะวนลูปก็ต่อเมื่อเงื่อนไข ยังเป็นจริงอยู่ ถ้าเงื่อนไขดังกล่าวเป็นเท็จ ก็จะออกจากลูปทันที การใช้ Do While นี้ มีโอกาสที่จะไม่วนลูปเลยถ้าเงื่อนไขที่เข้ามาเป็นเท็จ
Syntax โครงสร้าง
Do While <เงื่อนไข>
คำสั่ง
[Exit Do]
Loop

ตัวอย่าง หาผลรวมสะสมของข้อมูล ทีละแถวข้อมูล ตั้งแต่เซลล์ A1 ถึง A10
วิธีทำ
1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่ พิมพ์ค่า ลงในเซลล์ A1 ถึง A10 ดังรูป
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New

รูปที่ 8.17
6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้

Sub do_while_loop()
Dim i As Integer
Dim total As Integer
i = 1
Do While Cells(i, 1) <> ""
total = total + Cells(i, 1)
Cells(i, 2) = total
i = i + 1
Loop
End Sub
ผลลัพธ์

รูปที่ 8.18
ทดลองลบข้อมูลในเซลล์ A1 ออก แล้วลองกดปุ่ม Button จะเห็นว่า ไม่มีผลการคำนวนปรากฏออกมาเนื่องจาก การควบคุมทิศทางของโปรแกรมแบบ DO WHILE LOOP จะมีการตรวจสอบเงื่อนไขก่อนทำตามคำสั่งในลูป ดังนั้นเมื่อข้อมูลในเซลล์ A1 ไม่มีค่า หรือว่างเปล่า โปรแกรมจึงออกจากลูปทันที ทำให้ไม่มีการคำนวนในแถวข้อมูลถัดไป


รูปที่ 8.19


3.3คำสั่ง Do-Loop While
คำสั่งนี้ มีลักษณะจะทำตามคำสั่งในลูปอย่างน้อย 1 รอบ แล้วจึงตรวจสอบเงื่อนไข ถ้าเป็นจริง ก็จะทำงานตามคำสั่งในลูปต่อไป แต่ถ้าเป็นเท็จ ก็จะออกจากลูป
Syntax โครงสร้าง
Do
คำสั่ง
[Exit Do]
Loop While <เงื่อนไข>


ตัวอย่าง หาผลรวมสะสมของข้อมูล ทีละแถวข้อมูล ตั้งแต่เซลล์ A1 ถึง A10
วิธีทำ
1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่ พิมพ์ค่า ลงในเซลล์ A1 ถึง A10 ดังรูป
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New

รูปที่ 8.20
6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้
Sub do_loop_while()
Dim i As Integer
Dim total As Integer
i = 1
Do
total = total + Cells(i, 1)
Cells(i, 2) = total
i = i + 1
Loop While Cells(i, 1) <> ""
End Sub
ผลลัพธ์

รูปที่ 8.21

ทดลองลบข้อมูลในเซลล์ A1 ออก แล้วลองกดปุ่ม Button จะเห็นว่า มีผลการคำนวนปรากฏออกมาเนื่องจาก การควบคุมทิศทางของโปรแกรมแบบ DO LOOP WHILE จะมีการทำตามคำสั่งในลูปก่อน 1 ครั้ง แล้วจึงตรวจสอบเงื่อนไข ดังนั้นแม้ข้อมูลในเซลล์ A1 จะไม่มีค่า หรือว่างเปล่า โปรแกรมก็ยังทำงานต่อไป จนกลับเข้าลูปอีกครั้ง ซึ่งในเซลล์ A2 นั้น ไม่ได้ว่างเปล่า จึงทำให้โปรแกรมทำงานต่อไป


รูปที่ 8.22



3.4คำสั่ง Do Until-Loop
คำสั่งนี้มีหน้าที่สั่งให้วนลูปเช่นกัน มีจำนวนรอบขึ้นอยู่กับเงื่อนไข ถ้าเงื่อนไขเป็นเท็จ จึงจะวนลูป แต่ถ้าเงื่อนไขเป็นจริงจะออกจากลูป
Syntax โครงสร้าง
Do Until <เงื่อนไข>
คำสั่ง
[Exit Do]
คำสั่ง
Loop

ตัวอย่าง หาผลรวมสะสมของข้อมูล ทีละแถวข้อมูล ตั้งแต่เซลล์ A1 ถึง A10
วิธีทำ 
1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่ พิมพ์ค่า ลงในเซลล์ A1 ถึง A10 ดังรูป
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New

รูปที่ 8.23

6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้
Sub do_until_loop()
Dim i As Integer
Dim total As Integer
i = 1
Do Until Cells(i, 1) = ""
total = total + Cells(i, 1)
Cells(i, 2) = total
i = i + 1
Loop
End Sub
ผลลัพธ์

รูปที่ 8.24

ทดลองลบข้อมูลในเซลล์ A1 ออก แล้วลองกดปุ่ม Button จะเห็นว่า ไม่มีผลการคำนวนปรากฏออกมาเนื่องจาก การควบคุมทิศทางของโปรแกรมแบบ DO UNTIL LOOP จะมีการตรวจสอบเงื่อนไขก่อนทำตามคำสั่งในลูป ดังนั้นเมื่อข้อมูลในเซลล์ A1 ไม่มีค่า หรือว่างเปล่า โปรแกรมจึงออกจากลูปทันที ทำให้ไม่มีการคำนวนในแถวข้อมูลถัดไป


รูปที่ 8.25


3.5คำสั่ง Do-Loop Until
คำสั่ง Do-Loop Until จะทำตามคำสั่งก่อน 1 รอบ แล้วจึงตรวจสอบเงื่อนไข ถ้าเงื่อนไขเป็นจริง จะออกจากลูปทันที การใช้ลูปแบบนี้จะมีการทำงานตามคำสั่งก่อน อย่างน้อยที่สุด 1 รอบ แล้วจึงทำการตรวจสอบเงื่อนไข
Syntax โครงสร้าง
Do
คำสั่ง
[Exit Do]
คำสั่ง
Loop Until <เงื่อนไข>

ตัวอย่าง หาผลรวมสะสมของข้อมูล ทีละแถวข้อมูล ตั้งแต่เซลล์ A1 ถึง A10
วิธีทำ
1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่ พิมพ์ค่า ลงในเซลล์ A1 ถึง A10 ดังรูป
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New

รูปที่ 8.26
6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้
Sub do_loop_until()
Dim i As Integer
Dim total As Integer
i = 1
Do
total = total + Cells(i, 1)
Cells(i, 2) = total
i = i + 1
Loop Until Cells(i, 1) = ""
End Sub
ผลลัพธ์

รูปที่ 8.27
ทดลองลบข้อมูลในเซลล์ A1 ออก แล้วลองกดปุ่ม Button จะเห็นว่า มีผลการคำนวนปรากฏออกมาเนื่องจาก การควบคุมทิศทางของโปรแกรมแบบ DO LOOP UNTIL จะมีทำตามคำสั่งในลูปก่อน 1 ครั้ง แล้วจึงตรวจสอบเงื่อนไข ดังนั้นแม้ข้อมูลในเซลล์ A1 จะไม่มีค่า หรือว่างเปล่า โปรแกรมก็ยังทำงานต่อไป จนกลับเข้าลูปอีกครั้ง ซึ่งในเซลล์ A2 นั้น ไม่ได้ว่างเปล่า จึงทำให้โปรแกรมทำงานต่อไป


รูปที่ 8.28



การนับและการสะสมค่า
COUNTING (การนับ)
ในการวนซ้ำของโปรแกรม หรือการประมวลผล อาจจำเป็นต้องการนับค่าทั้งหมดของข้อมูล เพื่อประมวลผลของตัวแปรในลักษณะของการนับค่า เช่น จำนวนพนักงานมีกี่คน จำนวนแถวข้อมูลมีกี่แถว จำนวนการวนรอบการทำงานมีกี่รอบ
ตัวแปรของการนับ = ตัวแปรของการนับ+1
สมมติให้ Count เป็นตัวแปรจำนวนพนักงาน
Count = Count+1

ACCUMULATION (การสะสมค่า)
ในการวนซ้ำของโปรแกรม หรือการประมวลผล นอกจากการนับค่าแล้ว อาจมีความจำเป็นที่จะต้องหาค่าผลรวมทั้งหมด เช่น ผลรวมของอายุพนักงาน ผลรวมของชั่วโมงทำงานของพนักงานทั้งหมด โดยกำหนดตัวแปรให้เก็บค่าผลรวมทั้งหมด
ตัวแปรเก็บค่าสะสม= ตัวแปรเก็บค่าสะสม+ตัวแปรที่ต้องการสะสมค่า
สมมติให้ Total_Age เป็นตัวแปรแทนอายุของพนักงานสะสม
years เป็นตัวแปรของอายุพนักงานแต่ละคน
Total_Age= Total_Age+years



ตัวอย่างโปรแกรม นับจำนวนชายหญิง และหาค่าผลรวมของอายุโดยแยกชายและหญิง

ผังงาน


รูปที่ 8.29
วิธีทำ 1.เปิดโปรแกรมเอ็กเซลล์
2.เปิดไฟล์ใหม่ แล้วพิมพ์ค่าลงในตารางตามรูป
3.เลือกปุ่ม Button (ถ้าไม่มีให้คลิกขวาที่เมนู แล้วคลิกเลือก Forms)
4.คลิกเม้าส์ซ้ายค้างแล้วลากเม้าส์ เพื่อวาดปุ่ม Button
5.จากนั้นวินโดว์ Assign macro จะเปิดขึ้นมา ให้คลิกเลือกปุ่ม New

รูปที่ 8.30

6.เมื่อหน้าต่าง Visual Basic Editor เปิดขึ้น ให้พิมพ์คำสั่งดังนี้
Sub counting_accumulate()
i = 1
Do While Cells(i, 1) <> ""
If Cells(i, 2) = "male" Then count_male = count_male + 1
If Cells(i, 2) = "male" Then Totalage_male = Totalage_male + Cells(i, 3)
If Cells(i, 2) = "female" Then count_female = count_female + 1
If Cells(i, 2) = "female" Then Totalage_female = Totalage_female + Cells(i, 3)
i = i + 1
Loop
MsgBox "Male = " & count_male & "Total age =" & Totalage_male & Chr(10)&_ "Female = " & count_female & "Total age = " & Totalage_female
End Sub
ทดสอบโปรแกรม
1.กดปุ่ม Button
2.เมื่อกดปุ่ม Button แล้ว จะมี Message box แสดงผลการคำนวนนับจำนวนชาย และหญิง รวมทั้งคำนวนอายุสะสมโดยแยกชายและหญิง ดังรูป



รูปที่ 8.31