سبد خرید
0

هیچ محصولی در سبد خرید نیست.

تمام دسته ها
  • تمام دسته ها
  • Power BI
  • Power Pivot
  • Power Query
  • ابزارها
  • افزونه ها
  • اکسل مدیا
  • توابع اکسل
  • دسته‌بندی نشده
  • دیده بان
  • گوگل شیت
  • مسائل کاربردی
  • معرفی کتاب
  • نمودار ها
  • وی بی - ماکرو

دستورات شرطی در VBA | دستور IF

دستور IF در وی بی
۵/۵ - (۷ امتیاز)

یکی از پایه ها در کدنویسی ( در هر زبان برنامه نویسی از جمله VBA ) دستورات شرطی هستند که با استفاده از اونا میتونید عملیات دلخواه خودتون رو به صورت شرطی اجرا کنید. قطعا تو اکسل هم با این شرایط برخورد کردید و از توابعی مثل تابع IF یا تابع Choose استفاده کردید. تو این آموزش میخوام دستوراتی که باعث اجرای شرطی کدها میشه رو بگم.
مهمترین دستورات شرطی تو وی بی دستور Select  Case و دستور IF در وی بی هست. هر دو این دستورات یک یا چندین شرط رو بررسی میکنند و بر اساس نتیجه آن یکسری دستورات متناسب رو اجرا میکنند.

دستور IF در وی بی (VBA)

عبارت IF … Then یک شرط رو بررسی میکنه و اگر نتیجه این بررسی مقدار True (شرط برقرار باشد) بخشی از کد رو اجرا میکنه و اگر نتیجه بررسی شرط False (شرط برقرار نباشد) بخش دیگری از کد رو اجرا میکنه. پس نتیجه اجرای دستور IF … Then اجرای یکی از بخش ها ( بخش اول که در صورت برقرار بودن شرط و یا بخش دوم که در صورت برقرار نبودن شرط نوشته شده) اجرا میشه.

ساختار کلی دستور IF … Then به صورت زیر هست:

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

نکته
در ساختار یک دستور IF در وی بی شما میتونید هر چند تا که لازم باشه ElseIf داشته باشید که در صورت برقرار نبودن یک شرط، شرط بعدی رو بررسی کنه و کدهای مربوط رو اجرا کنه.

 

یک مثال از دستور IF

میخوایم رنگ سلول فعال رو بر اساس عددی که وارد میکنیم تعیین کنیم. به عنوان مثال اگر مقدار وارد شده در سلول فعال از ۵ کوچکتر باشه، رنگ سلول قرمز باشه. اگر این مقدار بین ۵ تا ۱۰ باشه رنگ سلول نارنجی و در صورتیکه مقدار بیشتر از ۱۰ باشه رنگ سلول سبز باشه.

نکته
دستورات ElseIf و Else اختیاری هستند و در صورتیکه نیاز ندارید میتونند از دستور IF حذف کنید.

 

تو این آموزش در مورد نحوه استفاده از دستور IF در وی بی (VBA) صحبت شد. استفاده از این دستور، حالت های بیشتری هم داره که پیشنهاد میکنم مطلبی که مایکروسافت برای این دستور نوشته رو هم بخونید.

در مورد ساختار دستور Select Case در آموزش های بعدی صحبت میکنیم.

کلیدواژه : تابع IF
133

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

دیدگاه کاربران
  • امید جوان ۳ فروردین ۱۴۰۳ / ۵:۰۸ ق٫ظ

    سلام
    خسته نباشید
    یک سوال داشتم
    سهتا ستون دارم برای انجام فعالیتی ،که اگه تیک زده شده ،ینی اون کار انجام شده.و برای هر سه ستون یک ضریب درنظر گرفتم ک مجموعش میشه یک.حالا میخوام دستوری بنویسم ک مثلا اگر ستون اول تیک زده شده،توی یک سلول برام بزنه مثلا ۴۰ درصد کار انجام شده.
    ممنون میشم کمکم کنید.

    • آواتار
      حسنا خاکزاد ۳ فروردین ۱۴۰۳ / ۷:۵۲ ب٫ظ

      درود بر شما
      میتونید با if انجام بدید
      میتونید هم از طریق ترکیب فرمت سل و مقدار سلول، مستقیم محاسبات رو انجام بدید. یعنی در یکی از ۳ سلول بنویسید ۴۰ بع در فرمت سل تیک بذارید. اینطوری کافیه فقط اون ۳ سلول رو جمع بزنید.

      • امید جوان ۳ فروردین ۱۴۰۳ / ۸:۰۱ ب٫ظ

        ممنونم از شما،فقط اگر لطف کنید بگید با if باید چطوری بنویسم،ممنون میشم بازم.

        • آواتار
          حسنا خاکزاد ۶ فروردین ۱۴۰۳ / ۱:۱۱ ق٫ظ

          بستگی داره . حالت های مختلفی میتونه وجود داشته باشه. مثلا اگر با کاراکتر ویژه بذارید، میتونید اینطوری بزنید:

          =SUM((A1:C1=”a”)*A2:C2)

          مثلا اگه فونت webdings استفاده کنید و از کاراکتر a، میتونید از این فرمول استفاده کنید (بصورت ارایه ای. یعنی ctrl+shift+enter بزنید موقع ثبت)
          در محدوده A2:C2 هم ضرایب رو گذاشتیم

  • وحید ۲۲ مهر ۱۴۰۲ / ۳:۱۲ ب٫ظ

    یه برنامه تو vba اکسل نوشتم که عکس کادر را میاره
    ولی اگه کدی را بزنیم که اون کد وجود نداشته باشه error میده 

    اگه ممکن ه راهنمایی کنید
    باید یه شرط اول ش بنویسم ولی بلد نیستم

    Private Sub TextBox1_Change()
    Image1.Picture = LoadPicture(“D:\pic2\” & TextBox1.Value & “.jpg”)
    End Sub

    • آواتار
      حسنا خاکزاد ۲۲ مهر ۱۴۰۲ / ۵:۰۷ ب٫ظ

      درود
      اگه میخواید ارور نده، اول کد on error resume next رو بزنید

      • محمدرضا ۲۸ اسفند ۱۴۰۲ / ۷:۱۰ ق٫ظ

        سلام و وقت بخیر. میشه یه کد برام بنویسید که مثلا اگه سلول مورد نظر خالی بود تکس باکس ثبت اطلاعات ،عملیات را انجام نده و پیغام لطفاً کادر مورد نظر را پر کنید بده ممنون .

        • آواتار
          حسنا خاکزاد ۳ فروردین ۱۴۰۳ / ۷:۴۶ ب٫ظ

          درود بر شما
          کد ایف رو بذارید داخل دکمه ثبت عملیات و با این شرط که مثلا فلان تکست باکس خالی نباشه. اگه خالی بود مسیج باکس رو نشون بده
          ما سعی میکنیم اموزش بدیم
          اصولا کد اماده اائه دادن خیلی مفید نخواهد بود چون د رهر شرایطی کد تغییراتی میکنه

  • سمیه خسروی ۱۶ شهریور ۱۴۰۲ / ۱۱:۴۷ ق٫ظ

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

    • آواتار
      حسنا خاکزاد ۱۶ شهریور ۱۴۰۲ / ۹:۴۷ ب٫ظ

      درود بر شما
      بله شدنی هست خب کافیه در اون خط که میگه برو در شیت ۱ مثلا ثبت کن، اسم شیت مورد نظرتون رو بنویسید

  • مهدیه ۳۰ دی ۱۴۰۱ / ۲:۴۴ ب٫ظ

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

    • آواتار
      حسنا خاکزاد ۸ بهمن ۱۴۰۱ / ۳:۴۵ ب٫ظ

      درود بر شما
      هم میتونید کد بنویسید و متصل کنید به cell link اون چک باکس
      هم اینکه فرمول نویس یکنید
      بسته به ورژن فرق میکنه چه تابعی
      هم تابع filter هست هم فرمول نویسی آرایه ای

    • نفیسه ۱ مهر ۱۴۰۲ / ۰:۰۸ ق٫ظ

      سلام در اکسل وقتی چک باکس ایجاد میکنیم،وبا فرمول IF فرمول نویسی میکنم میخوام گزینه TRUE /FALSE نیاد فقط همون کادر چک باکس باشه چکارش کنم ؟؟

      • آواتار
        حسنا خاکزاد ۱ مهر ۱۴۰۲ / ۹:۱۴ ق٫ظ

        درود بر شما
        اگر میخواید فرمول نویسی انجام بدید به cell link نیاز دارید
        یعنی باید حتما سلولی وجود داشته باشه که T/F باشه
        اما اگر میخواید دیده نشه مثلا میتونید از قسمت فرمت سل، کد رو بذارید روی ;;; که داده رو پنهان کنه و نمایش نده

  • حسنی ۱۴ آذر ۱۴۰۱ / ۰:۴۰ ق٫ظ

    سلام و عرض ادب
    قصد دارم که یک یک دستور if بنویسم که در اول لذنامه ما به ماکرو یک عدد می دهیم و ماکرو آن عدد را با خانه a2 مقایسه کند در صورتی که برابر بود در خانه c2 محتویات خانه b2 رو نمایش دهد و در صورتی که این شرط برابر نبود در خانه c2 محتویات خانه a2 رو نمایش داده شود.هر کاری که می کنم صرف محتویات خانه a2 برایم نشان داده می شود .به عنوان مثال اگر در خانه a2 عدد ۳۳ و در خانه b2 عدد۴۴ باشد اگر در ابتدا ماکرو ما درخواست بررسی عدد ۴۴ رو بکنیم در خانه C2 باید برای ما عدد ۳۳ نمایش داده شود.اگر کمک کنید ممنون می شوم.آدرس کانال تلگرام استاد عزیز هم متاسفانه ندارم
    Sub number()
    Dim number As Single
    number = InputBox(“number”)
    For i = 2 To 40
    If Cells(i, 1).Value = “number” Then
    Cells(i, 3).Value = Cells(i, 2).Value
    Else: Cells(i, 3).Value = Cells(i, 1).Value
    End If
    Next
    End Sub

    • آواتار
      حسنا خاکزاد ۲۴ دی ۱۴۰۱ / ۴:۳۵ ب٫ظ

      درود بر شما
      این کد معنیش اینه:
      اگر داده ورودی برابر بود با مقدار سلول A2 بیاد و مقدار سلول B2 رو بذاره توی C2 اگر هم نبود، مقدار سلول A2 رو بذاره توی C2

      حالا ببینید همینو میخواستید؟!
      چون من نتونستم با مثالتون ارتباط برقرار کنم

    • امیررضا ۳ اسفند ۱۴۰۱ / ۱۰:۵۹ ق٫ظ

      سلام دوست عزیز
      علت اجرا نشدن کد شما این است که number داخل کوتیشن در if گذاشته اید با حذف آن کد شما اصلاح شده و درست اجرا می شود .موفق باشید

  • جاوید ۲۲ آبان ۱۴۰۱ / ۸:۵۹ ق٫ظ

    For Each codp In Sheet8.Range(“A2:A64”)
    If codp.Offset(0, 7) = qesmm Then
    Sheet9.Range(“D7”) = codp
    End If
    If Sheet9.Range(“F61”) > 0 Then
    chapj.Hide
    Sheet9.PrintOut
    End If
    Next codp

    End Sub
    در فرمول بالا قصد پرینت دسته جمعی دارم. منتهی اگر جمع فاکتور صفر باشه می خوام پرینت نکنه چرا داره ارور۲۰۲۹ می زنه
    قبلا این فرمول به صورت پایین هم نوشتم ولی بازهم جواب نداد.
    For Each codp In Sheet8.Range(“A2:A64”)
    If codp.Offset(0, 7) = qesmm and Sheet9.Range(“F61”) > 0 Then
    Sheet9.Range(“D7”) = codp
    chapj.Hide
    Sheet9.PrintOut
    End If
    Next codp
    End Sub

    • سامان چراغی ۷ اردیبهشت ۱۴۰۲ / ۸:۵۷ ب٫ظ

      درود
      با بررسی بخشی از کد شما، پیدا کردن مشکل سخت میشه. نیاز به خود فایل و بررسی خط به خط کد در زمان اجرا هست.

  • جاوید ۲۲ آبان ۱۴۰۱ / ۸:۵۸ ق٫ظ

    For Each codp In Sheet8.Range(“A2:A64”)
    If codp.Offset(0, 7) = qesmm Then
    Sheet9.Range(“D7”) = codp
    End If
    If Sheet9.Range(“F61”) > 0 Then
    chapj.Hide
    Sheet9.PrintOut
    End If
    Next codp

    End Sub
    در فرمول بالا قصد پرینت دسته جمعی دارم. منتهی اگر جمع فاکتور صفر باشه می خوام پرینت نکنه چرا داره ارور۲۰۲۹ می زنه
    قبلا این فرمول به صورت پایین هم نوشتم ولی بازهم جواب نداد.
    For Each codp In Sheet8.Range(“A2:A64”)
    If codp.Offset(0, 7) = qesmm and Sheet9.Range(“F61”) > 0 Then

    Sheet9.Range(“D7”) = codp

    chapj.Hide
    Sheet9.PrintOut
    End If
    Next codp

    End Sub

    • سامان چراغی ۲۲ آبان ۱۴۰۱ / ۱۱:۴۱ ق٫ظ

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

  • صادق ۴ تیر ۱۴۰۱ / ۹:۲۸ ق٫ظ

    سلام وقتتون بخیر ، چطور میشه این دستور رو اجرا کرد ؟ وقتی داده یک سلول مثلا از ۵ کمتر هست یه مسیج باکس نشون بده . هشدار بده بهمون .

    ممنون میشم اگه جواب کامل بهم بدین یا دستورش رو برام بفرستین

    • آواتار
      حسنا خاکزاد ۴ تیر ۱۴۰۱ / ۱۰:۱۸ ق٫ظ

      درود
      sub test()
      if range(“a1”).value<5 then msgbox (....)
      end sub

      این ساب رو میتونید در ایونت های مختلف بنا به نیاز بنویسید
      مثلا اگر در شیت ۱ هست selection change بزنید و این کد رو اونجا کپی کنید

      ی مقدار باید اشنایی با کدنویسی داشته باشید که بتونید این جزئیات رو روی فایل اعمال کنید

  • علی ۲۲ فروردین ۱۳۹۹ / ۲:۱۹ ب٫ظ

    سلام ضمن تبریک اعیاد عزیز به شما
    دوستان گشتم پاسخ جامعی ندیدم
    شرمنده من فایلی میخوام که
    ۱. از امروز به مدت مثلا ۶۰ روز بعد کار کنه (یعنی تاریخ الان رو بگیره و اجازه بده تا ۶۰ روز بعد کار کنه )
    ۲ – با تغییر تاریخ به کتربر پیغام بده تاریخ تغییر کرده
    ۳ – بعد از اولین بار فقط اجازه باز شدن ۱۰۰ بار داشته باشه
    ۴ بعد از اتمام تاریخ کلا فایل پاک بشه
    ۵ در صورت غیر فعال کردن ماکرو فایل باز نشه

    خود فایل باشه عالیه

  • مسعود ۲۱ بهمن ۱۳۹۸ / ۲:۳۶ ب٫ظ

    سلام
    اگه بخوام سلولهای پرشده یک ستون را بهمراه سلول مجاور ستون کنار را به جدول دیگه ای در شیت بعدی کپی کنم چه طور باید انجام بدم؟

    • سامان چراغی ۲۲ بهمن ۱۳۹۸ / ۷:۰۶ ق٫ظ

      سلام
      یک حلقه For Each برای ستون بنویسید که با دستور IF بررسی میکنه سلول خالی هست یا پر؟
      در قسمت پر بودن سلول با استفاده از متد Offset برای انتخاب سلول کناری و متد Copy سلول ها رو به شیت ۲ منتقل کنید.

  • مسلم میرزایی ۲۴ دی ۱۳۹۸ / ۶:۳۸ ب٫ظ

    سلام
    ممنون از اطلاعات خوب و آموزنده شما بزرگواران

  • حامد ۱۹ دی ۱۳۹۸ / ۲:۴۱ ب٫ظ

    با تشکر از زحمات فوق العاده تون
    ببخشید، اگر بخوایم یه برنامه بنویسیم که عدد ۱ رو توی ورد یادداشت کنه و بعد از اون عدد ۲ همینطور با هربار اجرای ماکرو این عدد یکی افزایش پیدا کنه، چیکار باید کرد؟
    خیلی ممنونم

  • saba ۹ اردیبهشت ۱۳۹۷ / ۶:۱۳ ب٫ظ

    ممنون از برنامه اتان

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

توسط
تومان