สวัสดี อีกครั้งครับ กับบทความอีกเรื่อง ที่เกี่ยวกับ VBA นานๆจะโผล่มาเขียนสักเรื่องที คงไม่ว่ากันนะครับ มีภาระกิจต้องจัดการเยอะแยะ แต่ก็อยากเขียนบทความเป็นงานอดิเลก^^
วันนี้จะเขียนเกี่ยวกับ การกระทำที่วนซ้ำหลายๆรอบด้วยชุดคำสั่งเพื่อการวนซ้ำโดยเฉพาะที่อยู่ใน VBA ต่อไปจำเรียกการวนซ้ำว่าวนลูป (Loop) นะครับ ขออนุญาตทับศัพท์ไปเลย ว่า วนซ้ำ= Loop
ชุดคำสั่งเพื่อการวนซ้ำใน VBA จะมี 3 แบบ นะครับคือ
1) For....Next
2) Do....Loop Until
3) Do....Loop While
1. การวนลูปด้วย For....Next
การวนลูปแบบนี้เหมาะสำหรับกรณีที่เรารู้จำนวนของการวนรอบซ้ำที่ชัดเจน เช่น ต้องการวน 10 ครั้ง หรือ 100 ครั้ง เป็นต้น และจะต้องมีตัวแปรสำหรับการวนรอบแต่ละครั้งด้วย ที่นิยมใช้ก็มีเช่น ตัวแปร i , j หรือ k แต่อาจจะตั้งชื่อตัวแปรการวนซ้ำได้เองตามต้องการนะครับ มาดูตัวอย่างการใช้งานกัน...
รูปแบบของชุดคำสั่ง
For V = M to N
...
(แทรกชุดคำสั่งสำหรับในแต่ละรอบตรงนี้- ระหว่างบรรทัด For กับ Next)
...
Next
เมื่อ
ตัวอย่างที่ 1 ต้องการหาผลลัพท์ของ 1+2+3+4+5+6+7+8+9+10 โดยใช้การวนลูปแบบ For....Next
Sub summation()
sum=0 'กำหนดตัวแปรชื่อ sum ที่จะใช้เป็นคำตอบของโจทก์นี้ให้มีค่าเป็น 0 ก่อนเริ่มวนลูป
For i = 1 to 10 'เริ่มการวนลูป ในที่นี้ ตัว V หรือตัวแปรที่ใช้ในการวนลูปแต่ละรอบคือ ตัวแปร i มีค่า 'เริ่มจาก 1 เพิ่มขึ้นทีละ 1 ในแต่ละรอบจนถึงค่าสุดท้ายคือ 10 ก็หยุด
sum=sum+i 'เป็นการกระทำที่อยู่ในลูปคือให้เอาค่า sum บวกกับค่า i ของแต่ละรอบแล้วเก็บไว้ที่
'ตัวแปร sum เหมือนเดิม
Next i 'จบการทำงานของลูปในหนึ่งรอบ
Msgbox(sum) 'แสดงกล่องโต้ตอบที่มีค่า sum ออกมา
End Sub
อธิบายโปรแกรม
ในบันทัด For ค่า i จะถูกกำหนดโดยคนเขียนให้มีค่เป็น 1 ในการทำงานครั้งแรกของการวนซ้ำ แล้วโปรแกรมจะตรวจสอบค่า i กับตัวเลขที่อยู่หลัง to ว่า i มีค่าเกิน ค่านี้หรือยัง ถ้ายังก็ให้ทำงานในคำสั่งที่อยู่ในลูป ถ้าเกินแล้วก็ไม่ต้องทำอะไร แล้วให้เลิกวนลูป แล้วข้ามไปทำคำสั่งหลังจากบรรทัด Next
ลูปที่ 1 (i มีค่าเป็น 1) --> sum + i จะมีค่าเป็น 0+1 ซึ่งมีค่าเป็น 1 แล้วบันทึกค่าเก็บไว้ที่ sum อีกครั้ง (ตอนนี้ sum มีค่าเป็น 1) แล้ว พอมาถึงบรรทัด Next มันก็จะไม่วิ่งไปข้างล่าง แต่จะวิ่งขึ้นไปที่คำสั่ง For อีกครั้ง
ลูปที่ 2 เมื่อมา For เป็นครั้งที่ 2 มันจะกำหนดค่า i ให้มีค่ามากกว่าเดิมอยู่ 1 i มีค่าเดิมเป็น 1 ดังนั้นในรอบที่ 2 นี้ i จะมีค่าเป็น 1+1=2 เอง(โดยที่เราไม่ต้องไปสั่งมันทำ) ถัดมาบรรทัดต่อไป ก็จะเอาค่า sum+i (ตอนนี้ sum มีค่า 1 และ i มีค่า 2) ดังนั้น sum+i =1+2=3 แล้วไปเก็บไว้ที่ตัวแปร sum อีกที (sum เก็บค่า=3) แล้วไปบรรทัด Next
ลูปที่ 3 i จะมีค่าเป็น 3 อัตโนมัติ ดังนั้น sum+i = 3+3=6
ลูปที่ 4 i จะมีค่าเป็น 4 อันโนมัติ ดังนั้น sum+i= 6+4=10
ลูปที่ 5 i จะมีค่าเป็น 5 อัตโนมัติ ดังนั้น sum+i = 10+5=15
ลูปที่ 6 i จะมีค่าเป็น 6 อันโนมัติ ดังนั้น sum+i= 15+6=21
ลูปที่ 7 i จะมีค่าเป็น 7 อัตโนมัติ ดังนั้น sum+i = 21+7=28
ลูปที่ 8 i จะมีค่าเป็น 8 อันโนมัติ ดังนั้น sum+i= 28+8=36
ลูปที่ 9 i จะมีค่าเป็น 9 อัตโนมัติ ดังนั้น sum+i = 36+9=45
ลูปที่ 10 i จะมีค่าเป็น 10 อันโนมัติ ดังนั้น sum+i= 45+10=55
ลูปที่ 11 i จะมีค่าเป็น 11 ซึ่งเกินตัวเลขที่เรากำหนดไว้หลัง to (คือค่า 10) โปรแกรมจะไม่ทำคำสั่งในลูป แล้วจะหลุดออกจากการวนซ้ำไปทำคำสั่งที่อยู่ถัดจากบรรทัด Next เลย ในที่นี้คือ Msgbox(sum) ซึ่งก็คือแสดงค่า sum ออกมาในรูปของกล่องโต้ตอบ ก็จบโปรแกรม [อ่านการใช้งานคำสั่ง Msgbox ได้ที่ http://thaiexcelvba.blogspot.com/2012/01/msgbox-excel-vba.html ]
2. การวนลูปด้วย Do....Loop Until
การวนซ้ำแบบนี้มักจะใช้กับกรณีที่รู้เงื่อนไขการหยุดการวนซ็ำอย่างชัดเจน ซึ่งอาจรู้หรือ ไม่รู้ จำนวนรอบของการวนซ้ำก็ได้ แต่ถ้ารู้จำนวนการวนซ้ำให้ใช้ For.....Next จะสะดวกกว่าครับ การทำงานของการวนซ้ำแบบนี้จะไม่มีตัวแปรในการวนแต่ละลูป ถ้าจะใช้ต้องกำหนดเข้ไปเอาเอง
รูปแบบของชุดคำสั่ง
Do
...
(แทรกชุดคำสั่งสำหรับในแต่ละรอบตรงนี้- ระหว่างบรรทัด Do กับ Loop)
...
Loop Until ...(C หรือ เงื่อนไขจบลูป)
Sub summation()
i = 0 'กำหนดค่าเริ่มต้นของตัวแปรที่ใช้ในการวนซ้ำ
sum=0 'กำหนดตัวแปรชื่อ sum ที่จะใช้เป็นคำตอบของโจทก์นี้ให้มีค่าเป็น 0 ก่อนเริ่มวนลูป
Do 'เริ่มการวนลูป
i = i+1 'กำหนดค่าตัวแปรที่ใช้ในการคำนวณในแต่ละลูปเอง โดยให้มีค่าเพิ่มขึ้น 1
sum=sum+i 'เอาค่า sum บวกกับค่า i ของแต่ละรอบแล้วเก็บไว้ที่ ตัวแปร sum เหมือนเดิม
Loop Until i >9 'เงื่อนไขการจบการวนซ้ำ คือให้ทำวนซ้ำไปเรื่อยๆจนค่า i >9 ถึงหยุดวนซ้ำ
Msgbox(sum) 'แสดงกล่องโต้ตอบที่มีค่า sum ออกมา
End Sub
ข้อสังเกตุ
1. การทำงานแบบวนซ้ำจะเริ่มที่บรรทัด Do ถึงบรรทัด Loop เท่านั้น
2. แต่ละรอบจะไม่มีตัวแปรในการวนซ้ำให้มา ต้องกำหนดเอาเอง เช่น i = i+1 ซึ่งอาจกำหนดเป็นอย่าง อื่นก็ได้ตามความต้องการเช่น i = 5+i ก็ได้เป็นต้น
3. ในการวนซ้ำรอบสุดท้าย ก็คือเงื่อนไขที่กำหนดให้หยุดเป็นจริงครั้งแรก (เช่นที่ i มีค่าเป็น 10) โปรแกรมจะวนซ้ำขึ้นไปทำงานอีก 1 รอบแล้วออกจากการวนซ้ำ (นี่จึงใช้เงื่อนไขจบเป็น i >9 ถ้าใช้ i >10 ก็จะได้การวนซ้ำเพิ่มอีกหนึ่งรอบคือที่ i=11 มาด้วยซึ่งได้คำตอบเป็น sum=66)
3. การวนลูปด้วย Do....Loop While
การวนซ้ำแบบนี้จะคล้ายๆกับ Do ...Loop Until คือมักจะใช้กับกรณีที่รู้เงื่อนไขการหยุดการวนซ็ำอย่างชัดเจน ซึ่งอาจรู้หรือ ไม่รู้ จำนวนรอบของการวนซ้ำก็ได้ แต่ถ้ารู้จำนวนการวนซ้ำให้ใช้ For.....Next จะสะดวกกว่าครับ ข้อแตกต่างระหว่าง Do...Loop Until กับ Do Loop While ก็คือ สำหรับ Do Loop While มักจะใช้เงื่อนไขการจบที่เหตุการณ์หนึ่งไม่เป็นจริง (พูดอีกนัยหนึ่งคือให้วนซ้ำไปเรื่อยๆหากเงื่อนไขการวนซ้ำยังเป็นจริงอยู่ และหยุดวนซ้ำเมื่อเหตุการณ์นั้นไม่เป็นจริงต่อไป) การทำงานของการวนซ้ำแบบนี้จะไม่มีตัวแปรในการวนแต่ละลูป ถ้าจะใช้ต้องกำหนดเข้ไปเอาเอง
รูปแบบของชุดคำสั่ง
Do
...
(แทรกชุดคำสั่งสำหรับในแต่ละรอบตรงนี้- ระหว่างบรรทัด Do กับ Loop)
...
Loop While ...(C หรือ เงื่อนไขจบลูป)
Sub summation()
i = 0 'กำหนดค่าเริ่มต้นของตัวแปรที่ใช้ในการวนซ้ำ
sum=0 'กำหนดตัวแปรชื่อ sum ที่จะใช้เป็นคำตอบของโจทก์นี้ให้มีค่าเป็น 0 ก่อนเริ่มวนลูป
Do 'เริ่มการวนลูป
i = i+1 'กำหนดค่าตัวแปรที่ใช้ในการคำนวณในแต่ละลูปเอง โดยให้มีค่าเพิ่มขึ้น 1
sum=sum+i 'เอาค่า sum บวกกับค่า i ของแต่ละรอบแล้วเก็บไว้ที่ ตัวแปร sum เหมือนเดิม
Loop While i<10 'เงื่อนไขการจบการวนซ้ำ คือให้ทำวนซ้ำไปเรื่อยๆจนค่า i<10 ถึงหยุดวนซ้ำ
Msgbox(sum) 'แสดงกล่องโต้ตอบที่มีค่า sum ออกมา
End Sub
ข้อสังเกตุ
1. การทำงานแบบวนซ้ำจะเริ่มที่บรรทัด Do ถึงบรรทัด Loop While เท่านั้น
2. แต่ละรอบจะไม่มีตัวแปรในการวนซ้ำให้มา ต้องกำหนดเอาเอง เช่น i = i+1 ซึ่งอาจกำหนดเป็นอย่าง อื่นก็ได้ตามความต้องการเช่น i = 5+i ก็ได้เป็นต้น
3. ในการวนซ้ำรอบสุดท้าย ก็คือเงื่อนไขที่กำหนดให้หยุดไม่เป็นจริงครั้งแรก (เช่นที่ i มีค่าเป็น 10) โปรแกรมจะวนซ้ำขึ้นไปทำงานอีก 1 รอบแล้วออกจากการวนซ้ำ (นี่จึงใช้เงื่อนไขจบเป็น i<10 ถ้าใช้ i <11 ก็จะได้การวนซ้ำเพิ่มอีกหนึ่งรอบคือที่ i=11 มาด้วยซึ่งได้คำตอบเป็น sum=66)
ไม่ยากเลยใช่ไหมละครับ
ขอให้สนุกกับ การวนซ้ำใน VBA นะครับ ^^
วันนี้จะเขียนเกี่ยวกับ การกระทำที่วนซ้ำหลายๆรอบด้วยชุดคำสั่งเพื่อการวนซ้ำโดยเฉพาะที่อยู่ใน VBA ต่อไปจำเรียกการวนซ้ำว่าวนลูป (Loop) นะครับ ขออนุญาตทับศัพท์ไปเลย ว่า วนซ้ำ= Loop
ชุดคำสั่งเพื่อการวนซ้ำใน VBA จะมี 3 แบบ นะครับคือ
1) For....Next
2) Do....Loop Until
3) Do....Loop While
1. การวนลูปด้วย For....Next
การวนลูปแบบนี้เหมาะสำหรับกรณีที่เรารู้จำนวนของการวนรอบซ้ำที่ชัดเจน เช่น ต้องการวน 10 ครั้ง หรือ 100 ครั้ง เป็นต้น และจะต้องมีตัวแปรสำหรับการวนรอบแต่ละครั้งด้วย ที่นิยมใช้ก็มีเช่น ตัวแปร i , j หรือ k แต่อาจจะตั้งชื่อตัวแปรการวนซ้ำได้เองตามต้องการนะครับ มาดูตัวอย่างการใช้งานกัน...
รูปแบบของชุดคำสั่ง
For V = M to N
...
(แทรกชุดคำสั่งสำหรับในแต่ละรอบตรงนี้- ระหว่างบรรทัด For กับ Next)
...
Next
เมื่อ
- คำว่า For และ Next เป็นคำบังคับที่ต้องมี
- V เป็นชื่อตัวแปรสำหรับการวนลูป จะมีค่าเปลี่ยนไปในแต่ะรอบ ส่วนใหญ่(ถ้ามักไม่ค่อยคิดอะไรมาก) ก็ใช้ตัว i, j หรือ k หรืออาจตั้งชือเป็นตัวอื่นตามที่ต้องการเช่น nLoop หรือ num เป็นต้น ในแต่ละรอบของการวนลูปค่า V จะเปลี่ยนไปทีละ 1
- M เป็นตัวเลข เริ่มต้นของตัวแปร V ในการวนลูปครั้งแรก (โดยทั่วไปมักำหนดเท่ากับ 1 แต่เริ่มที่จำนวนเต็มอื่นก็ได้)
- N เป็นตัวเลขสุดท้ายของตัวแปร V ในลูปสุดท้ายของการทำงาน ถ้ากำหนด M มีค่าเป็น 1 N ก็จะเป็นจำนวนรอบของการวนลูปพอดี
ตัวอย่างที่ 1 ต้องการหาผลลัพท์ของ 1+2+3+4+5+6+7+8+9+10 โดยใช้การวนลูปแบบ For....Next
Sub summation()
sum=0 'กำหนดตัวแปรชื่อ sum ที่จะใช้เป็นคำตอบของโจทก์นี้ให้มีค่าเป็น 0 ก่อนเริ่มวนลูป
For i = 1 to 10 'เริ่มการวนลูป ในที่นี้ ตัว V หรือตัวแปรที่ใช้ในการวนลูปแต่ละรอบคือ ตัวแปร i มีค่า 'เริ่มจาก 1 เพิ่มขึ้นทีละ 1 ในแต่ละรอบจนถึงค่าสุดท้ายคือ 10 ก็หยุด
sum=sum+i 'เป็นการกระทำที่อยู่ในลูปคือให้เอาค่า sum บวกกับค่า i ของแต่ละรอบแล้วเก็บไว้ที่
'ตัวแปร sum เหมือนเดิม
Next i 'จบการทำงานของลูปในหนึ่งรอบ
Msgbox(sum) 'แสดงกล่องโต้ตอบที่มีค่า sum ออกมา
End Sub
อธิบายโปรแกรม
ในบันทัด For ค่า i จะถูกกำหนดโดยคนเขียนให้มีค่เป็น 1 ในการทำงานครั้งแรกของการวนซ้ำ แล้วโปรแกรมจะตรวจสอบค่า i กับตัวเลขที่อยู่หลัง to ว่า i มีค่าเกิน ค่านี้หรือยัง ถ้ายังก็ให้ทำงานในคำสั่งที่อยู่ในลูป ถ้าเกินแล้วก็ไม่ต้องทำอะไร แล้วให้เลิกวนลูป แล้วข้ามไปทำคำสั่งหลังจากบรรทัด Next
ลูปที่ 1 (i มีค่าเป็น 1) --> sum + i จะมีค่าเป็น 0+1 ซึ่งมีค่าเป็น 1 แล้วบันทึกค่าเก็บไว้ที่ sum อีกครั้ง (ตอนนี้ sum มีค่าเป็น 1) แล้ว พอมาถึงบรรทัด Next มันก็จะไม่วิ่งไปข้างล่าง แต่จะวิ่งขึ้นไปที่คำสั่ง For อีกครั้ง
ลูปที่ 2 เมื่อมา For เป็นครั้งที่ 2 มันจะกำหนดค่า i ให้มีค่ามากกว่าเดิมอยู่ 1 i มีค่าเดิมเป็น 1 ดังนั้นในรอบที่ 2 นี้ i จะมีค่าเป็น 1+1=2 เอง(โดยที่เราไม่ต้องไปสั่งมันทำ) ถัดมาบรรทัดต่อไป ก็จะเอาค่า sum+i (ตอนนี้ sum มีค่า 1 และ i มีค่า 2) ดังนั้น sum+i =1+2=3 แล้วไปเก็บไว้ที่ตัวแปร sum อีกที (sum เก็บค่า=3) แล้วไปบรรทัด Next
ลูปที่ 3 i จะมีค่าเป็น 3 อัตโนมัติ ดังนั้น sum+i = 3+3=6
ลูปที่ 4 i จะมีค่าเป็น 4 อันโนมัติ ดังนั้น sum+i= 6+4=10
ลูปที่ 5 i จะมีค่าเป็น 5 อัตโนมัติ ดังนั้น sum+i = 10+5=15
ลูปที่ 6 i จะมีค่าเป็น 6 อันโนมัติ ดังนั้น sum+i= 15+6=21
ลูปที่ 7 i จะมีค่าเป็น 7 อัตโนมัติ ดังนั้น sum+i = 21+7=28
ลูปที่ 8 i จะมีค่าเป็น 8 อันโนมัติ ดังนั้น sum+i= 28+8=36
ลูปที่ 9 i จะมีค่าเป็น 9 อัตโนมัติ ดังนั้น sum+i = 36+9=45
ลูปที่ 10 i จะมีค่าเป็น 10 อันโนมัติ ดังนั้น sum+i= 45+10=55
ลูปที่ 11 i จะมีค่าเป็น 11 ซึ่งเกินตัวเลขที่เรากำหนดไว้หลัง to (คือค่า 10) โปรแกรมจะไม่ทำคำสั่งในลูป แล้วจะหลุดออกจากการวนซ้ำไปทำคำสั่งที่อยู่ถัดจากบรรทัด Next เลย ในที่นี้คือ Msgbox(sum) ซึ่งก็คือแสดงค่า sum ออกมาในรูปของกล่องโต้ตอบ ก็จบโปรแกรม [อ่านการใช้งานคำสั่ง Msgbox ได้ที่ http://thaiexcelvba.blogspot.com/2012/01/msgbox-excel-vba.html ]
2. การวนลูปด้วย Do....Loop Until
การวนซ้ำแบบนี้มักจะใช้กับกรณีที่รู้เงื่อนไขการหยุดการวนซ็ำอย่างชัดเจน ซึ่งอาจรู้หรือ ไม่รู้ จำนวนรอบของการวนซ้ำก็ได้ แต่ถ้ารู้จำนวนการวนซ้ำให้ใช้ For.....Next จะสะดวกกว่าครับ การทำงานของการวนซ้ำแบบนี้จะไม่มีตัวแปรในการวนแต่ละลูป ถ้าจะใช้ต้องกำหนดเข้ไปเอาเอง
รูปแบบของชุดคำสั่ง
Do
...
(แทรกชุดคำสั่งสำหรับในแต่ละรอบตรงนี้- ระหว่างบรรทัด Do กับ Loop)
...
Loop Until ...(C หรือ เงื่อนไขจบลูป)
เมื่อ
ตัวอย่างที่ 2 ต้องการหาผลลัพท์ของ 1+2+3+4+5+6+7+8+9+10 โดยใช้การวนลูปแบบ Do....Loop- คำว่า Do และ Loop Until เป็นคำบังคับที่ต้องมี
- C เป็นเงื่อนไขสำหรับตัดสินว่าจะจบการวนซ้ำเมื่อไหร่ เช่น i >10 เป็นต้น
Sub summation()
i = 0 'กำหนดค่าเริ่มต้นของตัวแปรที่ใช้ในการวนซ้ำ
sum=0 'กำหนดตัวแปรชื่อ sum ที่จะใช้เป็นคำตอบของโจทก์นี้ให้มีค่าเป็น 0 ก่อนเริ่มวนลูป
Do 'เริ่มการวนลูป
i = i+1 'กำหนดค่าตัวแปรที่ใช้ในการคำนวณในแต่ละลูปเอง โดยให้มีค่าเพิ่มขึ้น 1
sum=sum+i 'เอาค่า sum บวกกับค่า i ของแต่ละรอบแล้วเก็บไว้ที่ ตัวแปร sum เหมือนเดิม
Loop Until i >9 'เงื่อนไขการจบการวนซ้ำ คือให้ทำวนซ้ำไปเรื่อยๆจนค่า i >9 ถึงหยุดวนซ้ำ
Msgbox(sum) 'แสดงกล่องโต้ตอบที่มีค่า sum ออกมา
End Sub
ข้อสังเกตุ
1. การทำงานแบบวนซ้ำจะเริ่มที่บรรทัด Do ถึงบรรทัด Loop เท่านั้น
2. แต่ละรอบจะไม่มีตัวแปรในการวนซ้ำให้มา ต้องกำหนดเอาเอง เช่น i = i+1 ซึ่งอาจกำหนดเป็นอย่าง อื่นก็ได้ตามความต้องการเช่น i = 5+i ก็ได้เป็นต้น
3. ในการวนซ้ำรอบสุดท้าย ก็คือเงื่อนไขที่กำหนดให้หยุดเป็นจริงครั้งแรก (เช่นที่ i มีค่าเป็น 10) โปรแกรมจะวนซ้ำขึ้นไปทำงานอีก 1 รอบแล้วออกจากการวนซ้ำ (นี่จึงใช้เงื่อนไขจบเป็น i >9 ถ้าใช้ i >10 ก็จะได้การวนซ้ำเพิ่มอีกหนึ่งรอบคือที่ i=11 มาด้วยซึ่งได้คำตอบเป็น sum=66)
การวนซ้ำแบบนี้จะคล้ายๆกับ Do ...Loop Until คือมักจะใช้กับกรณีที่รู้เงื่อนไขการหยุดการวนซ็ำอย่างชัดเจน ซึ่งอาจรู้หรือ ไม่รู้ จำนวนรอบของการวนซ้ำก็ได้ แต่ถ้ารู้จำนวนการวนซ้ำให้ใช้ For.....Next จะสะดวกกว่าครับ ข้อแตกต่างระหว่าง Do...Loop Until กับ Do Loop While ก็คือ สำหรับ Do Loop While มักจะใช้เงื่อนไขการจบที่เหตุการณ์หนึ่งไม่เป็นจริง (พูดอีกนัยหนึ่งคือให้วนซ้ำไปเรื่อยๆหากเงื่อนไขการวนซ้ำยังเป็นจริงอยู่ และหยุดวนซ้ำเมื่อเหตุการณ์นั้นไม่เป็นจริงต่อไป) การทำงานของการวนซ้ำแบบนี้จะไม่มีตัวแปรในการวนแต่ละลูป ถ้าจะใช้ต้องกำหนดเข้ไปเอาเอง
รูปแบบของชุดคำสั่ง
Do
...
(แทรกชุดคำสั่งสำหรับในแต่ละรอบตรงนี้- ระหว่างบรรทัด Do กับ Loop)
...
Loop While ...(C หรือ เงื่อนไขจบลูป)
เมื่อ
ตัวอย่างที่ 3 ต้องการหาผลลัพท์ของ 1+2+3+4+5+6+7+8+9+10 โดยใช้การวนลูปแบบ Do..Loop While- คำว่า Do และ Loop Whileเป็นคำบังคับที่ต้องมี
- C เป็นเงื่อนไขสำหรับตัดสินว่าจะจบการวนซ้ำเมื่อไหร่ เช่น i <10 เป็นต้น
Sub summation()
i = 0 'กำหนดค่าเริ่มต้นของตัวแปรที่ใช้ในการวนซ้ำ
sum=0 'กำหนดตัวแปรชื่อ sum ที่จะใช้เป็นคำตอบของโจทก์นี้ให้มีค่าเป็น 0 ก่อนเริ่มวนลูป
Do 'เริ่มการวนลูป
i = i+1 'กำหนดค่าตัวแปรที่ใช้ในการคำนวณในแต่ละลูปเอง โดยให้มีค่าเพิ่มขึ้น 1
sum=sum+i 'เอาค่า sum บวกกับค่า i ของแต่ละรอบแล้วเก็บไว้ที่ ตัวแปร sum เหมือนเดิม
Loop While i<10 'เงื่อนไขการจบการวนซ้ำ คือให้ทำวนซ้ำไปเรื่อยๆจนค่า i<10 ถึงหยุดวนซ้ำ
Msgbox(sum) 'แสดงกล่องโต้ตอบที่มีค่า sum ออกมา
End Sub
ข้อสังเกตุ
1. การทำงานแบบวนซ้ำจะเริ่มที่บรรทัด Do ถึงบรรทัด Loop While เท่านั้น
2. แต่ละรอบจะไม่มีตัวแปรในการวนซ้ำให้มา ต้องกำหนดเอาเอง เช่น i = i+1 ซึ่งอาจกำหนดเป็นอย่าง อื่นก็ได้ตามความต้องการเช่น i = 5+i ก็ได้เป็นต้น
3. ในการวนซ้ำรอบสุดท้าย ก็คือเงื่อนไขที่กำหนดให้หยุดไม่เป็นจริงครั้งแรก (เช่นที่ i มีค่าเป็น 10) โปรแกรมจะวนซ้ำขึ้นไปทำงานอีก 1 รอบแล้วออกจากการวนซ้ำ (นี่จึงใช้เงื่อนไขจบเป็น i<10 ถ้าใช้ i <11 ก็จะได้การวนซ้ำเพิ่มอีกหนึ่งรอบคือที่ i=11 มาด้วยซึ่งได้คำตอบเป็น sum=66)
ไม่ยากเลยใช่ไหมละครับ
ขอให้สนุกกับ การวนซ้ำใน VBA นะครับ ^^