تصمیمگیری در فرمول
تابع IF(شرط، مقدار اگر درست، مقدار اگر نادرست) سادهترین و پرکاربردترین تابع منطقی است. شرط هر عبارتی است که TRUE یا FALSE بدهد: مقایسه، ISBLANK، ISNUMBER یا ترکیبی از AND و OR. مشکل از جایی شروع میشود که شرطها زیاد میشوند و IF های تو در تو غیرقابلخواندن میشوند.
مثال: پورسانت پلکانی نمایندگان فروش
نمایندهای که فروش ماهانهاش (ستون C، به تومان) از ۵ میلیارد بیشتر باشد ۳٪، از ۲ میلیارد بیشتر ۲٪ و بقیه ۱٪ پورسانت میگیرند:
IF تو در تو (همهی نسخهها):
=C2*IF(C2>=5E9, 3%, IF(C2>=2E9, 2%, 1%))
IFS (Excel 2019 به بعد):
=C2*IFS(C2>=5E9, 3%, C2>=2E9, 2%, TRUE, 1%)
SWITCH برای تطبیق دقیق (2019 به بعد):
=SWITCH(D2, "تهران", "منطقه ۱", "اصفهان", "منطقه ۲", "کاشان", "منطقه ۲", "سایر")
SWITCH(TRUE, …) برای بازهها:
=SWITCH(TRUE, C2>=5E9, "طلایی", C2>=2E9, "نقرهای", "عادی")
منطق چندشرطی:
=IF(AND(C2>=2E9, E2="نقدی"), "تخفیف ویژه", "")
=IF(OR(D2="تهران", D2="کرج"), "پخش مرکزی", "پخش استانی")
اگر تعداد پلهها بیش از سهچهار تاست، بهجای IF یک جدول پورسانت کوچک بسازید و با XLOOKUP تقریبی (فصل ۴) جستوجو کنید. تغییر نرخها آنوقت فقط تغییر یک جدول است، نه ویرایش صدها فرمول.
منطق به زبان اعداد
TRUE در محاسبات برابر 1 و FALSE برابر 0 است. پس «ضرب» معادل AND و «جمع» (بزرگتر از صفر) معادل OR است. این ترفند پایهی SUMPRODUCT و FILTER است:
=(C2>=2E9)*(E2="نقدی") → 1 اگر هر دو شرط برقرار باشد
=((D2="تهران")+(D2="کرج"))>0 → TRUE اگر یکی برقرار باشد
IFERROR در برابر IFNA
| تابع | چه خطاهایی را میپوشاند | کِی |
|---|---|---|
| IFERROR(x, جایگزین) | همهی خطاها | فقط وقتی مطمئنید هر خطایی یعنی «نتیجه ندارد» |
| IFNA(x, جایگزین) | فقط #N/A | جستوجوها؛ خطاهای واقعی مثل #REF! پنهان نمیشوند |
IFERROR بیمحابا خطرناک است: اگر ستونی حذف شود و فرمول #REF! بدهد، IFERROR آن را به صفر یا خالی تبدیل میکند و گزارش بیصدا غلط میشود.
نکتههایی که کمتر کسی میداند
- AND و OR روی آرایه «سطر به سطر» کار نمیکنند:
AND(A2:A10>0)فقط یک TRUE/FALSE برای کل محدوده میدهد. در فرمولهای آرایهای بهجای آنها از * و + استفاده کنید. - سلولی که فرمولش "" برمیگرداند خالی به نظر میرسد اما
ISBLANKبرایش FALSE است؛ برای بررسی «خالینما» ازA2=""یاLEN(A2)=0استفاده کنید. - IF «تنبل» است: فقط شاخهی انتخابشده محاسبه میشود. برای جلوگیری از #DIV/0! بنویسید
=IF(B2=0, 0, A2/B2)؛ نیازی به IFERROR نیست. - IFS اگر هیچ شرطی برقرار نباشد #N/A میدهد؛ همیشه آخرین جفت را
TRUE, مقدار پیشفرضبگذارید. - عدد 5E9 همان پنج میلیارد است؛ نوشتن نمایی در فرمول، خطای شمردن صفرها را از بین میبرد.