حلقه یا تکرار مجموعه ای شامل یک یا چند دستور است که بیشتر از یک مرتبه اجرا می شوند. در این بخش از آموزش های رایگان وی بی ای با نحوه ایجاد حلقه و تکرار کد در VBA آشنا می شویم.
مدت زمان تخمینی مطالعه: 8 دقیقه
مقدمه
کارهای تکراری برای انسان علاوه بر سختی خسته کننده نیز می باشد؛ و در برخی موارد عملاً غیرممکن می گردد.
رایانه ها برخلاف انسان ها قادرند حجم بزرگی از عملیات تکراری را با سرعت و بدون افت عملکرد پردازش نمایند.
حلقه ها در VBA با ایجاد تکرار روی یک کد وظیفه انجام عملیات تکراری را بر عهده دارند.
حلقه ها و عبارت های شرطی و منطقی
همانطور که گفتیم حلقه ها وظیفه تکرار دستورات را برعهده دارند. مسئله ای که به هنگام ایجاد یک حلقه باید در نظر بگیرید نحوه خاتمه آن می باشد.
بگذارید با یک مثال توضیح دهم. فرض کنید که می خواهید کد زیر را تکرار نمایید و در هر تکرار یک واحد به متغیر i
اضافه نمایید.
i = i + 1
در صورتی که نحوه خاتمه حلقه را تعیین نکرده باشید VBA عملیات تکرار روی کد را تا زمانی که برایش امکان پذیر باشد ادامه خواهد داد.
اگر متغیر i
از نوع داده Integer
باشد تکرار تا زمانی که مقدار متغیر i
برابر با 32,767 (حد مجاز داده Integer) باشد ادامه خواهد داشت.
در تکرار بعدی بدلیل اینکه مقدار متغیر بیشتر از حدمجاز نوع داده آن شده است، خطای شماره 6 (Overflow) رخ خواهد داد و برنامه شما متوقف خواهد گردید.
برای حل این مشکل باید پیش بینی یک شرط که تکرار کد در صورت وجود یا عدم وجود آن متوقف گردد را نمایید.
برای ایجاد شرط می توانید از جملات شرطی و منطقی استفاده نمایید.
دستورات ایجاد حلقه در VBA
VBA از چهار دستور برای ایجاد حلقه پشتیبانی می نماید که هر یک را به ترتیب بررسی می نماییم.
حلقه Do…Loop
حلقه Do یکی از پرکابردترین حلقه ها در VBA می باشد که یک بلوک از دستورات را مادامی که ( while ) یک شرط True
است یا تا زمانی که ( until ) یک شرط True
گردد تکرار می نماید.
دستور زبان
دستور زبان حلقه Do در VBA به یکی از دو صورت زیر می تواند باشد:
صورت اول
Do [{ While | Until } condition ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop
صورت دوم
Do
[ statements ]
[ Exit Do ]
[ statements ]
Loop [{ While | Until } condition ]
حلقه Do از قسمت های زیر تشکیل شده است:
قسمت | توضیحات |
---|---|
condition | اجباری. عبارت عددی یا عبارت رشته ای که مقدار آن True یا False باشد (عبارت های شرطی). اگر مقدار condition پوچ (Null) باشد، condition بعنوان False در نظر گرفته می شود. |
statements | اختیاری. یک یا چند دستور که تا زمانی/به محض این که condition برابر True باشد/گردد، تکرار می شوند. |
ملاحظات مهم حلقه Do
نحوه توقف تکرار
کلمات کلیدی While
و Until
نحوه ادامه/توقف تکرار حلقه را بر اساس مقدار شرط condition
تعیین می نمایند.
اگر از While
استفاده نمایید حلقه تا زمانی که شرط condition
مقدار True
داشته باشد ادامه و به محض اینکه مقدار آن False
شود متوقف خواهد گردید.
برعکس اگر از Until
استفاده نمایید حلقه تا وقتی که مقدار شرط False
باشد ادامه و به محض اینکه مقدار آن True
شود متوقف می گردد.
مثال
Do While MyBoolean = True
برای اینکه در حلقه بالا تکرار کد ادامه داشته باشد مقدار متغیر MyBoolean
باید True
باشد.
Do Until MyBoolean = True
در حلقه بالا برعکس مقدار متغیر MyBoolean
باید False
باشد تا تکرار کد ادامه یابد.
خروج زودرس از حلقه Do
مواردی وجود دارد که شرط condition
را در حلقه Do بکار نبرده اید و یا میخواهید بدون در نظر گرفتن شرط condition
تکرار را متوقف نمایید.
در VBA دستور Exit برای خروج زودرس از بعضی از بلوک ها استفاده می گردد. برای خروج از حلقه Do نیز می توان از این دستور به شکل Exit Do
استفاده نمود. Exit Do
باعث می شود که حلقه Do بلافاصله پایان یابد. به همین دلیل استفاده از آن بدون وجود یک شرط بی معنا می باشد و بطور معمول با استفاده از یک دستور If…Then بکار گرفته می شود.
مثال
i = 0
Do While i < 20
i = i + 1
If i Mod 5 = 0 Then
If Msgbox("شمارش ادامه يابد؟", vbYesNo) = vbNo Then Exit Do
End If
Loop
خط ۱ : مقدار اولیه متغیر i
معادل 0
تعیین شده است.
خط ۲ : شروع حلقه Do می باشد و با توجه به کلمه کلیدی While
حلقه تا زمانی که i < 20
باشد ادامه خواهد یافت.
خط ۳ : بعنوان بخشی از بدنه حلقه Do باعث می شود در هر تکرار کد i = i + 1
اجرا و یک واحد به متغیر i
اضافه شود.
خط ۴ : دستور If در این خط با استفاده از عملگر ریاضی Mod
در هر تکرار بررسی می شود که اگر مقدار متغیر i
مضربی از 5 باشد خط ۵ اجرا گردد.
خط ۵ : در این خط با استفاده از تابع داخلی Msgbox و دستور یک خطی If، اگر کاربر در پنجره پیغام روی کلید No کلیک نماید دستور خروج زودرس Exit Do
اجرا خواهد شد و حلقه پایان خواهد یافت.
خط ۶ : بخشی از بدنه دستور If خط ۴ می باشد.
خط ۷ : تعیین کننده محدوده حلقه Do و پایان آن می باشد.
حلقه For...Next
حلقه For یکی دیگر از حلقه های پرکاربرد در VBA می باشد.
این حلقه در واقع یک شمارشگر می باشد و یک بلوک کد را تا زمانی که شمارنده به پایان برسد تکرار می نماید.
دستور زبان
For counter = start To end [ Step step ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
حلقه For از قسمت های زیر تشکیل شده است:
قسمت | توضیحات |
---|---|
counter | اجباری. متغیر عددی که شمارشگر حلقه می باشد. این متغیر نمی تواند از نوع Boolean یا یک آرایه باشد. |
start | اجباری. مقدار اولیه counter می باشد. |
end | اجباری. مقدار پایان دهنده counter می باشد. |
step | اختیاری. مقداری است که counter در هر تکرار حلقه تغییر می یابد. اگر تعیین نشود بصورت پیش فرض یک می باشد. |
statements | اختیاری. یک یا چند دستور است که در هر تکرار حلقه اجرا می شوند. |
ملاحظات مهم حلقه For
مقدار step
آرگومان step می تواند مثبت یا منفی باشد. با توجه به مثبت یا منفی بودن step پردازش حلقه به شرح زیر تعیین می شود.
مقدار step | تکرار اجرا می شود اگر |
مثبت یا صفر باشد | counter < = end |
منفی باشد | counter > = end |
بعد از اینکه تمام دستورات داخل بدنه حلقه For اجرا شدند، مقدار step به counter اضافه می شود، اینجا اگر counter به نقطه end نرسیده باشد حلقه یکبار دیگر تکرار می شود و اگرنه حلقه پایان می یابد.
خروج زودرس از حلقه For
برای خروج از حلقه For همانند حلقه Do می توان از دستور Exit استفاده نمود. Exit For
باعث می شود حلقه بدون در نظر گرفته شدن مقدار counter پایان یابد.
Exit For
می تواند به هر تعداد و در هر جایی از بدنه حلقه بکار گرفته شود. Exit For
بطور معمول همراه با یک If...Then بکار گرفته می شود.
متغیر counter
همانطور که گفته شد counter متغیری عددی است که نقش شمارنده حلقه For را برعهده دارد.
بخاطر داشته باشید که از تغییر این متغیر بهنگام تکرار اجتناب نمایید، چرا که بر خوانایی کد تاثیر و عیب یابی را سخت می نماید.
مثال
در مثال زیر حلقه For در هر تکرار مقدار متغیر i را با استفاده از دستور If و عملگر Mod
بررسی می نماید و زوج یا فرد بودن آن را به کاربر اعلام می نماید.
اگر کد را اجرا نمایید خواهید دید که VBA پنجره پیغام را 10 مرتبه نمایش خواهد داد.
For i = 1 To 10
If i Mod 2 = 0 Then
MsgBox i & " زوج می باشد.", vbInformation + vbMsgBoxRtlReading
Else
MsgBox i & " فرد می باشد.", vbInformation + vbMsgBoxRtlReading
End If
Next
حلقه For Each...Next
حلقه For Each یکی دیگر از حلقه های پشتیبانی شده در VBA می باشد، که برای تکرار یک یا چند دستور بر روی اجزای یک array (آرایه) یا یک collection (مجموعه) کاربرد دارد.
دستور زبان
For Each element In group
[ statements ]
[ Exit For ]
[ statements ]
Next [ element ]
حلقه For Each از قسمت های زیر تشکیل شده است:
قسمت | توضیحات |
---|---|
element | اجباری. متغیر مورد استفاده برای تکرار روی عناصر یک مجموعه یا آرایه می باشد. برای مجموعه ها، عنصر می تواند فقط یک متغیر Variant، یک متغیر شیء عمومی، یا هر متغیر شیء خاص باشد. برای آرایه ها، عنصر فقط می تواند یک متغیر Variant باشد. |
group | اجباری. نام یک متغیر شیء یا آرایه می باشد. (به استثنای آرایه ای نوع داده کاربر) |
statements | اجباری. یک یا چند دستور که برای هر آیتم موجود در group اجرا می شوند. |
حلقه For Each را بصورت کاملتر در آموزش آرایه ها بررسی خواهیم کرد.
حلقه While...Wend
حلقه While...Wend یک یا چند دستور را تا زمانی که شرط آن True باشد، تکرار می نماید.
دستور زبان
While condition [ statements ] Wend
حلقه While…Wend از قسمت های زیر تشکیل شده است:
قسمت | توضیحات |
---|---|
condition | اجباری. عبارت عددی یا عبارت رشته ای که مقدار آن True یا False باشد (عبارت های شرطی). اگر مقدار condition پوچ (Null) باشد، condition بعنوان False در نظر گرفته می شود. |
statements | اختیاری. یک یا چند دستور است که تا زمانی که شرط True باشد اجرا می شوند. |
استفاده از حلقه Do...Loop بدلیل ساختار گسترده تر و انعطاف پذیری بیشتر بجای حلقه While…Wend توصیه می شود.
بیشتر بخوانید
توابع توکار VBA | لیست کامل توابع داخلی در ویژوال بیسیک
عملگرهای VBA | انجام عملیات روی داده ها و ایجاد عبارت ها
حلقه در VBA | ایجاد حلقه برای تکرار دستورات در ویژوال بیسیک
کدهای VBA | آشنایی با کدها و دستور زبان برنامه نویسی VBA
دستور IF | اجرای مشروط کد با استفاده از عبارت های شرطی و منطقی
آرایه در VBA | آرایه ها و کاربرد آن ها در برنامه نویسی
میدان دید متغیر در VBA | نحوه دسترسی به متغیرها در قسمت های مختلف پروژه