یکی از پایه ها در کدنویسی ( در هر زبان برنامه نویسی از جمله VBA ) دستورات شرطی هستند که با استفاده از اونا میتونید عملیات دلخواه خودتون رو به صورت شرطی اجرا کنید. قطعا تو اکسل هم با این شرایط برخورد کردید و از توابعی مثل تابع IF یا تابع Choose استفاده کردید. تو این آموزش میخوام دستوراتی که باعث اجرای شرطی کدها میشه رو بگم.
مهمترین دستورات شرطی تو وی بی دستور Select Case و دستور IF در وی بی هست. هر دو این دستورات یک یا چندین شرط رو بررسی میکنند و بر اساس نتیجه آن یکسری دستورات متناسب رو اجرا میکنند.
دستور IF در وی بی (VBA)
عبارت IF … Then یک شرط رو بررسی میکنه و اگر نتیجه این بررسی مقدار True (شرط برقرار باشد) بخشی از کد رو اجرا میکنه و اگر نتیجه بررسی شرط False (شرط برقرار نباشد) بخش دیگری از کد رو اجرا میکنه. پس نتیجه اجرای دستور IF … Then اجرای یکی از بخش ها ( بخش اول که در صورت برقرار بودن شرط و یا بخش دوم که در صورت برقرار نبودن شرط نوشته شده) اجرا میشه.
ساختار کلی دستور IF … Then به صورت زیر هست:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ |
If Condition1 Then دستورات قابل اجرا در صورت برقرار بودن شرط اول ElseIf Condition2 Then دستورات قابل اجرا در صورت برقرار نبودن شرط اول و برقرار بودن شرط دوم ... Else دستورات قابل اجرا در صورت برقرار نبودن هیچکدام از شرایط بالا End If |
در عبارت بالا ابتدا شرط یک ( Condition1) بررسی میشه و اگر برقرار بود دستورات زیر آن اجرا میشه. در صورتیکه این شرط برقرار نبود شرط بعدی (Condition2) بررسی میشه و اگه برقرار بود دستورات زیر اون اجرا میشه. در انتها اگر هیچکدام از این دو شرط برقرار نبودند (یعنی هیچکدوم از کدهای زیرمجموعه اونها اجرا نشده) زمانیکه به بخش Else میرسیم بدون بررسی اضافی، کدهای زیر اون اجرا میشه (این یعنی هیچکدوم از شرایط بالا برقرار نبوده که کدهاشون اجرا نشده و منجر به اجرا شدن دستورات زیر مجموعه Else شده).
در ساختار یک دستور IF در وی بی شما میتونید هر چند تا که لازم باشه ElseIf داشته باشید که در صورت برقرار نبودن یک شرط، شرط بعدی رو بررسی کنه و کدهای مربوط رو اجرا کنه.
یک مثال از دستور IF
میخوایم رنگ سلول فعال رو بر اساس عددی که وارد میکنیم تعیین کنیم. به عنوان مثال اگر مقدار وارد شده در سلول فعال از ۵ کوچکتر باشه، رنگ سلول قرمز باشه. اگر این مقدار بین ۵ تا ۱۰ باشه رنگ سلول نارنجی و در صورتیکه مقدار بیشتر از ۱۰ باشه رنگ سلول سبز باشه.
۱ ۲ ۳ ۴ ۵ ۶ ۷ |
If ActiveCell.Value < ۵ Then ActiveCell.Interior.Color = ۲۵۵ ' رنگ سلول قرمز ElseIf ActiveCell.Value < ۱۰ Then ActiveCell.Interior.Color = ۴۹۴۰۷ ' رنگ سلول نارنجی Else ActiveCell.Interior.Color = ۶۵۲۸۰ ' رنگ سلول سبز End If |
دستورات ElseIf و Else اختیاری هستند و در صورتیکه نیاز ندارید میتونند از دستور IF حذف کنید.
تو این آموزش در مورد نحوه استفاده از دستور IF در وی بی (VBA) صحبت شد. استفاده از این دستور، حالت های بیشتری هم داره که پیشنهاد میکنم مطلبی که مایکروسافت برای این دستور نوشته رو هم بخونید.
در مورد ساختار دستور Select Case در آموزش های بعدی صحبت میکنیم.
سلام
خسته نباشید
یک سوال داشتم
سهتا ستون دارم برای انجام فعالیتی ،که اگه تیک زده شده ،ینی اون کار انجام شده.و برای هر سه ستون یک ضریب درنظر گرفتم ک مجموعش میشه یک.حالا میخوام دستوری بنویسم ک مثلا اگر ستون اول تیک زده شده،توی یک سلول برام بزنه مثلا ۴۰ درصد کار انجام شده.
ممنون میشم کمکم کنید.
درود بر شما
میتونید با 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 سلول ها رو به شیت ۲ منتقل کنید.
سلام
ممنون از اطلاعات خوب و آموزنده شما بزرگواران
با تشکر از زحمات فوق العاده تون
ببخشید، اگر بخوایم یه برنامه بنویسیم که عدد ۱ رو توی ورد یادداشت کنه و بعد از اون عدد ۲ همینطور با هربار اجرای ماکرو این عدد یکی افزایش پیدا کنه، چیکار باید کرد؟
خیلی ممنونم
ممنون از برنامه اتان