ลูปใน VBA

มีบางสถานการณ์ที่โปรแกรม VBA จำเป็นต้องดำเนินการชุดเดียวกันหลายครั้งติดต่อกัน (กล่าวคือ ทำซ้ำบล็อกโค้ดเดิมหลายๆ ครั้ง) สามารถทำได้โดยใช้ลูป VBA

ลูป VBA รวมถึง:

ต่อไป เราจะพิจารณาแต่ละรอบเหล่านี้อย่างละเอียดยิ่งขึ้น

สำหรับตัวดำเนินการวนซ้ำใน Visual Basic

โครงสร้างของตัวดำเนินการลูป พื้นที่ ใน Visual Basic สามารถจัดระเบียบได้หนึ่งในสองรูปแบบ: เป็นลูป สำหรับ… ต่อไป หรือเป็นวงวน แต่ละ.

วงจร “สำหรับ … ถัดไป”

วงจร สำหรับ… ต่อไป ใช้ตัวแปรที่รับค่าจากช่วงที่กำหนดตามลำดับ ด้วยการเปลี่ยนแปลงค่าของตัวแปรแต่ละครั้ง การดำเนินการที่อยู่ในเนื้อหาของวงจรจะถูกดำเนินการ นี่เป็นเรื่องง่ายที่จะเข้าใจจากตัวอย่างง่ายๆ:

สำหรับ i = 1 ถึง 10 Total = Total + iArray(i) ถัดไป i

ในวงง่ายๆนี้ สำหรับ… ต่อไป ใช้ตัวแปร iซึ่งรับค่า 1, 2, 3, … 10 ตามลำดับ และสำหรับแต่ละค่าเหล่านี้ โค้ด VBA ภายในลูปจะถูกดำเนินการ ดังนั้น ลูปนี้จะรวมองค์ประกอบของอาร์เรย์ ไออาร์เรย์ ในตัวแปร รวม.

ในตัวอย่างข้างต้น ไม่ได้ระบุการเพิ่มการวนซ้ำ ดังนั้นเพื่อเพิ่มค่าตัวแปร i จาก 1 ถึง 10 ค่าเริ่มต้นคือการเพิ่มขึ้น 1… อย่างไรก็ตาม ในบางกรณี จำเป็นต้องใช้ค่าการเพิ่มขึ้นที่แตกต่างกันสำหรับลูป สามารถทำได้โดยใช้คีย์เวิร์ด ขั้นตอนดังแสดงในตัวอย่างง่าย ๆ ต่อไปนี้

สำหรับ d = 0 ถึง 10 ขั้นตอน 0.1 dTotal = dTotal + d ถัดไป d

เนื่องจากในตัวอย่างข้างต้น ขั้นตอนการเพิ่มจะถูกตั้งค่าเท่ากับ 0.1จากนั้นตัวแปร ดีโททัล สำหรับการทำซ้ำแต่ละครั้งของวัฏจักรจะใช้ค่า 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0

ในการกำหนดขั้นตอนลูปใน VBA คุณสามารถใช้ค่าลบได้ เช่น

สำหรับ i = 10 ถึง 1 ขั้นตอน -1 iArray(i) = i ถัดไป i

นี่คือการเพิ่มขึ้นคือ -1ดังนั้นตัวแปร i ด้วยการทำซ้ำของวงจรแต่ละครั้งจะใช้ค่า 10, 9, 8, … 1

วนซ้ำ "สำหรับแต่ละคน"

วงจร แต่ละ คล้ายวัฏจักร สำหรับ… ต่อไปแต่แทนที่จะวนซ้ำลำดับของค่าสำหรับตัวแปรตัวนับ loop แต่ละ ดำเนินการชุดของการกระทำสำหรับแต่ละวัตถุในกลุ่มของวัตถุที่ระบุ ในตัวอย่างต่อไปนี้ ใช้ลูป แต่ละ ระบุแผ่นงานทั้งหมดในสมุดงาน Excel ปัจจุบัน:

Dim wSheet As Worksheet For Each wSheet in Worksheets MsgBox "Найден лист: " & wSheet.Name ถัดไป wSheet

คำสั่งขัดจังหวะแบบวนซ้ำ "Exit For"

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

แอปพลิเคชันตัวดำเนินการ ออกสำหรับ แสดงให้เห็นในตัวอย่างต่อไปนี้ ที่นี่ลูปวนซ้ำมากกว่า 100 รายการอาร์เรย์และเปรียบเทียบแต่ละรายการกับค่าของตัวแปร ดีวัล… หากพบการจับคู่ การวนซ้ำจะสิ้นสุดลง:

สำหรับ i = 1 ถึง 100 ถ้า dValues(i) = dVal แล้ว IndexVal = i ออกสำหรับ End If Next i

Do while Loop ใน Visual Basic

วงจร ทำในขณะที่ รันบล็อกของรหัสตราบเท่าที่ตรงตามเงื่อนไขที่ระบุ ต่อไปนี้เป็นตัวอย่างขั้นตอน ซึ่งใช้ลูป ทำในขณะที่ ตัวเลขฟีโบนักชีไม่เกิน 1000 จะแสดงตามลำดับ:

'ขั้นตอนย่อยส่งออกหมายเลข Fibonacci ไม่เกิน 1000 Sub Fibonacci() Dim i As Integer 'ตัวนับเพื่อระบุตำแหน่งขององค์ประกอบในลำดับ Dim iFib As Integer 'เก็บค่าปัจจุบันของลำดับ Dim iFib_Next As Integer 'เก็บค่าถัดไป ของลำดับ Dim iStep As Integer 'เก็บขนาดของส่วนเพิ่มถัดไป' เริ่มต้นตัวแปร i และ iFib_Next i = 1 iFib_Next = 0 'Do while ลูปจะดำเนินการจนกว่าค่าของ 'จำนวน Fibonacci ปัจจุบันมากกว่า 1000 Do while iFib_Next < 1000 ถ้า i = 1 จากนั้น 'กรณีพิเศษสำหรับองค์ประกอบแรก iStep = 1 iFib = 0 อื่น ๆ ' บันทึกขนาดของส่วนเพิ่มถัดไปก่อนที่จะเขียนทับ 'ค่าปัจจุบันของลำดับ iStep = iFib iFib = iFib_Next End ถ้า ' พิมพ์หมายเลข Fibonacci ปัจจุบันในคอลัมน์ A ของ แผ่นงานที่ใช้งาน 'ในแถวที่มีดัชนี i Cells(i , 1).Value = iFib 'คำนวณหมายเลข Fibonacci ถัดไปและเพิ่มดัชนีตำแหน่งองค์ประกอบ 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

ในตัวอย่างที่กำหนด เงื่อนไข iFib_Next < 1000 ตรวจสอบที่จุดเริ่มต้นของลูป ดังนั้นหากค่าแรก iFib_เน็กซ์ หากมีมากกว่า 1000 การวนซ้ำจะไม่ถูกดำเนินการ

อีกวิธีหนึ่งในการใช้ลูป ทำในขณะที่ - วางเงื่อนไขไม่อยู่ที่จุดเริ่มต้น แต่อยู่ที่จุดสิ้นสุดของลูป ในกรณีนี้ การวนซ้ำจะดำเนินการอย่างน้อยหนึ่งครั้ง โดยไม่คำนึงว่าตรงตามเงื่อนไขหรือไม่

วงจรดังกล่าว ทำในขณะที่ โดยเงื่อนไขที่จะตรวจสอบในตอนท้ายจะมีลักษณะดังนี้:

ทำ ... วนซ้ำในขณะที่ iFib_Next < 1000

Цикл «ทำจนถึง» в Visual Basic

วงจร ทำจน คล้ายกับวงจรมาก ทำในขณะที่: บล็อกของรหัสในเนื้อความของลูปถูกดำเนินการซ้ำแล้วซ้ำอีกจนกว่าจะตรงตามเงื่อนไขที่ระบุ (ผลลัพธ์ของนิพจน์เงื่อนไขคือ จริง). ในขั้นตอนต่อไป ใช้วงจร ทำจน ดึงค่าจากเซลล์ทั้งหมดในคอลัมน์ A แผ่นงานจนกว่าคอลัมน์จะพบเซลล์ว่าง:

iRow = 1 ทำจนกว่า IsEmpty(Cells(iRow, 1)) 'ค่าของเซลล์ปัจจุบันถูกเก็บไว้ในอาร์เรย์ dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

ในตัวอย่างข้างต้น เงื่อนไข IsEmpty(เซลล์(iRow, 1)) อยู่ที่จุดเริ่มต้นของโครงสร้าง ทำจนดังนั้นการวนซ้ำจะดำเนินการอย่างน้อยหนึ่งครั้งหากเซลล์แรกที่ถ่ายไม่ว่างเปล่า

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

ทำ ... วนซ้ำจนกว่าจะว่าง(Cells(iRow, 1))

เขียนความเห็น