حلقه در VBA | ایجاد حلقه برای تکرار دستورات در ویژوال بیسیک

حلقه یا تکرار مجموعه ای شامل یک یا چند دستور است که بیشتر از یک مرتبه اجرا می شوند. در این بخش از آموزش های رایگان وی بی ای با نحوه ایجاد حلقه و تکرار کد در VBA آشنا می شویم.

مدت زمان تخمینی مطالعه: 8 دقیقه

آیا می‌دانید:

آموزش VBA یکی از بهترین راه‌ها برای بهینه‌سازی کار با برنامه‌های مختلف آفیس است. با این زبان می‌توانید فرآیندهای مختلف را شخصی‌سازی کنید و داده‌های خود را به شکلی که می‌خواهید مدیریت نمایید. VBA یک ابزار قدرتمند برای هر کاربری است که به دنبال کنترل بیشتر و خودکارسازی وظایف است.

مقدمه

کارهای تکراری برای انسان علاوه بر سختی خسته کننده نیز می باشد؛ و در برخی موارد عملاً غیرممکن می گردد.

رایانه ها برخلاف انسان ها قادرند حجم بزرگی از عملیات تکراری را با سرعت و بدون افت عملکرد پردازش نمایند.

حلقه ها در 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
حلقه For یک به یک فرد بودن یا زوج بودن اعداد 1 تا 10 را در پنجره پیغام نمایش خواهد داد.

حلقه 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 توصیه می شود.

دیدگاهتان را بنویسید