Loops ໃນ VBA

ມີສະຖານະການໃນເວລາທີ່ໂຄງການ VBA ຈໍາເປັນຕ້ອງປະຕິບັດຊຸດດຽວກັນຫຼາຍຄັ້ງຕິດຕໍ່ກັນ (ນັ້ນແມ່ນ, ເຮັດຊ້ໍາລະຫັດດຽວກັນຫຼາຍຄັ້ງ). ນີ້ສາມາດເຮັດໄດ້ໂດຍໃຊ້ VBA loops.

VBA loops ປະກອບມີ:

ຕໍ່ໄປ, ພວກເຮົາຈະພິຈາລະນາຢ່າງລະອຽດໃນແຕ່ລະຮອບວຽນເຫຼົ່ານີ້.

ສໍາລັບ Loop Operator ໃນ Visual Basic

ໂຄງສ້າງຂອງຕົວປະຕິບັດການ loop ໄດ້ ໃນ Visual Basic ສາມາດຖືກຈັດຢູ່ໃນຫນຶ່ງໃນສອງຮູບແບບ: ເປັນ loop ສໍາລັບ… ຕໍ່ໄປ ຫຼືເປັນ loop ສໍາລັບແຕ່ລະຄົນ.

ວົງຈອນ "ສໍາລັບ ... ຕໍ່ໄປ"

Cycle ສໍາລັບ… ຕໍ່ໄປ ໃຊ້ຕົວແປທີ່ເອົາຄ່າຕາມລໍາດັບຈາກຂອບເຂດທີ່ໃຫ້. ດ້ວຍການປ່ຽນແປງແຕ່ລະມູນຄ່າຂອງຕົວແປ, ການກະທໍາທີ່ປິດລ້ອມຢູ່ໃນຮ່າງກາຍຂອງວົງຈອນແມ່ນປະຕິບັດ. ນີ້ແມ່ນງ່າຍທີ່ຈະເຂົ້າໃຈຈາກຕົວຢ່າງທີ່ງ່າຍດາຍ:

ສໍາລັບ i = 1 ເຖິງ 10 Total = Total + iArray(i) ຕໍ່ໄປ i

ໃນ loop ງ່າຍດາຍນີ້ ສໍາລັບ… ຕໍ່ໄປ ຕົວແປແມ່ນໃຊ້ i, ເຊິ່ງຕາມລໍາດັບເອົາຄ່າ 1, 2, 3, … 10, ແລະສໍາລັບແຕ່ລະຄ່າເຫຼົ່ານີ້, ລະຫັດ VBA ພາຍໃນ loop ຖືກປະຕິບັດ. ດັ່ງນັ້ນ, loop ນີ້ສະຫຼຸບອົງປະກອບຂອງ array. iArray ໃນຕົວແປ ທັງຫມົດ.

ໃນຕົວຢ່າງຂ້າງເທິງ, ການເພີ່ມ loop ບໍ່ໄດ້ຖືກລະບຸ, ດັ່ງນັ້ນການເພີ່ມຕົວແປ i ຈາກ 1 ຫາ 10, ຄ່າເລີ່ມຕົ້ນແມ່ນເພີ່ມຂຶ້ນ 1… ແນວໃດກໍ່ຕາມ, ໃນບາງກໍລະນີມັນຈໍາເປັນຕ້ອງໃຊ້ຄ່າເພີ່ມຂຶ້ນທີ່ແຕກຕ່າງກັນສໍາລັບ loop. ນີ້ສາມາດເຮັດໄດ້ໂດຍໃຊ້ຄໍາສໍາຄັນ ຂັ້ນ​ຕອນດັ່ງທີ່ສະແດງຢູ່ໃນຕົວຢ່າງງ່າຍໆຕໍ່ໄປນີ້.

ສໍາລັບ d = 0 ເຖິງ 10 ຂັ້ນຕອນທີ 0.1 dTotal = dTotal + d ຕໍ່ໄປ d

ນັບຕັ້ງແຕ່ໃນຕົວຢ່າງຂ້າງເທິງ, ຂັ້ນຕອນເພີ່ມຂຶ້ນແມ່ນຖືກກໍານົດເທົ່າກັບ 0.1, ຫຼັງຈາກນັ້ນຕົວແປ dTotal ສໍາ​ລັບ​ການ​ຄ້າງ​ຫ້ອງ​ຂອງ​ແຕ່​ລະ​ຄົນ​ໃຊ້​ເວ​ລາ​ໃນ​ຄ່າ 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

ເພື່ອກໍານົດຂັ້ນຕອນ loop ໃນ VBA, ທ່ານສາມາດນໍາໃຊ້ຄ່າລົບ, ຕົວຢ່າງເຊັ່ນນີ້:

ສໍາລັບ i = 10 ເຖິງ 1 ຂັ້ນຕອນ -1 iArray(i) = i ຕໍ່ໄປ i

ນີ້ແມ່ນການເພີ່ມຂຶ້ນ -1, ດັ່ງນັ້ນຕົວແປ i ດ້ວຍການຊໍ້າຄືນຂອງແຕ່ລະຮອບວຽນໃຊ້ເວລາໃນຄ່າ 10, 9, 8, … 1.

Loop "ສໍາລັບແຕ່ລະຄົນ"

Cycle ສໍາລັບແຕ່ລະຄົນ ຄ້າຍຄືກັນກັບວົງຈອນ ສໍາລັບ… ຕໍ່ໄປ, ແຕ່ແທນທີ່ຈະ iterating ໃນໄລຍະລໍາດັບຂອງຄ່າສໍາລັບຕົວແປຕົວແປ, loop ສໍາລັບແຕ່ລະຄົນ ປະຕິບັດຊຸດຂອງການປະຕິບັດສໍາລັບແຕ່ລະວັດຖຸໃນກຸ່ມຂອງວັດຖຸທີ່ກໍານົດໄວ້. ໃນຕົວຢ່າງຕໍ່ໄປນີ້, ການນໍາໃຊ້ loop ສໍາລັບແຕ່ລະຄົນ enumerates ແຜ່ນທັງຫມົດໃນ Excel workbook ໃນປັດຈຸບັນ:

Dim wSheet ເປັນ Worksheet ສໍາລັບແຕ່ລະ wSheet ໃນ Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

Loop interrupt ຖະແຫຼງການ "ອອກສໍາລັບ"

Operator ອອກຈາກສໍາລັບ ໃຊ້ເພື່ອຂັດຂວາງວົງຈອນ. ທັນທີທີ່ຄໍາຖະແຫຼງທີ່ພົບໃນລະຫັດ, ໂປລແກລມຈະສິ້ນສຸດການປະຕິບັດຂອງ loop ແລະດໍາເນີນການຕໍ່ການປະຕິບັດຄໍາຖະແຫຼງທີ່ຢູ່ໃນລະຫັດທັນທີຫຼັງຈາກ loop ນີ້. ນີ້ສາມາດຖືກນໍາໃຊ້, ສໍາລັບການຍົກຕົວຢ່າງ, ເພື່ອຊອກຫາຄ່າສະເພາະໃນ array. ເພື່ອເຮັດສິ່ງນີ້, ການນໍາໃຊ້ loop, ແຕ່ລະອົງປະກອບຂອງ array ໄດ້ຖືກສະແກນ. ທັນທີທີ່ອົງປະກອບທີ່ຕ້ອງການໄດ້ຖືກພົບເຫັນ, ບໍ່ຈໍາເປັນຕ້ອງເບິ່ງສ່ວນທີ່ເຫຼືອ - ວົງຈອນຖືກລົບກວນ.

ຄໍາຮ້ອງສະຫມັກປະຕິບັດການ ອອກຈາກສໍາລັບ ສະແດງໃຫ້ເຫັນໃນຕົວຢ່າງຕໍ່ໄປນີ້. ທີ່ນີ້ loop iterates ຫຼາຍກວ່າ 100 array entries ແລະປຽບທຽບແຕ່ລະຄ່າຂອງຕົວແປ. dVal… ຖ້າ​ພົບ​ການ​ແຂ່ງ​ຂັນ​ແລ້ວ, ວົງ​ການ​ຈະ​ຖືກ​ລະ​ງັບ:

ສໍາລັບ i = 1 ເຖິງ 100 ຖ້າ dValues(i) = dVal ຫຼັງຈາກນັ້ນ IndexVal = i ອອກຈາກທ້າຍຖ້າຕໍ່ໄປ i

Do while Loop ໃນ Visual Basic

Cycle ເຮັດໃນຂະນະທີ່ ດໍາເນີນການບລັອກຂອງລະຫັດຕາບໃດທີ່ເງື່ອນໄຂທີ່ລະບຸໄວ້ແມ່ນບັນລຸໄດ້. ຕໍ່ໄປນີ້ແມ່ນຕົວຢ່າງຂອງຂັ້ນຕອນການ Sub, ໃນການນໍາໃຊ້ loop ໄດ້ ເຮັດໃນຂະນະທີ່ ຕົວເລກ Fibonacci ບໍ່ເກີນ 1000 ແມ່ນສະແດງຕາມລໍາດັບ:

'ຂັ້ນຕອນຍ່ອຍໃຫ້ຕົວເລກ Fibonacci ບໍ່ເກີນ 1000 Sub Fibonacci() Dim i As Integer 'ຕົວນັບເພື່ອຊີ້ບອກຕຳແໜ່ງຂອງອົງປະກອບໃນລຳດັບ Dim iFib As Integer 'ເກັບຄ່າປັດຈຸບັນຂອງລຳດັບ Dim iFib_Next As Integer 'ເກັບຄ່າຕໍ່ໄປ. of the sequence Dim iStep As Integer 'stores size of next increment 'initialize variables i and iFib_Next i = 1 iFib_Next = 0 'Do while loop will execute until value of 'current Fibonacci number is greater than 1000 Do while iFib_1000 i if. 1 ຫຼັງຈາກນັ້ນ 'ກໍລະນີພິເສດສໍາລັບອົງປະກອບທໍາອິດ iStep = 1 iFib = 0 Else 'ບັນທຶກຂະຫນາດຂອງ increment ຕໍ່ໄປກ່ອນທີ່ຈະຂຽນທັບ 'ມູນຄ່າປັດຈຸບັນຂອງລໍາດັບ 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 ກວດສອບໃນຕອນຕົ້ນຂອງ loop ໄດ້. ເພາະສະນັ້ນ, ຖ້າຫາກວ່າມູນຄ່າທໍາອິດ iFib_Next ຖ້າ​ຫາກ​ວ່າ​ມີ​ຫຼາຍ​ກ​່​ວາ 1000​, ຫຼັງ​ຈາກ​ນັ້ນ loop ຈະ​ບໍ່​ໄດ້​ຮັບ​ການ​ປະ​ຕິ​ບັດ​.

ອີກວິທີຫນຶ່ງເພື່ອປະຕິບັດ loop ເຮັດໃນຂະນະທີ່ - ວາງເງື່ອນໄຂບໍ່ແມ່ນໃນຕອນເລີ່ມຕົ້ນ, ແຕ່ໃນຕອນທ້າຍຂອງ loop. ໃນກໍລະນີນີ້, loop ຈະຖືກປະຕິບັດຢ່າງຫນ້ອຍຫນຶ່ງຄັ້ງ, ບໍ່ວ່າຈະເປັນເງື່ອນໄຂ.

schematically, ວົງຈອນດັ່ງກ່າວ ເຮັດໃນຂະນະທີ່ ກັບເງື່ອນໄຂທີ່ຈະກວດສອບໃນຕອນທ້າຍຈະມີລັກສະນະນີ້:

ເຮັດ ... Loop ໃນຂະນະທີ່ iFib_Next < 1000

Цикл «ເຮັດຈົນກ່ວາ» ໃນ Visual Basic

Cycle ເຮັດຈົນກ່ວາ ຄ້າຍຄືກັນກັບວົງຈອນ ເຮັດໃນຂະນະທີ່: ຕັນຂອງລະຫັດຢູ່ໃນຮ່າງກາຍຂອງ loop ແມ່ນຖືກປະຕິບັດເລື້ອຍໆເລື້ອຍໆຈົນກ່ວາເງື່ອນໄຂທີ່ກໍານົດຈະບັນລຸໄດ້ (ຜົນຂອງການສະແດງອອກຕາມເງື່ອນໄຂແມ່ນ ທີ່ແທ້ຈິງ). ໃນຂັ້ນຕອນຕໍ່ໄປ Sub ການນໍາໃຊ້ວົງຈອນ ເຮັດຈົນກ່ວາ ດຶງເອົາຄ່າຈາກຈຸລັງທັງຫມົດໃນຖັນ A ແຜ່ນວຽກຈົນກ່ວາຖັນພົບກັບຕາລາງຫວ່າງເປົ່າ:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'ຄ່າຂອງເຊລປັດຈຸບັນຖືກເກັບໄວ້ໃນອາເຣ dCellValues ​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

ໃນຕົວຢ່າງຂ້າງເທິງ, ເງື່ອນໄຂ IsEmpty(Cells(iRow, 1)) ຕັ້ງຢູ່ໃນຕອນຕົ້ນຂອງໂຄງສ້າງ ເຮັດຈົນກ່ວາ, ດັ່ງນັ້ນ loop ຈະຖືກປະຕິບັດຢ່າງຫນ້ອຍຫນຶ່ງຄັ້ງຖ້າຕາລາງທໍາອິດທີ່ເອົາມາບໍ່ຫວ່າງເປົ່າ.

ຢ່າງໃດກໍຕາມ, ດັ່ງທີ່ສະແດງຢູ່ໃນຕົວຢ່າງ loop ເຮັດໃນຂະນະທີ່, ໃນບາງສະຖານະການມັນເປັນສິ່ງຈໍາເປັນທີ່ loop ຈະຖືກປະຕິບັດຢ່າງຫນ້ອຍຫນຶ່ງຄັ້ງ, ໂດຍບໍ່ຄໍານຶງເຖິງຜົນໄດ້ຮັບເບື້ອງຕົ້ນຂອງການສະແດງອອກຕາມເງື່ອນໄຂ. ໃນ​ກໍ​ລະ​ນີ​ນີ້​, ການ​ສະ​ແດງ​ອອກ​ເງື່ອນ​ໄຂ​ຄວນ​ຈະ​ໄດ້​ຮັບ​ການ​ວາງ​ໄວ້​ໃນ​ຕອນ​ທ້າຍ​ຂອງ loop​, ເຊັ່ນ​ນີ້​:

ເຮັດ ... Loop ຈົນກ່ວາ IsEmpty(Cells(iRow, 1))

ອອກຈາກ Reply ເປັນ