دستور Select Case: ساده‌سازی شروط در VBA

در برنامه‌نویسی با 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 اجرا می شود.
آیا می‌دانید:

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

نکات مهم در استفاده از 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

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