4.4/5 - (7 امتیاز)
تابع if در اکسل یکی از توابعی است که همه ما یادگیری اکسل خود از اکسل را با این تابع شروع کردیم. این تابع با ترکیبی ساده به ما کمک میکند که منطق را به محاسبات خود در اکسل اضافه کنیم. زبان برنامه نویسی vba نیز توابعی شبیه به تابع if در اکسل دارد که با استفاده از آن میتوانیم محاسبات منطقی انجام دهیم و به عبارت دیگر محاسبات خود را هوشمندتر کنیم.

ترکیب ابتدایی IF STATEMENT در ماکرونویسی

فهم IF STATEMENT در ماکرونویسی بسیار ساده است. برای یادگیری این موضوع از مثال های ساده استفاده میکنیم و به تدریج نمونه های پیچیده تر را بررسی خواهیم کرد.

همه مثال هایی که در این مورد بررسی خواهیم کرد از یک INPUTBOX (باکس ورود اطلاعات) برای دریافت و ذخیره سازی اطلاعات استفاده خواهند کرد. تاکنون در مورد INPUT BOX ها صحبت نکرده ایم ولی نگرانی در این خصوص وجود ندارد. از این ابزارها برای دریافت اطلاعات از کاربر استفاده میشود. به عبارت دیگر کاربر اطلاعات مربوط به خود را در این باکس ها وارد میکند و ما میتوانیم محاسبات و پردازش های خود را بر روی آن اعمال کنیم( به کدهای زیر توجه کنید)

 

Dim userName As String
userName = InputBox("What is your name?")


مثال 1

در این مثال با استفاده از یک INPUTBOX نام کاربر را اخذ میکنیم. اگر نام وارد شده Mark”باشد، یک پیغام به صورت  “Hi Mark, Welcome back“نمایش داده میشود. 

Dim userName As String
userName = InputBox("What is your name?")

If userName = "Mark" Then
    MsgBox "Hi " & userName & ", Welcome back"
End If

زمانی که IF SATETMENT کوتاه باشد میتوان تمام آن را در یک سطر کد قرار داد. به کد زیر دقت کنید.

If userName = "Mark" Then MsgBox "Hi " & userName & ", Welcome back"

زمانی که به صورت بالا، عبارت در یک سطر قرار گیرد،نیازی به استفاده از END IF نیست.

مثال 2

اگر نام کاربر MARK نباشد چه اتفاقی رخ خواهد داد؟ در مثال 1 اتفاق خاصی رخ نمیدهد ولی در این مثال میخواهیم کمی موضوع را پیچیده تر کنیم.

Dim userName As String
userName = InputBox("What is your name?")

If userName = "Mark" Then
    MsgBox "Hi " & userName & ", Welcome back"
Else
    MsgBox "You're not Mark, please close the workbook"
End If

 

در کد بالا، عبارت ELSE اضافه شده است، با استفاده از این عبارت در صورتی که فرد وارد شده MARK نباشد، پیغام  “You’re not Mark, please close the workbook” نمایش داده میشود. مثال 3 مثال 2 یک منطق ساده TRUE/FALSE را نمایش میداد. حال اگر چند خروجی ممکن وجود داشته باشد چه اتفاقی رخ خواهد داد؟ مثال زیر کمیپیچیده تر شده است:

 

Dim userName As String
Dim userAge As Integer
userName = InputBox("What is your name?")
userAge = InputBox("How old are you?")

If userName = "Mark" Then
    MsgBox "Hi " & userName & ", Welcome back"
ElseIf userAge < 32 Then
    MsgBox "You're under 32, welcome"
Else
    MsgBox "You're not Mark, please close the workbook"
End If

حال دو سوال از کاربر پرسیده میشود.  “What is your name?” و  “What is your age? نکته مهم در مورد IF STETEMENT این است که این عبارت منطقی از بالا به پایین عمل میکند و در صورتی که یکی از شرط ها برقرار باشد مابقی شرط ها را بررسی نمیکند. در اینجا هم اگر نام کاربر MARK باشد، سن کاربر اهمیتی ندارد و تابع به END IF منتقل خواهد شد. اگر سن کاربر 31 باشد و نام او JOHN باشد eLSE IF فعال میشود و MESSAGEBOX دوم نمایش داده میشود. اگر سن کاربر 46 باشد و نام او JOHN باشد ELSE فعال میشود و پیغام شماره 3 نمایش داده میشود. شما میتوانید به تعداد نامحدود از ELSEIF استفاده کنید.

مثال 4

استفاده از منطق AND/OR پیچیدگی کدهای شما را بیشتر افزایش میدهد. در اینجا هم از همان دو سوال مطرح شده در نمونه قبل استفاده کرده ایم. با اینحال در اینجا از هر دو مقدار نام کاربر و سن کاربر در اولین IF STETMENT استفاده کرده ایم.

Dim userName As String
Dim userAge As Integer
userName = InputBox("What is your name?")
userAge = InputBox("How old are you?")

If userName = "Mark" And userAge = "32" Then
    MsgBox "Hi " & userName & ", Welcome back"
ElseIf userAge < 32 Then
    MsgBox "You're under 32, welcome"
Else
    MsgBox "You're not Mark, please close the workbook"
End If


در این مثال نام کاربر حتما می بایست MARK باشد و سن او حتما می بایست 32 باشد تا پیغام اول نمایش داده شود. در اینجا از AND مابین شرط ها استفاده شده است در صورتی که برقراری یکی از شرطها به تنهایی کافی باشد میتوانید از OR به جای aND استفاده کنید.

مثال 5

درست مثال حلقه ها که میتوانند در درون هم قرار گیرند و به صورت زنجیری عمل کنند شما میتوانید IF STATEMENT ها را نیز در درون هم قرار دهید و به صورت زنجیری از آنها استفاده کنید.

 

Dim userName As String
Dim userAge As Integer
userName = InputBox("What is your name?")
userAge = InputBox("How old are you?")

If userName = "Mark" Then
    If userAge < 32 Then
        MsgBox "You're looking young"
    Else
        MsgBox "You're getting on a bit, aren't you"
    End If
Else
    MsgBox "You're not Mark, please close the workbook"
End If

در این مثال اگر نام کاربر MARK باشد IF STATEMENT بعدی فعال میشود که بسته به سن کاربر یکی از دو پیغام “You’re looking young” یا “You’re getting on a bit, aren’t you” را نمایش میدهد.

ترکیب ساده Select Case در ماکرونویسی

یکی از روش های دیگر برای اضافه کردن منطق به ماکرونویسی استفاده از Select Case است. Select Case statement معمولا زمانی استفاده میشود که لیستی از خروجی ها را داشته باشیم.

مثال 6

در مثال زیر ما لیستی متشکل از دو اسم را در اختیار داریم(MARK , JOHN). اگر نام کاربر یکی از این دو باشد، یک پیغام متناسب با نام های گفته شده نمایش داده میشود. در صورتی که نام کاربر چیزی از غیر از دو نام تعریف شده باشد، Case Else  فعال میشود. و پیغام سوم را نمایش میدهد. select CASE با استفاده از end CASE بسته میشود.

Dim userName As String
userName = InputBox("What is your name?")

Select Case userName

    Case "Mark"
        MsgBox "Hi Mark, Welcome back"
 
    Case "John"
        MsgBox "Hi John, where is Mark today?"
 
    Case Else
        MsgBox "You're not Mark or John, please close the workbook"

End Select

مثال 7

زمانی که مقادیری با فعالیت های مشابه وجود داشته باشد میتوانیم آنها را در یک CASE SATETMENT با هم ترکیب کنیم.

Dim userName As String
userName = InputBox("What is your name?")

Select Case userName

    Case "Mark", "Lucy"
        MsgBox "Hi Mark or Lucy, Welcome back"
 
    Case "John", "Karen"
        MsgBox "Where is Mark or Lucy today?"
 
    Case Else
        MsgBox "Please close the workbook"

End Select

در کد بالا دو مقدار با استفاده از (,) از هم تفکیک شده اند.هر دو این مقادیر یک عمل را انجام میدهند. شما میتوانید با استفاده از این روش بیش از دو مقدار را با هم ترکیب کنید. اولین پیغام در صورتی که نام کاربر “Mark” یا  “Lucy” باشد فعال میشود و پیغام دوم زمانی که نام کاربر JOHN یا KAREN باشد نمایش داده خواهد شد.

از کدام یک استفاده کنیم؟ IF یا sELECT CASE ؟

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

برای مشاهده آموزش های متنی و ویدئویی رایگان بیشتر در زمینه ماکرونویسی به صفحه دوره رایگان ماکرونویسی و برنامه نویسی VBA” در اکسل مراجعه کنید. 

مشترک شدن
Notify of
guest

6 نظرات
نظردهی درون متنی
مشاهده همه نظرات
صادقی

سلام یه کد نوشتم به این شرح می خوام وقتی مثلا کلمه “پنجره” هر کدوم از حرفاش رو نوشتم بیاره نه اینکه از حرف اول و به طور کامل بنویسم! Private Sub TextBox4_Change() Dim sut, s As Long Dim deg1, deg2 As String ListBox1.RowSource = Empty For sut = 2 To Sheets(“Products”).Cells(Rows.Count, 1).End(xlUp).Row deg1 = Sheets(“Products”).Range(“A” & sut) deg2 = TextBox4.Value ‘TextBox1.Text = duzenle(TextBox1.Text) If UCase(deg1) Like UCase(deg2) & “*” Then ListBox1.AddItem ListBox1.List(s, 0) = Sheets(“Products”).Range(“A” & sut) ListBox1.List(s, 1) = Sheets(“Products”).Range(“B” & sut) ListBox1.List(s, 2) = VBA.Format(Sheets(“Products”).Range(“C” & sut), “#,##0.00”) s = s + 1 End If Next End… مطالعه بیشتر »

امیر دایی

سلام
این آموزش رو ببینید:
ساخت کمبوباکس با قابلیت سرچ

حسنی

سلام و عرض ادب قصد دارم که یک یک دستور if بنویسم که در اول لذنامه ما به ماکرو یک عدد می دهیم و ماکرو آن عدد را با خانه a2 مقایسه کند در صورتی که برابر بود در خانه c2 محتویات خانه b2 رو نمایش دهد و در صورتی که این شرط برابر نبود در خانه c2 محتویات خانه a2 رو نمایش داده شود.هر کاری که می کنم صرف محتویات خانه a2 برایم نشان داده می شود .به عنوان مثال اگر در خانه a2 عدد 33  و در خانه b2 عدد44 باشد اگر در ابتدا ماکرو ما درخواست بررسی عدد 44… مطالعه بیشتر »

امیر دایی

سلام
چرا در بررسی شرط if متغییر number رو داخل دابل کوتشین گذاشتید؟!!

حسنی

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

امیر دایی

خواهش میکنم. موفق باشید.