
حتما تا حالا به این موضوع برخورد کردید که موقع انتخاب و تصمیم گیری، بیش از ۲ خروجی داشته باشید. در آموزش های قبلی، بررسی شرط های چندگانه و گرفتن ۲ خروجی (به ازای برقرار بودن و برقرار نبودن شرط یا شروط) رو بررسی کردیم. حالا میخوایم بررسی شرط های مختلف (یک یا بیش از یک شرط) و گرفتن چند خروجی رو بررسی کنیم. برای این موضوع از IF های تو در تو (متداخل) یا Nested_If استفاده میکنیم. در واقع تابع خاصی نیست، صرفا نوع بکارگیری تابع IF اکسل در اینجا اهمیت داره که آرگومان های IF رو چطور تعیین کنیم. با این روش، میتونیم چندین حالت رو مقایسه کنیم و به ازای هر حالت یک خروجی داشته باشیم.
در این مقاله قصد داریم چند مثال از بکارگیری IFهای تو در تو رو بررسی کنیم و در هر مثال جزئیات فرمول رو به طور کامل توضیح میدیم. البته در ورژن ۲۰۱۹ تابع IFS اضافه شده که میتونید بجای IF تو در تو از این تابع استفاده کنید.
مثال ۱: تعیین وضعیت درسی دانش آموزان براساس نمره کسب شده
فرض کنید مطابق شکل ۱ لیستی از اسامی دانش آموزان به همراه نمرات آن ها داریم. می خواهیم دانش آموزان را براساس نمره کسب شده و معیارهای نمایش داده شده در شکل دسته بندی کنیم. همان طور که مشخص هست تعداد شرط ها بیش از یکی هست و باید برای تعیین وضعیت هر دانش آموز بر اساس نمره، از فرمولی با IFهای تو در تو استفاده کنیم. با توجه به شکل زیر که اسامی دانش آموزان در ستون A و نمرات در ستون B درج شده، در سلول C2 فرمول رو به شکل زیر می نویسیم:
=IF(B2>۱۸, “خیلی خوب”, IF(B2>=۱۷, “خوب”, IF(B2>۱۵, “قابل قبول”, “ضعیف”)))

شکل ۱- تعیین وضعیت دانش آموزان براساس نمره کسب شده – تابع IF اکسل
نحوه عملکرد فرمول:
قبل از توضیح فرمول، یکبار آرگومان های تابع IF رو با هم مرور می کنیم:
=IF (logical_test, [value_if_true], [value_if_false])
همان طور که مشخص هست تابع IF از سه آرگومان تشکیل شده که دو تا از اون ها اختیاری هستن. عملکرد این تابع به این شکل هست: در صورتی که شرط نوشته شده در قسمت logical_test درست باشه، خروجی فرمول برابر خواهد بود با مقدار مشخص شده در value_if_true و در غیر این صورت خروجی فرمول مقدار value_if_false رو نمایش میده.
برای اینکه عملکرد فرمول رو بهتر متوجه بشیم فرمول رو به شکل زیر در میاریم:
=IF(B2>18, "خیلی خوب",
IF(B2>=17, "خوب",
IF(B2>15, "قابل قبول", "ضعیف")))در فرمول بالا logical_test مربوط به IF اول یعنی عبارت (B2>۱۸) چک میشه و در صورتی که خروجی logical_test عبارت TRUE باشه مقدار value_if_true یعنی عبارت “خیلی خوب” نمایش داده میشه و در صورتی که خروجی logical_test عبارت FALSE باشه IF دوم فعال می شه. در واقع IF دوم به جای value_if_false در IF اول تعریف میشه. در IF دوم هم در صورتی که logical_test یعنی عبارت (B2>=۱۷) درست باشه خروجی فرمول عبارت “خوب” خواهد بود و در غیر این صورت IF سوم فعال میشه. IF سوم به جای value_if_false در IF دوم تعریف شده.
مثال ۲: محاسبه قیمت نهایی براساس میزان کالای درخواستی
فرض کنید جدولی مطابق شکل زیر داریم که حاوی اطلاعاتی مربوط به قیمت کالا براساس تعداد هست. همان طور که در شکل زیر مشخص هست قیمت هر واحد کالا براساس تعداد تقاضا متفاوت هست. حالا میخواهیم با وارد کردن تعداد کالا مورد نظرمون، جمع مبلغی که باید بپردازیم رو محاسبه کنیم. با توجه به اینکه قیمت هر واحد کالا براساس تعداد کالای درخواستی متفاوت هست باید برای محاسبه قیمت هر واحد کالا از IF های تو در تو استفاده کنیم که فرمول به شکل زیر خواهد بود:
=B9*IF(B9>=101, 12, IF(B9>=50, 13, IF(B9>=20, 16, IF(B9>=11, 18, IF(B9>=1, 20, “”)))))

شکل ۲- محاسبه مبلغ کل با استفاده از IF های تو در تو
در فرمول بالا می تونیم به جای قرار دادن قیمت هر واحد کالا (اعداد ۲۰، ۱۸، ۱۶ و….) در فرمول، از آدرس سلول های حاوی این اعداد مطابق شکل ۳ استفاده کنیم. با این کار در صورتی که قیمت هر واحد کالا تغییر بکنه فرمول نیازی به ویرایش نداره.
= B9*IF(B9>=101, B6, IF(B9>=50, B5, IF(B9>=20, B4, IF(B9>=11, B3, IF(B9>=1, B2, “”)))))

شکل ۳- استفاده از آدرس سلول ها به جای مقادیر سلول ها در فرمول – تابع IF اکسل
در همین مثال اگر بخواهیم وقتی مقادیر کمتر از یک و یا بیشتر از ۲۰۰ وارد شد، خروجی فرمول عبارت “خارج از محدوده است” را نمایش بده و در غیر این صورت براساس محدوده های تعریف شده مبلغ نهایی را محاسبه بکنه، فرمول به شکل زیر تغییر می کنه:
=IF)OR(B9>۲۰۰,B9<۱), “خارج از محدوده است”, B9*IF(B9>=۱۰۱,۱۲, IF(B9>=۵۰, ۱۳, IF(B9>=۲۰, ۱۶, IF( B9>=۱۱, ۱۸, IF(B9>=۱, ۲۰, “”)))))(

شکل ۴- اضافه کرده شرط داده های خارج از محدوده – تابع IF اکسل
همان طور که در فرمول بالا مشخص هست در قسمت logical_test مربوط به IF اول از تابع OR استفاده کردیم و در قسمت value_if_false مربوط به IF اول از IF های تو در تو استفاده کردیم. (برا یآشنایی با منطق توابع OR/AND مقاله مربوط به شروط چندگانه ور مطالعه کنید.
نکات و ترفندهای IF های تو در تو
- محدودیت های IF های تو در تو
تعداد توابع IF که می تونیم در یک فرمول با هم ترکیب کنیم در نسخه ای مختلف اکسل با هم متفاوته به طوری که در نسخه ۲۰۰۳ اکسل تنها امکان ترکیب ۷ تابع IF وجود داره در صورتی که این تعداد در نسخه های ۲۰۰۷، ۲۰۱۰، ۲۰۱۳ و ۲۰۱۶ به حداکثر ۶۴ تابع IF می رسه. در ویرایش ۲۰۱۹ هم محدودیتی برای ترکیب IF ها وجود نداره.
درسته که می تونیم برای مثال در نسخه ۲۰۱۶ اکسل ۶۴ تا IF رو با هم ترکیب کنیم ولی باید این موضوع رو هم در نظر داشته باشیم که ترکیب این تعداد تابع IF در یک فرمول هم باعث پیچیدگی پیش از حد فرمول میشه و فهم فرمول رو هم مشکل تر می کنه و هم اینکه عملکرد فرمول به خاطر چک کردن تعداد زیاد شرط ها کاهش پبدا می کنه.
- ترتیب قرار گرفتن شرط ها در IF های تو در تو
در یک فرمول حاوی IF های تو در تو، شرط ها به همون ترتیبی که در فرمول نوشته شدن چک می شن و به محض اینکه یکی از شرط ها برقرار باشه (یعنی خروجی logical_test عبارت TRUE باشه)، شرط های بعدی چک نخواهند شد. در نتیجه ترتیب نوشتن شرط ها در IF های تو در تو خیلی مهمه و عدم رعایت اون می تونه خروجی اشتباه به رو به همراه داشته باشه. برای درک بهتر اهمیت این موضوع یکبار دیگه فرمول مثال یک رو بررسی می کنیم.
=IF(B2>۱۸, “خیلی خوب”, IF(B2>=۱۷, “خوب”, IF(B2>۱۵, “قابل قبول”, “ضعیف”)))
در صورتی که نمره دانش آموزی ۱۹ باشه، با توجه به اینکه عبارت شرطی اول یعنی B2>۱۸ خروجی TRUE خواهد داشت در نتیجه دیگه باقی شرط ها چک نمیشه و خروجی فرمول عبارت “خیلی خوب” رو نمایش میده که کاملا درسته.
حالا فرض کنید ترتیب نوشتن شرط ها رو تغییر بدیم و فرمول رو به شکل زیر بنویسیم:
=IF(B2>۱۵, “قابل قبول”, IF(B2>=۱۷, “خوب”, IF(B2>۱۸, “خیلی خوب”, “ضعیف”)))
حالا اگر نمره دانش آموزی ۱۹ باشه ، فرمول در همون گام اول متوقف میشه و عبارت “قابل قبول” رو نمایش میده و دیگه باقی شرط ها کنترل نمی شن که این نتیجه درست نیست. پس متوجه شدیم که ترتیب نوشتن شرط ها چقدر می تونه در نتیجه نهایی تاثیرگذار باشه.
- ارزیابی گام به گام عملکرد فرمول
برای اینکه عملکرد مرحله به مرحله یک فرمول IF تو در تو رو بررسی کنیم می تونیم از ویژگی Evaluate Formula که در تب Formula و زیرمجموعه Formula Auditing قرار گرفته استفاده کنیم. برای این کار کافیه روی سلول مورد نظر که فرمول در اون نوشته شده کلیک کنیم و بعد از مسیر گفته شده روی گزینه Evaluate Formula کلیک کنیم. پنجره Evaluate Formula مطابق شکل زیر نمایش داده میشه که فرمول موجود در سلول انتخابی در اون نمایش داده شده.

شکل ۵- Evaluate Formula
برای بررسی گام به گام فرمول روی دکمه Evaluate کلیک می کنیم. هر بار که روی دکمه Evaluate کلیک می کنیم یک بخش از فرمول بررسی و نتیجه نمایش داده میشه تا اینکه خروجی نهایی فرمول بدست میاد. در این حالت دکمه Evaluate به Restart تغییر پیدا می کنه و می تونیم از ابتدا تمام مراحل فرمول رو دوباره بررسی کنیم. برای روشن شدن موضوع به ویدئو زیر توجه کنید:

یکی از مزیت های Evaluate Formula این هست که هر جا در فرمول (به خصوص در فرمول های پیچیده) به مشکل برخورد کردیم و فرمول خروجی خطا نمایش داد، می تونیم با استفاده از این امکان مرحله به مرحله فرمول رو رصد و مشکل رو ریشه یابی کنیم. برای دیدن روش دوم دیباگ کردن فرمول مقاله مربوط به خطایابی فرمول رو مطالعه کنید. همچنین میتونید از ویدئو (رایگان) اصول فرمول نویسی حرفه ای که در این خصوص تهیه شده استفاده کنید.
- پرانتز ها در IF های تو در تو
یکی از چالش هایی که در استفاده از IF های تو در تو وجود داره بحث پرانتزها هست. از آنجایی که پرانتز ها به صورت جفتی هستن، پس هر پرانتزی که باز میشه باید بسته بشه. این موضوع در نگاه اول ساده به نظر میاد ولی وقتی تعداد پرانتزها زیاد میشه یا تعداد IF هایی که تعریف کردیم بیشتر میشه دیگه نمیشه به راحتی ازش گذشت. چون اگر پرانتز ها به درستی بسته نشن فرمول با خطا مواجه میشه. خوشبختانه اکسل برای کمک به حل این چالش دو ویژگی داره:
- در صورتی که در فرمول نوشته شده بیش از یک جفت پرانتز وجود داشته باشه، اکسل به طور خودکار با رنگ های مختلف هر جفت پرانتز رو از هم تفکیک می کنه و این باعث میشه که حواسمون رو بیشتر جمع کنیم و به ازای هر رنگ پرانتزی که باز شده یک پرانتز با همون رنگ بسته بشه.
- به محض اینکه یک جفت پرانتز بسته میشه اکسل اون پرانتز ها رو یک لحظه به صورت پر رنگ تر (Bold) نمایش می ده.
در شکل زیر تفکیک پرانتزها با استفاده از رنگ ها نمایش داده شده. همان طور که در شکل ۶ مشخص هست به ازای هر پرانتزی که باز شده یک پرانتز هم با همون رنگ بسته شده.

شکل ۶- تفکیک پرانتز ها در فرمول با استفاده از رنگ
- نمایش متفاوت متن و عدد در فرمول
وقتی داریم در قسمت logical_test تابع IF، شرط رو وارد می کنیم، باید دقت کنیم که نحوه نوشتن عدد و متن متفاوت هست. در logical_test متن باید بین دو تا کوتیشن (” “) نوشته بشه در صورتی که برای اعداد نیازی به کوتیشن نیست. برای مثال به دو فرمول زیر دقت کنید:
=IF(B2>۱۵, “قابل قبول” ,…) ——> طرز صحیح نوشتن
=IF(B2>”۱۵”, “قابل قبول”,…..) ——> طرز اشتباه نوشتن
در دو فرمول بالا در صورتی که مقدار سلول B2 عدد ۲۰ باشه، خروجی فرمول اول TRUE و خروجی فرمول دوم FALSE خواهد بود. در فرمول دوم چون عدد ۱۵ بین دو تا کوتیشن قرار گرفته، در نتیجه فرمول اون رو یک رشته عددی در نظر می گیره. برای همین هم خروجی FALSE رو نمایش میده.
- استفاده از فاصله در IF های تو در تو برای خوانایی بهتر فرمول
وقتی که از IF های تو در تو در فرمول نویسی استفاده می کنیم بهتر هست برای گویاتر شدن فرمول بین توابع IF فاصله بذاریم. اینکار فهم فرمول رو خیلی راحت تر می کنه. اکسل نسبت به گذاشتن فاصله در فرمول حساس نیست پس می تونیم بدون هیچ نگرانی با گذاشتن فاصله در فرمول ها اون ها رو خوانا تر کنیم. برای اینکه در یک فرمول فاصله بذاریم، نشان گر موس رو در هر جایی که می خواهیم فرمول به خط بعد منتقل بشه نگه میداریم و کلید های ترکیبی Alt + Enter رو می زنیم و بعد نوار فرمول رو بزرگتر می کنیم تا فرمول در چند خط نمایش داده بشه. برای روشن شدن موضوع ویدئو زیر رو ببینید:

جایگزین های تابع IF اکسل به صورت تو در تو
با توجه به محدودیت هایی که در تعریف تعداد IF ها در نسخه های مختلف اکسل وجود داره و برای خلاصه تر کردن فرمول و افزایش سرعت عمل فرمول، می تونیم از موارد زیر به جای IF های تو در تو (بسته به منطق سوال) استفاده کنیم:
- استفاده از تابع CHOOSE برای چک کردن شرط های مختلف و برگردوندن مقادیر مختلف؛
- استفاده از یک جدول مرجع و تابع VLOOKUP که در اون از حالت approximate match استفاده شده؛
- استفاده از توابع AND و OR در قسمت logical_test تابع IF؛
- استفاده از فرمول نویسی آرایه ای،
- ترکیب چند تابع IF با استفاده از تابع CONCATENATE؛
- برای کاربران حرفه ای اکسل، بهترین جایگزین برای IF های تو در تو، تعریف یک تابع سفارشی با استفاده از VBA هست.
خب، با چند مثال نحوه استفاده از تابع IF بصورت تو در تو رو دیدیم. اما به این موضوع توجه کنید که استفاده خیلی زیاد از IFهای تو در تو ممکنه درست نباشه. چون دیباگ کردن فرمول رو سخت میکنه. اصولا وقتی به این فکر می افتید که IFهای تو در توی زیادی استفاده کنید، تقریبا مطمئن باشید که راه حل های بهتری میتونید در اکثر مواقع پیدا کنید. برای درک این موضوع حتما حتما آموزش جستجوی بازه ای رو مطالعه کنید.
دانلود فایل استفاده شده در آموزش تابع IF اکسل
جهت دانلود فایل نمونه این آموزش، روی لینک زیر کلیک کنید:





توضیحی دیگر:
معدل دی ماه دانش آموزان با فرمول زیر محاسبه میشود.
نمره مستمر هر درس × ۱ + نمره دی ماه × ۲ = تقسیم بر ۳
معدل خرداد(سال): مستمر اول + دی ماه × ۲ + مستمر دوم+ خرداد × ۴ = تقسیم بر ۸
نمره ۹۷ در کارنامه به معنای غیبت موجه است و نمره مستمر دوم یا خرداد جایگزین ۹۷ میشود.
سلام و درود بر شما
ممنون از اینکه بررسی کردید.
در طرح مشکل، عرض کردم نمرات دانش آموزان در ستون های مورد نظر وارد میشوند.
توضیح کامل: در چند کاربرگ، ۱. مشخصات دانش آموزان، رشته، پایه، و کلاس، ۲. نمرات مستمر اول، ۳. نمرات دی ماه،۴. نمرات مستمر دوم، ۵. نمرات خرداد ماه، ۶. در یک کاربرگ کارنامه است و با استفاده از لیست آبشاری و vloopup مشخصات و نمرات هر دانش آموز در کارنامه فراخوان میشود.
در کارنامه ۴ ستون برای نمرات و یک ستون با نام نمره نهایی وجود دارد، از آن فرمولها در ستون نمره نهایی استفاده میشود.
سوال من این است، هر وقت فقط نمرات مستمر اول و دی ماه در کارنامه فراخوان شد، با فرمول اول محاسبه صورت میگیرد. اما زمانی که کل نمرات سال(۴ ستون) فراخوان میشود باید از فرمول دوم استفاده شود.
من برای حل این مشکل فرمول اول را پاک میکنم و فرمول دوم را مینویسم.
آیا راه حلی وجود دارد تا دو تا فرمول را یکی کرد بطوریکه هر وقت نمرات مستمر اول و دی ماه فراخوان شد، محاسبه صورت بگیرد و هر وقت کل نمرات سال فراخوان شد، محاسبه صورت بگیرد و نیاز به جابجایی یا پاک کردن فرمولها نباشد.
ببخشید که توضیحات طولانی شد.
سپاسگزارم.
درود
if بذارید که اگر ۴ تا پر شد مثلا counta اون ردیف = با ۴ بود فرمول دوم و در غیر اینصورت فرمول اول اجرا بشه
سلام مجدد
فرمول دوم:
(If(A2=97,(C2+B2*2+C2+D2*4)/8,if(B2=97,(A2+D2*2+C2+D2*4)/8,(A2+B2*2+C2+D2*4)/8
آیا راهی وجود دارد که دو تا فرمول را یکی کرد؟ یعنی اگر نمرات دی ماه ثبت شد، فرمول جواب درست بدهد و اگر نمرات سال وارد شد، هم جواب درست بدهد.
سپاسگزار راهنمایی شما هستم.
درود
واقعیتش درست متوجه نشدم مشکل کجاست و مسئله چیه
باید معلوم بشه فرمول چی رو داره حساب میکنه
اینطوری مشخص نیس
بهتره دیتا رو معرفی کنید که در هر ستون چی دارید و سوال رو مطرح کنید
شاید اصلا این راهش نباشه
سلام و وقت به خیر
سال گذشته کارنامهای برای دانش آموزان طراحی کردم و برای معدل دی ماه از فرمول:
((If(A2=97,(B2*2)/2,if(B2=97,(a2)/1,(a2+B2*2)/3=
و برای معدل سال از فرمول:
(If(A2=97,(C2+B2*2+C2+D2*4)/8,if(B2=97,(A2+D2*2+C2+D2*4)/8,(A2+B2*2)=
سلام و وقت به خیر
لطفاً لینک تلگرام را بفرمائید.
داخل تلگرام سرچ کنید اکسل پدیا
یا در صفحه اصلی سایت روی لوگوی تلگرام کلیک بفرمایید
https://t.me/joinchat/DRJ4Rj6TAK4nfsbdlSF8Qg
سلام و وقت به خیر
مقاله خوبی است. خدا قوت
۱ شهریور ۱۴۰۱، پرسشی مطرح کردم، متاسفانه تا کنون جوابی داده نشد.
الآن هم برای نوشتن کامل یک فرمول با IF به مشکل برخوردم. اگر امکان دارد فایل اکسل را بفرستم تا بررسی کنید.
سپاسگزارم.
درود
سوالات تقریبا همه پاسخ داده میشن اینجا
شاید از قلم افتاده
شاید هم امکان پاسخگویی و ارسال و فایل و … نبوده
در مورد بخش دوم اگر میتونید سوال رو همینجا شرح بدید بدون فایل، در غیر اینصورت داخل گروه تلگرام این کار رو انجام بدید
اینجا همچین سیستمی برای بررسی فایل نداریم
موفق و سلامت باشید
لطفا اگه فایل تمرین رو میخواید در اختیار بزارید خیلی راحت یه لینک براش درست کنید نه اینکه بگید که لین دانلود رو میفرستیم به ایمیل که هیچ وقت هم نمیفرستید???????
جناب محمدپور
عرض سلام و پوزش بابت نارضایتی شما
حتما قبل از ارسال ایمیل لینک دانلود فایل مورد نظر، در حساب کاربری خودتون لاگین کنید تا ارسال لینک انجام شود.
سلام
وقت بخیر.
توی سلول A1 تاریخ شمسی ۱۴۰۱/۰۸/۱۰ را نوشتم. توی سلول B1 فرمول نوشتم که اگر تاریخ سلول A1 بزرگتر از ۱۴۰۱/۰۸/۱۰ بود، مقدار ۱۰۰۰۰۰ را به عنوان جواب در سلول B1 قرار بده. ولی متاسفانه جواب خروجی اشتباه در میاد. با تاریخ میلادی امتحان کردم درست شد ولی شمسی را اشتباه انجام میده.
لطفا دقیقه فرمولش را برایم بنویسید.
متشکرم از توجه و زحمت تان.
درود
تاریخ شمسی رو چطور ثبت میکنید؟
این موضوع اول باید مشخص بشه
اگر general کردید و تبدیل به عدد نشد یعنی جنس دیتا تاریخ نیست و محاسبه نمیتونید انجام بدید و برید مقاله تاریخ شمسی در اکسل رو مطالعه کنید
سلام و وقت بخیر.
برای بررسی افت و خیر تحصیلی باید از چه تابعی استفاده کرد؟
مثلا ترم یک معدل ۱۵ بوده و ترم دو معدل ۱۴ و ترم سوم معدل ۱۲ بوده و یک ترم نیز مرخصی.
میخواهیم اگر در یک ترم نمرات دانشجو به مقدار ۲ نمره کمتر شده باشه عبارت نیاز به بررسی هست درج شود در غیر این صورت عبارت نیاز به بررسی نیست.
اگر ۱۰۰۰ ردیف داشته باشیم بعضی از سلول ردیفها خالی باشد و بخواهیم آخرین نمره هر ردیف در ستون جدید (آخرین سلول ردیف) جایگذاری بشه باید ا چه تایعی استفاده کنیم. ممنون
درود بر شما
همین ساختار ایف که سوال ثبت کردید جواب سوالتون رو داده با توجه به داده هاتون فمرول رو باید پیاده کنید
ی مقدار باید با فرمول نویسی اشنا باشین که بتونید این ها رو انجام بدید
سوال بعدی هم واضح نیست
اگر منظور فقط پر کردن سلول هالی با اخرین داده پر هست با go to / blank و = سلول بالایی و ctrl enter شدنی هست
سلام
برای این که در ستون wbs , Id در pms راحتتر ردیفها رو پر کنیم راهی داره
همینطور برای ردیفها فرمولها تا با درگ کردن همه رو شامل بشه چون به خاطر Summary ها فرمولها قاطی میشه
ممنون میشم اگر راهنمایی کنید
مرسی
درود
مثال بزنید لطفا