VBA တွင် လှည့်ပတ်မှုများ

VBA ပရိုဂရမ်တစ်ခုသည် အတန်းတစ်ခုတွင် တူညီသောလုပ်ဆောင်ချက်များကို အကြိမ်များစွာလုပ်ဆောင်ရန် လိုအပ်သည့်အခြေအနေများ (ဆိုလိုသည်မှာ၊ တူညီသောကုဒ်ကို အကြိမ်ပေါင်းများစွာ ပြန်လုပ်ရန်) လိုအပ်သည့်အခြေအနေများရှိပါသည်။ ဒါကို VBA loops သုံးပြီး လုပ်ဆောင်နိုင်ပါတယ်။

VBA loop များ ပါဝင်သည်-

ထို့နောက်၊ ဤစက်ဝန်းတစ်ခုစီကို အနီးကပ်လေ့လာကြည့်ပါမည်။

Visual Basic ရှိ Loop Operator အတွက်

loop operator ၏ ဖွဲ့စည်းပုံ အဆိုပါ Visual Basic တွင် ကွင်းဆက်အဖြစ် ပုံစံနှစ်မျိုးဖြင့် စုစည်းနိုင်သည်။ အတွက်... နောက်တစ်ခု သို့မဟုတ် loop အဖြစ် တစ်ခုချင်းစီအတွက်.

“For … Next” စက်ဘီးစီးပါ

အစဉ်အဆက် အတွက်... နောက်တစ်ခု ပေးထားသောအကွာအဝေးမှတန်ဖိုးများကို ဆက်တိုက်ယူသော variable ကိုအသုံးပြုသည်။ variable ၏တန်ဖိုးပြောင်းလဲမှုတစ်ခုစီတိုင်းတွင်၊ cycle ၏ကိုယ်ထည်တွင်ထည့်သွင်းထားသောလုပ်ဆောင်ချက်များကိုလုပ်ဆောင်သည်။ ဒါက ရိုးရှင်းတဲ့ ဥပမာတစ်ခုကနေ နားလည်ရလွယ်ပါတယ်။

i အတွက် = 1 မှ 10 စုစုပေါင်း = Total + iArray(i) နောက် i

ဒီရိုးရှင်းတဲ့ loop မှာ အတွက်... နောက်တစ်ခု variable ကိုအသုံးပြုသည်။ iတန်ဖိုးများ 1, 2, 3, … 10 တို့ကို ဆက်တိုက်ယူကာ ဤတန်ဖိုးများတစ်ခုစီအတွက်၊ loop အတွင်းရှိ VBA ကုဒ်ကို လုပ်ဆောင်သည်။ ထို့ကြောင့် ဤ loop သည် array ၏ဒြပ်စင်များကို ပေါင်းစည်းသည်။ iArray variable တွင် စုစုပေါင်း.

အထက်ပါ ဥပမာတွင်၊ loop increment ကို သတ်မှတ်မထားပါ။ ထို့ကြောင့် variable ကို တိုးရန် i 1 မှ 10၊ ပုံသေသည် တိုးနှုန်းတစ်ခုဖြစ်သည်။ 1… သို့သော်၊ အချို့ကိစ္စများတွင် ကွင်းဆက်အတွက် မတူညီသော တိုးမြှင့်တန်ဖိုးများကို အသုံးပြုရန် လိုအပ်သည်။ ဒါကို keyword သုံးပြီး လုပ်ဆောင်နိုင်ပါတယ်။ လှမ်းအောက်ပါရိုးရှင်းသောဥပမာတွင်ပြထားသည့်အတိုင်း။

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 တွင် loop အဆင့်ကို ဆုံးဖြတ်ရန်၊ ဥပမာအားဖြင့်၊ ဤကဲ့သို့သော အနှုတ်တန်ဖိုးကို သင်အသုံးပြုနိုင်သည်-

i = 10 မှ 1 အဆင့် -1 iArray(i) = i နောက် i

ဤတွင် တိုးလာခြင်းဖြစ်သည်။ -1ဒါကြောင့် variable ပါ။ i သံသရာ၏ထပ်ခါတလဲလဲတစ်ခုစီနှင့်အတူတန်ဖိုးများ 10, 9, 8, … 1 ပေါ်တွင်ကြာပါသည်။

"တစ်ခုစီအတွက်" ကြိုးဝိုင်း

အစဉ်အဆက် တစ်ခုချင်းစီအတွက် သံသရာနှင့်တူသည်။ အတွက်... နောက်တစ်ခုတန်ပြန် variable အတွက် တန်ဖိုးများ၏ sequence ကို ထပ်ကာထပ်ကာ ပြုလုပ်မည့်အစား ကွင်းဆက်၊ တစ်ခုချင်းစီအတွက် သတ်မှတ်ထားသော အရာဝတ္ထုအုပ်စုရှိ အရာဝတ္ထုတစ်ခုစီအတွက် လုပ်ဆောင်ချက်အစုံကို လုပ်ဆောင်သည်။ အောက်ဖော်ပြပါ ဥပမာတွင် loop ကိုအသုံးပြုပါ။ တစ်ခုချင်းစီအတွက် လက်ရှိ Excel workbook တွင် စာရွက်များအားလုံးကို ရေတွက်သည်-

Worksheets ရှိ wSheet တစ်ခုစီအတွက် Worksheet အဖြစ်မှိန်မှိန်မှိန်မှိန် MsgBox "Найден лист:" & wSheet.Name Next wSheet

Loop interrupt statement "Exit For"

အော်ပရေတာ ထွက်ရန် သံသရာကိုနှောက်ယှက်ရန်အသုံးပြုသည်။ ဤထုတ်ပြန်ချက်သည် ကုဒ်တွင်တွေ့သည်နှင့်တပြိုင်နက်၊ ပရိုဂရမ်သည် loop ၏လုပ်ဆောင်မှုကို အဆုံးသတ်ပြီး ဤ loop ပြီးပြီးချင်းတွင် code အတွင်းရှိဖော်ပြချက်များကို လုပ်ဆောင်ခြင်းသို့ ဆက်လက်လုပ်ဆောင်သည်။ ဥပမာအားဖြင့် array တစ်ခုရှိ သီးခြားတန်ဖိုးတစ်ခုကို ရှာဖွေရန် ၎င်းကို အသုံးပြုနိုင်သည်။ ဒါကိုလုပ်ဖို့၊ loop တစ်ခုကိုသုံးပြီး၊ array ရဲ့ element တစ်ခုစီကို scan ဖတ်ပါတယ်။ လိုအပ်သောဒြပ်စင်ကိုတွေ့ရှိသည်နှင့်တပြိုင်နက်၊ ကျန်အရာများကိုကြည့်ရှုရန်မလိုအပ်ပါ - သံသရာသည်ပြတ်တောက်သွားသည်။

အော်ပရေတာလျှောက်လွှာ ထွက်ရန် အောက်ပါဥပမာတွင် သရုပ်ပြခဲ့သည်။ ဤနေရာတွင် loop သည် array entry 100 ကျော်ကို ထပ်တလဲလဲပြုလုပ်ပြီး တစ်ခုချင်းစီကို variable ၏တန်ဖိုးနှင့် နှိုင်းယှဉ်သည် dVal… ကိုက်ညီမှုတစ်ခုတွေ့ရှိပါက၊ ကွင်းပိတ်သွားသည်-

i အတွက် = 1 မှ 100 ဆိုလျှင် dValues(i) = dVal ထို့နောက် IndexVal = i Exit For End အကယ်၍ နောက်တစ်ခု i

Visual Basic တွင် Do while Loop

အစဉ်အဆက် ခဏလုပ်ပါ။ သတ်မှတ်ထားသော အခြေအနေနှင့် ပြည့်မီသရွေ့ ကုဒ်တုံးတစ်ခုကို လုပ်ဆောင်သည်။ အောက်ဖော်ပြပါသည် လုပ်ထုံးလုပ်နည်းတစ်ခု၏ ဥပမာတစ်ခုဖြစ်သည်။ subloop ကို အသုံးပြု၍ရသော၊ ခဏလုပ်ပါ။ 1000 ထက်မပိုသော Fibonacci နံပါတ်များကို ဆက်တိုက်ပြသသည်-

'လုပ်ငန်းစဉ်ခွဲများသည် 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 loop သည် 'လက်ရှိ Fibonacci နံပါတ် 1000 ထက် ကြီးသည်တိုင်အောင် Do while IFib_Next = လျှင် 1000 ထို့နောက် 'ပထမဒြပ်စင်အတွက် အထူးကိစ္စ iStep = 1 iFib = 1 Else' 'နောက်ထပ် ထပ်တိုး၏ အရွယ်အစားကို သိမ်းဆည်းပါ' 'အစီအစဥ်၏ လက်ရှိတန်ဖိုး iStep = iFib iFib = iFib_Next အဆုံးသတ်ပါက 'ကော်လံ A ၏ လက်ရှိ Fibonacci နံပါတ်ကို ပရင့်ထုတ်မည်ဆိုပါက၊ အညွှန်း i Cells(i , 0).Value = iFib နှင့် အတန်းရှိ 'အသက်ဝင်သော အလုပ်စာရွက်' ကို နောက် Fibonacci နံပါတ်ကို တွက်ချက်ပြီး iFib_Next = iFib + iStep i = i + 1 Loop End Sub

ပေးထားသော ဥပမာတွင် အခြေအနေ iFib_Next < 1000 loop ၏အစတွင်စစ်ဆေးခဲ့သည်။ ထို့ကြောင့် ပထမတန်းဖိုး iFib_Next 1000 ထက်ကျော်ပါက၊ loop ကို ဘယ်တော့မှ အကောင်အထည်ဖော်မှာ မဟုတ်ပါဘူး။

loop ကိုအကောင်အထည်ဖော်ရန်နောက်ထပ်နည်းလမ်း ခဏလုပ်ပါ။ - အခြေအနေကိုအစတွင်မဟုတ်ဘဲ loop ၏အဆုံးတွင်ထားပါ။ ဤကိစ္စတွင်၊ အခြေအနေနှင့်ကိုက်ညီသည်ဖြစ်စေ မသက်ဆိုင်ဘဲ အနည်းဆုံးတစ်ကြိမ် loop ကိုလုပ်ဆောင်ပါမည်။

စီမံချက်အရ အဲဒီလို သံသရာလည်နေတယ်။ ခဏလုပ်ပါ။ အဆုံးတွင် စစ်ဆေးရမည့် အခြေအနေသည် ဤကဲ့သို့ ဖြစ်လိမ့်မည်။

Do... Loop while iFib_Next < 1000

Visual Basic တွင် «Do Until» ကို နှိပ်ပါ။

အစဉ်အဆက် သည်အထိလုပ်ပါ။ cycle နှင့် အလွန်တူသည်။ ခဏလုပ်ပါ။: သတ်မှတ်ထားသောအခြေအနေနှင့်မကိုက်ညီမချင်း loop ၏ကိုယ်ထည်ရှိ ကုဒ်ပိတ်ဆို့ခြင်းကို ထပ်ခါထပ်ခါလုပ်ဆောင်သည် (အခြေအနေဆိုင်ရာဖော်ပြချက်၏ရလဒ်သည် စစ်မှန်သော) နောက်လုပ်ထုံးလုပ်နည်းမှာ sub သံသရာကို အသုံးပြု သည်အထိလုပ်ပါ။ ကော်လံတစ်ခုရှိ ဆဲလ်အားလုံးမှ တန်ဖိုးများကို ရယူပါ။ A ကော်လံသည် ဆဲလ်အလွတ်တစ်ခုနှင့် မတွေ့မချင်း အလုပ်စာရွက်-

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) 'လက်ရှိဆဲလ်တန်ဖိုးကို array တွင် သိမ်းထားပြီး dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

အထက်ဖော်ပြပါ ဥပမာတွင် အခြေအနေ IsEmpty(ဆဲလ်များ(iRow၊ 1)) ဖွဲ့စည်းပုံ၏အစတွင်တည်ရှိသည်။ သည်အထိလုပ်ပါ။ထို့ကြောင့် ပထမဆဲလ်သည် ဗလာမဟုတ်ပါက ကွင်းဆက်ကို အနည်းဆုံးတစ်ကြိမ် လုပ်ဆောင်ပါမည်။

သို့သော် loop example တွင်ပြထားသည့်အတိုင်း ခဏလုပ်ပါ။အချို့သောအခြေအနေများတွင် conditional expression ၏ကနဦးရလဒ်ကိုမခွဲခြားဘဲ loop ကိုအနည်းဆုံးတစ်ကြိမ်လုပ်ဆောင်ရန်လိုအပ်သည်။ ဤကိစ္စတွင်၊ အခြေအနေဆိုင်ရာအသုံးအနှုန်းကို ကွင်း၏အဆုံးတွင် ဤကဲ့သို့ထားရှိသင့်သည်-

မလွတ်မချင်း Loop လုပ်ပါ(ဆဲလ်များ(iRow၊ 1))

တစ်ဦးစာပြန်ရန် Leave