در برنامهنویسی با VBA (Visual Basic for Applications)، یکی از ابزارهای قدرتمند برای کنترل جریان برنامه دستور Select Case است. این دستور به شما کمک میکند تا بر اساس یک شرط خاص، چندین سناریوی مختلف را مدیریت کنید و کدنویسی خود را سادهتر و خواناتر کنید.
معرفی دستور Select Case
دستور Select Case مشابه ساختار شرطی If-Else است، اما زمانی که با چندین حالت مختلف سر و کار دارید، استفاده از Select Case موجب خوانایی بیشتر و کاهش پیچیدگی کدها میشود. با این دستور میتوانید یک مقدار را بررسی کرده و به ازای هر مقدار، یک سری کدهای خاص را اجرا کنید.
ساختار دستور Select Case
ساختار کلی Select Case به شکل زیر است:
Select Case testexpression
Case expressionlist_1
statement_1
Case expressionlist_2
statement_2
Case expressionlist_n
statement_n
Case Else
elsestatements
End Select
اجزای این ساختار به شرح زیر هستند:
قسمت | توضیحات |
---|---|
testexpression | اجباری؛ هر عبارت عددی یا عبارت رشته ای. |
expressionlist_n | در صورت ظاهر شدن Case الزامی است. لیستی از یک یا چند مقدار یا محدوده مقادیر که با testexpression مقایسه میشوند. expressionlist میتوانید یک یا چند فرم زیر را داشته باشد: عبارت، express To expression (کلمه کلیدی To محدوده ای از مقادیر را مشخص می کند. اگر از کلمه کلیدی To استفاده می کنید، مقدار کوچکتر باید قبل از To ظاهر شود.)، عبارت Is comparison operator (از کلمه کلیدی Is با عملگرهای مقایسه (به جز Is و Like) برای تعیین محدوده ای از مقادیر استفاده کنید. در صورت عدم ارائه، کلمه کلیدی Is به طور خودکار درج می شود.). Case Else: اگر هیچکدام از مقادیر قبلی برقرار نباشد، دستور else_statement اجرا میشود. |
statement_n | اختیاری. اگر testexpression با هر بخشی از expressionlist مطابقت داشته باشد، یک یا چند عبارت اجرا می شود. |
elsestatements | اختیاری. اگر testexpression با هیچکدام از بندهای Case مطابقت نداشته باشد، elsestatements اجرا می شود. |
نکات مهم در استفاده از Select Case:
اگر testexpression با هر کدام از مقادیر expressionlist_1 تا expressionlist_n مطابقت داشته باشد، دستورات مرتبط با آن Case اجرا میشوند. سپس اجرای برنامه به پایان دستور Select Case یعنی End Select منتقل میشود.
اگر هیچ تطابقی بین testexpression و یک expressionlist در هیچ یک از انتخابهای Case دیگر یافت نشد، از عبارت Case Else برای اجرای دستور elsestatements استفاده میشود. اگرچه این بخش از دستور Select Case اجباری نیست، اما ایده خوبی است که یک عبارت Case Else در بلوک Select Case خود داشته باشید تا مقادیر پیشبینی نشده testexpression را مدیریت کنید.
اگر هیچکدام از Case expressionlist با testexpression مطابقت نداشته باشد و هیچ عبارت Case Else وجود نداشته باشد، کد در عبارت زیر End Select ادامه مییابد.
میتوانید از چندین عبارت یا محدوده در هر Case استفاده کنید. بهعنوان مثال:
Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber
این خط بررسی میکند که آیا مقدار testexpression:
- بین 1 تا 4 باشد،
- یا بین 7 تا 9 باشد،
- یا برابر با مقادیر 11 یا 13 باشد،
- یا بزرگتر از مقدار متغیر MaxNumber باشد.
در دستور Select Case، میتوانید برای مقادیر رشتهای نیز از محدودهها و چندین عبارت استفاده کنید. برای مثال:
Case "everything", "nuts" To "soup", TestItem
این خط بررسی میکند که آیا مقدار testexpression:
- دقیقاً برابر با “everything” است،
- یا به ترتیب حروف الفبا بین “nuts” و “soup” قرار دارد،
- یا با مقدار متغیر TestItem برابر است.
مزایای استفاده از Select Case
- خوانایی بهتر: با استفاده از Select Case، میتوانید به راحتی چندین شرط را در یک ساختار ساده مدیریت کنید.
- کاهش پیچیدگی: به جای استفاده از چندین If-Else پشتسرهم، میتوانید با Select Case ساختارهای شرطی را بهتر سازماندهی کنید.
- اجرای سریعتر: در بسیاری از موارد، Select Case بهینهتر از If-Else عمل میکند و کد سریعتر اجرا میشود.
نتیجهگیری
دستور Select Case در VBA ابزاری قدرتمند برای سادهسازی و سازماندهی بهتر کدهای شرطی است. استفاده از این دستور به شما این امکان را میدهد که جریان کد خود را به شکلی مؤثرتر کنترل کنید و از ساختارهای پیچیده If-Else جلوگیری کنید. اگر با سناریوهایی مواجه هستید که چندین شرط ممکن است برقرار باشد، Select Case انتخاب مناسبی برای شما خواهد بود.
مثالهای کاربردی
مثال 1: انتخاب بر اساس عدد
این مثال ساده یک عدد را بررسی میکند و پیامی را بر اساس مقدار آن نمایش میدهد.
Function EvaluateScore(score As Integer) As String
Select Case score
Case Is >= 90
EvaluateScore = "شما نمره A کسب کردهاید."
Case Is >= 80
EvaluateScore = "شما نمره B کسب کردهاید."
Case Is >= 70
EvaluateScore = "شما نمره C کسب کردهاید."
Case Else
EvaluateScore = "شما نمره D کسب کردهاید."
End Select
End Function
مثال 2: انتخاب بر اساس روز هفته
این مثال یک روز از هفته را دریافت کرده و پیامی متناسب با آن نمایش میدهد.
Function GetDayMessage(day As String) As String
Select Case day
Case "شنبه"
GetDayMessage = "امروز شنبه است."
Case "یکشنبه"
GetDayMessage = "امروز یکشنبه است."
Case "دوشنبه"
GetDayMessage = "امروز دوشنبه است."
Case "سهشنبه"
GetDayMessage = "امروز سهشنبه است."
Case "چهارشنبه"
GetDayMessage = "امروز چهارشنبه است."
Case "پنجشنبه"
GetDayMessage = "امروز پنجشنبه است."
Case "جمعه"
GetDayMessage = "امروز جمعه است."
Case Else
GetDayMessage = "روز معتبری نیست."
End Select
End Function
مثال 3: انتخاب بر اساس نوع داده
این تابع نوع داده یک متغیر را به عنوان ورودی میگیرد و نتیجه مناسب را برمیگرداند.
Function CheckDataType(myVar As Variant) As String
Select Case VarType(myVar)
Case vbString
CheckDataType = "این یک رشته است."
Case vbInteger
CheckDataType = "این یک عدد صحیح است."
Case vbDouble
CheckDataType = "این یک عدد اعشاری است."
Case Else
CheckDataType = "نوع داده شناخته نشده است."
End Select
End Function
مثال 4: انتخاب تو در تو
این تابع از Select Case بهصورت تو در تو برای تصمیمگیریهای پیچیدهتر استفاده میکند.
Function GetCityMessage(region As String, city As String) As String
Select Case region
Case "شمال"
Select Case city
Case "رشت"
GetCityMessage = "شهر رشت در شمال است."
Case "مازندران"
GetCityMessage = "شهر مازندران در شمال است."
Case Else
GetCityMessage = "شهر شناختهشدهای در شمال نیست."
End Select
Case "جنوب"
GetCityMessage = "شما در حال بررسی مناطق جنوبی هستید."
Case Else
GetCityMessage = "منطقه شناختهشدهای نیست."
End Select
End Function
مثال 5: انتخاب بر اساس محدودههای چندگانه
این تابع سن را به عنوان ورودی میگیرد و پیامی متناسب با سن برمیگرداند.
Function GetAgeGroupMessage(age As Integer) As String
Select Case age
Case 0 To 12
GetAgeGroupMessage = "شما کودک هستید."
Case 13 To 19
GetAgeGroupMessage = "شما نوجوان هستید."
Case 20 To 64
GetAgeGroupMessage = "شما بزرگسال هستید."
Case Is >= 65
GetAgeGroupMessage = "شما سالخورده هستید."
Case Else
GetAgeGroupMessage = "سن نامعتبری وارد شده است."
End Select
End Function
بیشتر بخوانید
دستور Dim: اعلان متغیرها و اختصاص فضای حافظه
انواع داده VBA: راهنمای انواع داده و محدوده مقادیر آنها
دستور Option Explicit | نحوه اعلان متغیرها در ویژوال بیسیک
دستور ReDim | تغییر اندازه و ابعاد آرایه پویا در ویژوال بیسیک
عملگر Like: مقایسه و تطبیق رشته ها با یکدیگر در VBA
دستور Static | اعلان متغیر استاتیک درون روال در ویژوال بیسیک