រង្វិលជុំនៅក្នុង VBA

មានស្ថានភាពនៅពេលដែលកម្មវិធី VBA តម្រូវឱ្យអនុវត្តសំណុំសកម្មភាពដូចគ្នាជាច្រើនដងក្នុងមួយជួរ (នោះគឺធ្វើម្តងទៀតនូវប្លុកកូដដូចគ្នាជាច្រើនដង)។ នេះអាចត្រូវបានធ្វើដោយប្រើរង្វិលជុំ VBA ។

រង្វិលជុំ VBA រួមមាន:

បន្ទាប់ យើងនឹងពិនិត្យមើលឱ្យកាន់តែដិតដល់នូវវដ្តនីមួយៗទាំងនេះ។

សម្រាប់ Loop Operator ក្នុង Visual Basic

រចនាសម្ព័ន្ធនៃប្រតិបត្តិកររង្វិលជុំ នេះ នៅក្នុង Visual Basic អាចត្រូវបានរៀបចំជាទម្រង់មួយក្នុងចំណោមទម្រង់ពីរ៖ ជារង្វិលជុំ សម្រាប់…បន្ទាប់ ឬជារង្វិលជុំ សម្រាប់គ្នា។.

វដ្ត "សម្រាប់ ... បន្ទាប់"

វដ្ត សម្រាប់…បន្ទាប់ ប្រើអថេរដែលយកតម្លៃជាបន្តបន្ទាប់ពីជួរដែលបានផ្តល់ឱ្យ។ ជាមួយនឹងការផ្លាស់ប្តូរនីមួយៗនៃតម្លៃនៃអថេរ សកម្មភាពដែលរុំព័ទ្ធនៅក្នុងតួនៃវដ្តត្រូវបានអនុវត្ត។ នេះ​គឺ​ជា​ការ​ងាយ​ស្រួល​ក្នុង​ការ​យល់​ពី​ឧទាហរណ៍​សាមញ្ញ​មួយ​:

សម្រាប់ i = 1 ដល់ 10 Total = Total + iArray(i) បន្ទាប់ i

នៅក្នុងរង្វង់សាមញ្ញនេះ។ សម្រាប់…បន្ទាប់ អថេរត្រូវបានប្រើ iដែលយកតម្លៃ 1, 2, 3, … 10 ជាបន្តបន្ទាប់ ហើយសម្រាប់តម្លៃនីមួយៗ កូដ VBA នៅខាងក្នុងរង្វិលជុំត្រូវបានប្រតិបត្តិ។ ដូច្នេះ រង្វិលជុំនេះបូកបញ្ចូលធាតុនៃអារេ។ iArray នៅក្នុងអថេរ សរុប.

ក្នុងឧទាហរណ៍ខាងលើ ការបង្កើនរង្វិលជុំមិនត្រូវបានបញ្ជាក់ទេ ដូច្នេះដើម្បីបង្កើនអថេរ i ពី 1 ទៅ 10 លំនាំដើមគឺជាការបង្កើន 1… ទោះយ៉ាងណាក៏ដោយ ក្នុងករណីខ្លះ ចាំបាច់ត្រូវប្រើតម្លៃបន្ថែមផ្សេងគ្នាសម្រាប់រង្វិលជុំ។ នេះអាចត្រូវបានធ្វើដោយប្រើពាក្យគន្លឹះ ជំហានដូចដែលបានបង្ហាញក្នុងឧទាហរណ៍សាមញ្ញខាងក្រោម។

សម្រាប់ d = 0 ទៅ 10 ជំហាន 0.1 dTotal = dTotal + d បន្ទាប់ d

ដោយសារក្នុងឧទាហរណ៍ខាងលើ ជំហានបង្កើនត្រូវបានកំណត់ស្មើនឹង 0.1បន្ទាប់មកអថេរ dTotal សម្រាប់ពាក្យដដែលៗនៃវដ្តនីមួយៗត្រូវចំណាយលើតម្លៃ 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 ។

រង្វិលជុំ "សម្រាប់គ្នា"

វដ្ត សម្រាប់គ្នា។ ស្រដៀងទៅនឹងវដ្តមួយ។ សម្រាប់…បន្ទាប់ប៉ុន្តែ​ជំនួស​ឱ្យ​ការ​ធ្វើ​ម្តងទៀត​លើ​លំដាប់​នៃ​តម្លៃ​សម្រាប់​អថេរ​រាប់ រង្វិលជុំ សម្រាប់គ្នា។ អនុវត្តសំណុំសកម្មភាពសម្រាប់វត្ថុនីមួយៗក្នុងក្រុមវត្ថុដែលបានបញ្ជាក់។ ក្នុងឧទាហរណ៍ខាងក្រោមដោយប្រើរង្វិលជុំ សម្រាប់គ្នា។ រាប់សន្លឹកទាំងអស់នៅក្នុងសៀវភៅការងារ Excel បច្ចុប្បន្ន៖

Dim wSheet ជាសន្លឹកកិច្ចការសម្រាប់ wSheet នីមួយៗក្នុង Worksheets MsgBox "Найден лист: " & wSheet.Name Next wSheet

Loop interrupt statement “Exit For”

ប្រតិបត្តិករ ចេញសម្រាប់ ប្រើដើម្បីរំខានវដ្ត។ ដរាបណាសេចក្តីថ្លែងការណ៍នេះត្រូវបានជួបប្រទះនៅក្នុងកូដ កម្មវិធីបញ្ចប់ការប្រតិបត្តិនៃរង្វិលជុំ ហើយបន្តទៅការប្រតិបត្តិនៃសេចក្តីថ្លែងការណ៍ដែលមាននៅក្នុងកូដភ្លាមៗបន្ទាប់ពីរង្វិលជុំនេះ។ នេះអាចត្រូវបានប្រើជាឧទាហរណ៍ ដើម្បីស្វែងរកតម្លៃជាក់លាក់នៅក្នុងអារេមួយ។ ដើម្បីធ្វើដូចនេះដោយប្រើរង្វិលជុំធាតុនីមួយៗនៃអារេត្រូវបានស្កេន។ ដរាបណារកឃើញធាតុដែលត្រូវការ មិនចាំបាច់រកមើលអ្វីដែលនៅសល់ទេ - វដ្តនេះត្រូវបានរំខាន។

កម្មវិធីប្រតិបត្តិករ ចេញសម្រាប់ បានបង្ហាញនៅក្នុងឧទាហរណ៍ខាងក្រោម។ នៅទីនេះរង្វិលជុំធ្វើឡើងវិញនូវធាតុអារេជាង 100 ហើយប្រៀបធៀបនីមួយៗជាមួយនឹងតម្លៃនៃអថេរ dVal… ប្រសិនបើ​ការ​ប្រកួត​ត្រូវ​បាន​រក​ឃើញ នោះ​រង្វិលជុំ​ត្រូវ​បាន​បញ្ចប់៖

សម្រាប់ i = 1 ដល់ 100 ប្រសិនបើ dValues(i) = dVal បន្ទាប់មក IndexVal = i Exit For End ប្រសិនបើ Next i

ធ្វើខណៈពេលដែលរង្វិលជុំនៅក្នុង Visual Basic

វដ្ត ធ្វើខណៈពេល ប្រតិបត្តិប្លុកនៃកូដដរាបណាលក្ខខណ្ឌដែលបានបញ្ជាក់ត្រូវបានបំពេញ។ ខាងក្រោមនេះគឺជាឧទាហរណ៍នៃនីតិវិធីមួយ។ អនុដែលក្នុងនោះដោយប្រើរង្វិលជុំ ធ្វើខណៈពេល លេខ Fibonacci មិនលើសពី 1000 ត្រូវបានបង្ហាញតាមលំដាប់លំដោយ៖

'នីតិវិធីរងបញ្ចេញលេខ Fibonacci មិនលើសពី 1000 Sub Fibonacci() Dim i As Integer' counter ដើម្បីបង្ហាញទីតាំងនៃធាតុនៅក្នុងលំដាប់ Dim iFib As Integer 'រក្សាទុកតម្លៃបច្ចុប្បន្ននៃលំដាប់ Dim iFib_Next As Integer' រក្សាទុកតម្លៃបន្ទាប់ នៃលំដាប់ Dim iStep As Integer 'រក្សាទុកទំហំនៃការបន្ថែមបន្ទាប់' ចាប់ផ្តើមអថេរ i និង iFib_Next i = 1 iFib_Next = 0 'Do while loop នឹងប្រតិបត្តិរហូតដល់តម្លៃនៃ 'ចំនួន Fibonacci បច្ចុប្បន្នគឺធំជាង 1000 Do while iFib_1000 < iFib_Next ប្រសិនបើ 1 បន្ទាប់មក 'ករណីពិសេសសម្រាប់ធាតុទីមួយ iStep = 1 iFib = 0 Else' រក្សាទុកទំហំនៃការបន្ថែមបន្ទាប់ មុនពេលសរសេរជាន់លើ 'តម្លៃបច្ចុប្បន្ននៃលំដាប់ iStep = iFib iFib = iFib_Next បញ្ចប់ ប្រសិនបើ 'បោះពុម្ពលេខ Fibonacci បច្ចុប្បន្ននៅក្នុងជួរ A នៃ សន្លឹកកិច្ចការសកម្ម 'នៅក្នុងជួរដេកដែលមានលិបិក្រម i Cells(i , 1)។តម្លៃ = iFib 'គណនាលេខ Fibonacci បន្ទាប់ ហើយបង្កើនសន្ទស្សន៍ទីតាំងធាតុដោយ 1 iFib_Next = iFib + iStep i = i + 1 រង្វិលជុំចុងរង

នៅក្នុងឧទាហរណ៍ដែលបានផ្តល់ឱ្យលក្ខខណ្ឌ iFib_Next < 1000 បានពិនិត្យនៅដើមរង្វិលជុំ។ ដូច្នេះប្រសិនបើតម្លៃដំបូង iFib_បន្ទាប់ ប្រសិនបើមានច្រើនជាង 1000 នោះរង្វិលជុំនឹងមិនត្រូវបានអនុវត្តទេ។

វិធីមួយទៀតដើម្បីអនុវត្តរង្វិលជុំ ធ្វើខណៈពេល - ដាក់លក្ខខណ្ឌមិនមែននៅដើមឡើយ ប៉ុន្តែនៅចុងបញ្ចប់នៃរង្វិលជុំ។ ក្នុងករណីនេះ រង្វិលជុំនឹងត្រូវបានប្រតិបត្តិយ៉ាងហោចណាស់ម្តង ដោយមិនគិតពីថាតើលក្ខខណ្ឌត្រូវបានបំពេញ។

តាមគ្រោងការណ៍ដូចជាវដ្តមួយ។ ធ្វើខណៈពេល ជាមួយនឹងលក្ខខណ្ឌដែលត្រូវពិនិត្យនៅចុងបញ្ចប់នឹងមើលទៅដូចនេះ៖

ធ្វើ ... រង្វិលជុំខណៈពេលដែល iFib_Next < 1000

Цикл «ធ្វើរហូតដល់» នៅក្នុង Visual Basic

វដ្ត ធ្វើរហូតដល់ ស្រដៀងទៅនឹងវដ្ត ធ្វើខណៈពេល៖ ប្លុកនៃកូដនៅក្នុងតួនៃរង្វិលជុំត្រូវបានប្រតិបត្តិម្តងហើយម្តងទៀតរហូតដល់លក្ខខណ្ឌដែលបានបញ្ជាក់ត្រូវបានបំពេញ (លទ្ធផលនៃកន្សោមតាមលក្ខខណ្ឌគឺ ជាការពិត) នៅក្នុងនីតិវិធីបន្ទាប់ អនុ ដោយប្រើវដ្តមួយ។ ធ្វើរហូតដល់ ទាញយកតម្លៃពីក្រឡាទាំងអស់ក្នុងជួរឈរមួយ។ A សន្លឹកកិច្ចការរហូតដល់ជួរឈរជួបក្រឡាទទេ៖

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'តម្លៃនៃក្រឡាបច្ចុប្បន្នត្រូវបានរក្សាទុកក្នុងអារេ dCellValues ​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

នៅក្នុងឧទាហរណ៍ខាងលើលក្ខខណ្ឌ IsEmpty(កោសិកា(iRow, 1)) ដែលមានទីតាំងនៅដើមដំបូងនៃរចនាសម្ព័ន្ធ ធ្វើរហូតដល់ដូច្នេះ រង្វិលជុំនឹងត្រូវបានប្រតិបត្តិយ៉ាងហោចណាស់ម្តង ប្រសិនបើក្រឡាដំបូងដែលបានយកមិនទទេ។

ទោះយ៉ាងណាក៏ដោយដូចបានបង្ហាញក្នុងឧទាហរណ៍រង្វិលជុំ ធ្វើខណៈពេលក្នុងស្ថានភាពខ្លះ វាចាំបាច់ដែលរង្វិលជុំត្រូវបានប្រតិបត្តិយ៉ាងហោចណាស់ម្តង ដោយមិនគិតពីលទ្ធផលដំបូងនៃកន្សោមតាមលក្ខខណ្ឌ។ ក្នុងករណីនេះកន្សោមតាមលក្ខខណ្ឌគួរតែត្រូវបានដាក់នៅចុងបញ្ចប់នៃរង្វិលជុំដូចនេះ៖

ធ្វើ ... រង្វិលជុំរហូតដល់ទទេ(កោសិកា(iRow, 1))

សូមផ្ដល់យោបល់