მარყუჟები VBA-ში

არის სიტუაციები, როდესაც VBA პროგრამას მოეთხოვება ზედიზედ რამდენჯერმე ერთი და იგივე მოქმედებების შესრულება (ანუ რამდენჯერმე გაიმეოროს კოდის ერთი და იგივე ბლოკი). ეს შეიძლება გაკეთდეს VBA მარყუჟების გამოყენებით.

VBA მარყუჟები მოიცავს:

შემდეგი, ჩვენ უფრო დეტალურად განვიხილავთ თითოეულ ამ ციკლს.

Loop ოპერატორისთვის Visual Basic-ში

მარყუჟის ოპერატორის სტრუქტურა ის Visual Basic-ში შეიძლება ორგანიზებული იყოს ორიდან ერთ-ერთ ფორმაში: მარყუჟის სახით იყიდება… შემდეგი ან მარყუჟის სახით თითოეული.

ციკლი "შემდეგისთვის"

ციკლის იყიდება… შემდეგი იყენებს ცვლადს, რომელიც თანმიმდევრულად იღებს მნიშვნელობებს მოცემული დიაპაზონიდან. ცვლადის მნიშვნელობის ყოველი ცვლილებით სრულდება ციკლის სხეულში ჩასმული მოქმედებები. ამის გაგება მარტივი მაგალითიდან მარტივია:

i = 1-დან 10-მდე სულ = სულ + 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, შემდეგ ცვლადი dსულ ციკლის ყოველი გამეორებისთვის იღებს მნიშვნელობებს 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 სამუშაო წიგნში:

ჩამქრალი wSheet როგორც სამუშაო ფურცელი თითოეული wSheet სამუშაო ფურცლებში MsgBox "Найден лист:" & wSheet.Name შემდეგი wSheet

ციკლის შეწყვეტის განცხადება „გასვლა ამისთვის“

ოპერატორი გასვლა For გამოიყენება ციკლის შესაწყვეტად. როგორც კი ეს განცხადება შეგხვდება კოდში, პროგრამა ამთავრებს მარყუჟის შესრულებას და გადადის იმ განცხადებების შესრულებაზე, რომლებიც კოდშია ამ ციკლის შემდეგ. ეს შეიძლება გამოყენებულ იქნას, მაგალითად, მასივში კონკრეტული მნიშვნელობის მოსაძებნად. ამისათვის, მარყუჟის გამოყენებით, მასივის თითოეული ელემენტის სკანირება ხდება. როგორც კი მოიძებნება საჭირო ელემენტი, არ არის საჭირო დანარჩენზე გადახედვა - ციკლი წყდება.

ოპერატორის აპლიკაცია გასვლა For ნაჩვენებია შემდეგ მაგალითში. აქ ციკლი იმეორებს მასივის 100-ზე მეტ ჩანაწერს და ადარებს თითოეულს ცვლადის მნიშვნელობასთან dVal… თუ დამთხვევა მოიძებნება, მაშინ ციკლი წყდება:

i = 1-დან 100-მდე თუ dValues(i) = dVal, მაშინ IndexVal = i გამოდით დასასრულისთვის, თუ შემდეგი i

Do while ციკლი Visual Basic-ში

ციკლის გააკეთე სანამ ახორციელებს კოდის ბლოკს მანამ, სანამ მითითებული პირობა დაკმაყოფილებულია. ქვემოთ მოცემულია პროცედურის მაგალითი Sub, რომელშიც მარყუჟის გამოყენებით გააკეთე სანამ ფიბონაჩის რიცხვები, რომლებიც არ აღემატება 1000-ს, ნაჩვენებია თანმიმდევრობით:

'ქვეპროცედურა გამოაქვს ფიბონაჩის რიცხვებს, რომლებიც არ აღემატება 1000-ს Sub Fibonacci() Dim i როგორც მთელი რიცხვი' მრიცხველი, რათა მიუთითოს ელემენტის პოზიცია მიმდევრობაში Dim iFib As Integer' ინახავს მიმდევრობის მიმდინარე მნიშვნელობას Dim iFib_Next როგორც მთელი, ინახავს შემდეგ მნიშვნელობას მიმდევრობის Dim iStep As Integer 'ინახავს შემდეგი ნამატის ზომას' ინიციალიზაცია ცვლადები i და iFib_Next i = 1 iFib_Next = 0 'Do while მარყუჟი შესრულდება მანამ, სანამ 'მიმდინარე ფიბონაჩის რიცხვი არ აღემატება 1000-ს Do ხოლო iFib_Next < 1000 თუ i = 1 შემდეგ 'სპეციალური შემთხვევა პირველი ელემენტისთვის iStep = 1 iFib = 0 სხვა შემთხვევაში' შეინახეთ შემდეგი ნამატის ზომა, სანამ გადაწერთ 'მიმდევრობის მიმდინარე მნიშვნელობას iStep = iFib iFib = iFib_Next End If' ამობეჭდეთ ფიბონაჩის მიმდინარე რიცხვი A სვეტში აქტიური სამუშაო ფურცელი 'მწკრივში, ინდექსით i Cells(i , 1). Value = iFib 'გამოთვალეთ შემდეგი ფიბონაჩის რიცხვი და გაზარდეთ ელემენტის პოზიციის ინდექსი 1-ით iFib_Next = iFib + iStep i = i + 1 Loop End Sub

მოცემულ მაგალითში მდგომარეობა iFib_Next < 1000 შემოწმდა მარყუჟის დასაწყისში. ამიტომ, თუ პირველი მნიშვნელობა iFib_Next 1000-ზე მეტი რომ იყოს, მაშინ მარყუჟი არასოდეს შესრულდება.

მარყუჟის განხორციელების კიდევ ერთი გზა გააკეთე სანამ - განათავსეთ მდგომარეობა არა დასაწყისში, არამედ მარყუჟის ბოლოს. ამ შემთხვევაში, ციკლი შესრულდება ერთხელ მაინც, მიუხედავად იმისა, დაკმაყოფილებულია თუ არა პირობა.

სქემატურად, ასეთი ციკლი გააკეთე სანამ ბოლოს შესამოწმებელი პირობით ასე გამოიყურება:

გააკეთეთ ... Loop while iFib_Next < 1000

ციკლი "Do სანამ" Visual Basic-ში

ციკლის გააკეთე სანამ ძალიან ჰგავს ციკლს გააკეთე სანამ: კოდის ბლოკი მარყუჟის სხეულში სრულდება არაერთხელ, სანამ მითითებული პირობა არ დაკმაყოფილდება (პირობითი გამოხატვის შედეგია True). შემდეგ პროცედურაში Sub ციკლის გამოყენებით გააკეთე სანამ ამოიღეთ მნიშვნელობები სვეტის ყველა უჯრედიდან A სამუშაო ფურცელი, სანამ სვეტი არ შეხვდება ცარიელ უჯრედს:

iRow = 1 გააკეთე სანამ IsEmpty(Cells(iRow, 1)) 'მიმდინარე უჯრედის მნიშვნელობა ინახება მასივში dCellValues ​​dCellValues(iRow) = Cells(iRow, 1). Value iRow = iRow + 1 Loop

ზემოთ მოცემულ მაგალითში, მდგომარეობა არის ცარიელი (უჯრედები (iRow, 1)) მდებარეობს სტრუქტურის დასაწყისში გააკეთე სანამ, ასე რომ, ციკლი შესრულდება ერთხელ მაინც, თუ პირველი გადაღებული უჯრედი ცარიელი არ არის.

თუმცა, როგორც ნაჩვენებია მარყუჟის მაგალითებში გააკეთე სანამ, ზოგიერთ სიტუაციაში აუცილებელია, რომ ციკლი შესრულდეს ერთხელ მაინც, პირობითი გამოხატვის საწყისი შედეგის მიუხედავად. ამ შემთხვევაში, პირობითი გამოხატულება უნდა განთავსდეს მარყუჟის ბოლოს, ასე:

გააკეთეთ ... ციკლი სანამ ის ცარიელია (უჯრედები (iRow, 1))

დატოვე პასუხი