در آموزش قبلی سایت با عبارت های شرطی و منطقی و کاربرد متغیر بولی آشنا شدیم. در این آموزش رایگان وی بی ای می خواهیم با دستورات شرطی و بصورت خاص مهمترین آن ها یعنی دستور If و کاربرد آن ها در VBA آشنا شویم.
دستورات شرطی
در برنامه نویسی موقعیت های زیادی وجود دارد که شما باید یک شرط را امتحان نمایید و یا ترتیب اجرای کدهای برنامه را تغییر دهید و یا حتی در صورت عدم وجود یک شرط برنامه یا کد را متوقف نمایید.
شرط را می توان با عبارت های شرطی محاسبه نمود و در صورت نیاز در یک متغیر بولی ذخیره کرد.
امتحان وجود یا عدم وجود یک شرط با استفاده از دستورات شرطی انجام پذیر است.
دستور If
یکی از متداول ترین دستورات VBA (شاید بتوان گفت همه زبان های برنامه نویسی) دستور If می باشد.
این دستور با امتحان وجود یا عدم وجود یک شرط، یک قطعه ( بلوک/ block ) از دستورات را اجرا می نماید.
اشکال دستور If
دستور If می تواند به یکی از دو صورت زیر استفاده گردد:
یک خطی
If condition Then statements [ Else elsestatements ]
چند خطی ( صورت بلوک )
If condition Then
[ statements ]
[ ElseIf condition-n Then
[ elseifstatements ]]
[ Else
[ elsestatements ]]
End If
قسمت های تشکیل دهنده دستور If
۱- If
کلمه کلیدی If نمایانگر شروع دستور If می باشد.
۲- شرط ( condition )
عبارت condition
شرط دستور If می باشد و عبارتی است که نتیجه آن True یا False می باشد.
از آنجایی که مقدار عبارت شرطی و همچنین متغیر بولی فقط می تواند True یا False باشد، بنابراین condition
می تواند یک متغیر بولی یا یک عبارت شرطی باشد.
بدیهی است که condition
باید تکمیل گردد، چرا که کارکرد If امتحان یک شرط است.
۳- دستورها ( statements )
دستورها ( statements
) دستور یا دستوراتی هستند که اگر شرط ( condition
) صحیح ( True ) باشد اجرا خواهند گردید.
توجه داشته باشید که استفاده از statements
در صورت یک خطی اجباری و در صورت چند خطی اختیاری می باشد.
۴- بند ElseIf
بند ElseIf می تواند برای امتحان شروط بعدی و به تعداد دلخواه درون بدنه دستور If استفاده گردد. بند ElseIf در صورتی اجرا خواهد گردید که condition
مقدار False داشته باشد.
بکارگیری بند ElseIf در بلوک If اختیاری می باشد و می تواند به تعداد دلخواه تکرار گردد.
بند ElseIf از دو قسمت زیر تشکیل شده است.
۱-۴- condition-n ( شرط بند ElseIf )
condition-n
مشابه condition
یک عبارت شرطی می باشد. اگر condition
مقدار False داشته باشد condition-n
امتحان خواهد گردید.
۲-۴- elseifstatements ( دستورهای بند ElseIf )
elseifstatements
دستور یا دستوراتی هستند که در صورتی که condition-n
مقدار True داشته باشد اجرا خواهند گردید.
۵- بند Else
بند Else در صورتیکه condition
و condition-n
( در صورتی که بند ElseIf استفاده شده باشد) مقدار False داشته باشند اجرا خواهد گردید.
elsestatements
دستور یا دستوراتی هستند که در صورت اجرای بند Else اجرا خواهند گردید.
نمودار دستور If
در شکل زیر نمودار نحوه اجرای مرحله به مرحله بلوک If را در مشاهده می نمایید.
مثال
Function calc_digit_num(Number) As String
If IsNumeric(Number) = False Then calc_digit_num = "لطفا یک عدد وارد نمایید": Exit Function
If Number < 10 Then
calc_digit_num = "عدد انتخابی شما یک رقمی است"
ElseIf Number < 100 Then
calc_digit_num = "عدد انتخابی شما دو رقمی می باشد"
Else
calc_digit_num = "عدد انتخابی شما سه رقمی یا بیشتر می باشد"
End If
End Function
تحلیل خط به خط
خط ۱ : شروع روال Function می باشد. عنوان روال calc_digit_num
، و یک آرگومان به نام Number
دارد. مقدار بازگشتی روال با توجه به اعلان As String
از نوع داده رشته ای خواهد بود.
خط ۳
در این خط یک دستور If یک خطی نوشته شده است. شرط If عبارت IsNumeric(Number) = False
است که در آن با استفاده از تابع داخلی IsNumeric
مقدار آرگومان تابع بررسی می شود.
اگر مقدار آرگومان تابع عددی نباشد، شرط True خواهد بود و در نتیجه مقدار بازگشتی تابع طبق کد زیر
calc_digit_num = "لطفا یک عدد وارد نمایید"
تعیین خواهد شد و طبق کد Exit Function
دستور خروج زودرس از تابع صادر خواهد گردید.
توجه داشته باشید که :
یا ( colons ) در VBA برای نوشتن دو یا چند دستور در یک خط کاربرد دارد و بنابراین
calc_digit_num = "لطفا یک عدد وارد نمایید": Exit Function
دو دستور مجزا هستند که با استفاده از :
در یک خط نوشته شده اند.
خطوط ۵ تا ۱۱
شروع دستور If جدیدی می باشد که بصورت بلوک (چند خطی) نوشته شده است. در این بلوک مقدار آرگومان تابع با استفاده از عبارت شرطی Number < 10
بررسی می شود.
اگر مقدار آرگومان تابع کمتر از 10 باشد یعنی شرط If مقدار True داشته باشد، خط ۶ اجرا خواهد گردید و مقدار بازگشتی تابع طبق کد
calc_digit_num = "عدد انتخابي شما يک رقمي است"
تعیین خواهد گردید.
اگر شرط If مقدار False داشته باشد ( یعنی مقدار آرگومان تابع بیشتر از 10 باشد) خط ۷ اجرا خواهد شد. در این خط بند ElseIf
با شرطی جدید مقدار آرگومان تابع را با عبارت Number < 100
بررسی می نماید.
اگر مقدار آرگومان تابع کمتر از 100 باشد خط ۸ اجرا خواهد گردید و مقدار بازگشتی تابع طبق کد
calc_digit_num = "عدد انتخابي شما دو رقمي مي باشد"
تعیین خواهد گردید.
اگر هیچکدام از شروط Number < 10
و Number < 100
مقدار True نداشته باشند در خط ۱۰ با توجه به استفاده از Else
در خط ۹ مقدار بازگشتی تابع طبق کد
calc_digit_num = "عدد انتخابي شما سه رقمي يا بيشتر مي باشد"
تعیین خواهد گردید.
خط ۱۳
پایان روال calc_digit_num
می باشد.
دستور If تو در تو ( nested If )
دستور If را می توانید بصورت تو در تو بکار ببرید. در این حالت وقتی condition
مقدار True داشته باشد If جدید ظاهر می شود و این می تواند به تعداد دلخواه داشته باشد.
نمودار If تو در تو به شکل زیر می باشد.
ملاحظات
اگر بیش از یک بند ElseIf استفاده شود، شرط بندی که زودتر در کد ظاهر شود ابتدا امتحان خواهد شد.
بند ElseIf اختیاری می باشد اما اگر استفاده شوند باید قبل از بند Else (در صورت وجود) ظاهر شود.
همیشه توجه داشته باشید دستور If وقتی که اجرای هر کدام از دستورات statements
یا elseifstatements
و یا elsestatements
(در صورت وجود) تمام شود، پایان می یابد.
صورت تک خطی برای استفاده آزمایشی و صرفه جویی در فضای کدنویسی می تواند مفید باشد با این وجود صورت بلوک (چندخطی) علاوه بر ساختار و انعطاف پذیری بیشتر، معمولاً خوانایی، عیب یابی و توسعه و نگهداری آسان تری دارد.
دستور If تو در تو به راحتی می تواند پیچیده و گمراه کننده شود. دستور Select Case می تواند در این موارد جایگزین If گردد.
در شکل چندخطی بدنه If را بصورت تورفته (مانند مثال) بنویسید تا بتوانید نقاط شروع و پایان را تشخیص دهید.
بیشتر بخوانید
توابع توکار VBA | لیست کامل توابع داخلی در ویژوال بیسیک
عملگرهای VBA | انجام عملیات روی داده ها و ایجاد عبارت ها
حلقه در VBA | ایجاد حلقه برای تکرار دستورات در ویژوال بیسیک
کدهای VBA | آشنایی با کدها و دستور زبان برنامه نویسی VBA
دستور IF | اجرای مشروط کد با استفاده از عبارت های شرطی و منطقی
آرایه در VBA | آرایه ها و کاربرد آن ها در برنامه نویسی
میدان دید متغیر در VBA | نحوه دسترسی به متغیرها در قسمت های مختلف پروژه