دستور IF | اجرای مشروط کد با استفاده از عبارت های شرطی و منطقی

در آموزش قبلی سایت با عبارت های شرطی و منطقی و کاربرد متغیر بولی آشنا شدیم. در این آموزش رایگان وی بی ای می خواهیم با دستورات شرطی و بصورت خاص مهمترین آن ها یعنی دستور If و کاربرد آن ها در VBA آشنا شویم.

دستورات شرطی

در برنامه نویسی موقعیت های زیادی وجود دارد که شما باید یک شرط را امتحان نمایید و یا ترتیب اجرای کدهای برنامه را تغییر دهید و یا حتی در صورت عدم وجود یک شرط برنامه یا کد را متوقف نمایید.

شرط را می توان با عبارت های شرطی محاسبه نمود و در صورت نیاز در یک متغیر بولی ذخیره کرد.

امتحان وجود یا عدم وجود یک شرط با استفاده از دستورات شرطی انجام پذیر است.

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

آموزش 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 را در مشاهده می نمایید.

نمودار دستور If ( If...Then...Else statement diagram )
در نمودار بالا می توانید ترتیب اجرای هر قسمت از بلوک 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 تو در تو به شکل زیر می باشد.

نمودار دستور If تو در تو ( nested if )
نمودار دستور If تو در تو

ملاحظات

اگر بیش از یک بند ElseIf استفاده شود، شرط بندی که زودتر در کد ظاهر شود ابتدا امتحان خواهد شد.

بند ElseIf اختیاری می باشد اما اگر استفاده شوند باید قبل از بند Else (در صورت وجود) ظاهر شود.

همیشه توجه داشته باشید دستور If وقتی که اجرای هر کدام از دستورات statements یا elseifstatements و یا elsestatements (در صورت وجود) تمام شود، پایان می یابد.

صورت تک خطی برای استفاده آزمایشی و صرفه جویی در فضای کدنویسی می تواند مفید باشد با این وجود صورت بلوک (چندخطی) علاوه بر ساختار و انعطاف پذیری بیشتر، معمولاً خوانایی، عیب یابی و توسعه و نگهداری آسان تری دارد.

دستور If تو در تو به راحتی می تواند پیچیده و گمراه کننده شود. دستور Select Case می تواند در این موارد جایگزین If گردد.

در شکل چندخطی بدنه If را بصورت تورفته (مانند مثال) بنویسید تا بتوانید نقاط شروع و پایان را تشخیص دهید.

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