گراهام از فرمولی استفاده می کند که به دو سلول B1 و C1 اشاره می کند. تمام کاری که فرمول انجام می دهد این است که مقدار یکی از سلول ها را بازگرداند، مانند =IF(A1=1,IF(B1>C1,B1,C1)). هر دو B1 و C1 معمولاً حاوی تاریخ هستند، اما گاهی اوقات ممکن است هر دو یا هر دو خالی باشند. اگر هر دو خالی باشند، مقدار برگشتی (که 0 است زیرا خالی هستند) به صورت 1/0/1900 نشان داده می شود. وقتی هر دو سلول خالی هستند، گراهام دوست دارد فرمول یک مقدار خالی برگرداند، نه 0.
راه های مختلفی وجود دارد که می توان به این نیاز نزدیک شد. با این حال، ابتدا اجازه دهید با فرمول مثال گراهامز شروع کنیم:
=IF(A1=1, IF(B1>C1, B1, C1))
فرمول کمی "ناقص" است، زیرا اگر A1 حاوی مقدار 1 نباشد چه چیزی باید برگردانده شود. همانطور که نوشته شده است، اگر A1 حاوی 2 (یا هر مقدار دیگری به جز 1) باشد، فرمول "FALSE" را برمی گرداند. بنابراین، اجازه دهید فرمول را کمی تغییر دهیم تا اگر A1 1 نیست، مقدار "خالی" را برگرداند، مانند این:
=IF(A1=1, IF(B1>C1, B1, C1), "")
در مرحله بعد، درک آنچه در مقایسه "B1>C1" اتفاق می افتد بسیار مهم است. البته تاریخ ها در داخل به عنوان مقادیر عددی - به عنوان شماره سریال - ذخیره می شوند. اگر B1 حاوی تاریخی است که جدیدتر از C1 است، آنگاه شماره سریال در B1 بزرگتر از شماره سریال در C1 خواهد بود. فراتر از این، ویژگی های داده ها در B1 و C1 نحوه عملکرد مقایسه (>) را تعیین می کند.
- اگر هر دو سلول حاوی مقادیر عددی (از جمله تاریخ) باشند، مقایسه همانطور که انتظار می رود کار می کند.
- اگر هر یک از سلول ها حاوی یک مقدار متن باشد، با هر دو سلول به گونه ای رفتار می شود که گویی حاوی مقادیر متنی هستند، حتی اگر یکی از آنها حاوی مقدار عددی باشد.
- اگر یکی از سلول ها خالی باشد، با آن سلول به گونه ای رفتار می شود که گویی حاوی مقدار 0 است.
بر این اساس، اگر یک سلول حاوی تاریخ و دیگری خالی باشد، معادل مقایسه یک شماره سریال (تاریخ) با 0 (سلول خالی) است، بنابراین شماره سریال همیشه بزرگتر از سلول خالی خواهد بود. اگر هر دو سلول خالی باشند، هر دو دارای 0 هستند و بنابراین هر دو برابر هستند.
بنابراین، اجازه دهید بگوییم که در فرمول گراهامز، سلول A1 حاوی مقدار 1، سلول B1 خالی و سلول C1 خالی است. این فرمول توسط اکسل "ترجمه" می شود:
=IF(A1=1, IF(B1>C1, B1, C1), "")
=IF(1=1, IF(B1>C1, B1, C1), "")
=IF(B1>C1, B1, C1)
=IF(0>0, B1, C1)
=C1
=0
به همین دلیل است که گراهام 0 را می بیند که با فرمول برگردانده می شود، و وقتی 0 به عنوان شماره سریال تاریخ در نظر گرفته می شود، به صورت 1/0/00 (یا 1/0/1900) نمایش داده می شود.
برای جلوگیری از این امر، باید بررسی کنید که آیا هر دو B1 و C1 خالی هستند. راه های مختلفی وجود دارد که می توان این کار را انجام داد. این تغییر در فرمول او را در نظر بگیرید:
=IF(A1=1, IF((B1+C1=0), "", IF(B1>C1, B1, C1)), "")
این تغییر یک عبارت IF را اضافه می کند تا ببیند آیا B1 اضافه شده به C1 برابر با 0 است یا خیر، اگر هر دوی آنها خالی باشند، این چنین خواهد بود زیرا اکسل در این زمینه جاهای خالی و 0 را معادل در نظر می گیرد. اشکال این است که اگر B1 یا C1 حاوی یک مقدار متن باشد، خطای #VALUE توسط فرمول برگردانده می شود.
یک تغییر بهتر ممکن است موارد زیر باشد:
=IF(A1=1, IF(AND(B1=0,C1=0), "", IF(B1>C1, B1, C1)), "")
در این تجسم، دستور IF از تابع AND برای تعیین اینکه آیا B1 و C1 هر دو 0 هستند یا خیر استفاده می کند.
اگر واقعاً میخواهید بررسی کنید که آیا هر دو B1 و C1 خالی هستند، باید به رویکرد دیگری تکیه کنید. یکی از راه ها استفاده از تابع COUNTA است:
=IF(A1=1, IF(COUNTA(B1:C1)=0, "", IF(B1>C1, B1, C1)), "")
اگر به درستی می دانید که هر دو B1 و C1 هرگز حاوی مقادیر متنی همزمان نیستند، می توانید از تابع COUNT به جای تابع COUNTA در فرمول فوق استفاده کنید.
روش دیگر استفاده از تابع COUNTBLANK به همان شیوه است. تعداد سلولهای خالی در یک محدوده را برمیگرداند:
=IF(A1=1, IF(COUNTBLANK(B1:C1)=2, "", IF(B1>C1, B1, C1)), "")
یک تغییر مشابه استفاده از تابع ISBLANK (که اگر یک سلول خالی باشد، TRUE را برمی گرداند) همراه با تابع AND است:
=IF(A1=1, IF(AND(ISBLANK(B1), ISBLANK(C1)), "", IF(B1>C1, B1, C1)), "")
همچنین میتوانید اکسل B1 و C1 را طوری ارزیابی کند که گویی حاوی متن هستند، همانطور که در اینجا انجام میشود:
=IF(A1=1, IF(B1&C1="", "", IF(B1>C1, B1, C1)), "")
اگر B1 یا C1 حاوی یک فضای واحد باشد، این فرمول آنطور که انتظار می رود کار نمی کند، بنابراین ممکن است بخواهید تابع TRIM را به ترکیب اضافه کنید:
=IF(A1=1, IF(TRIM(B1&C1)="", "", IF(B1>C1, B1, C1)), "")
در هر یک از فرمولهایی که تاکنون بحث شد، ممکن است بخواهید عبارت IF را که B1 یا C1 را با تابع MAX برمیگرداند، به این صورت تغییر دهید:
=IF(A1=1, IF(TRIM(B1&C1)="", "", MAX(B1:C1)), "")
اگر تصمیم به انجام این کار دارید، یک هشدار وجود دارد: تابع MAX همه مقادیر متن را معادل 0 در نظر می گیرد. بنابراین، اگر سلول B1 حاوی "abc" و سلول C1 حاوی 1 باشد، از عملگر بزرگتر از مقایسه استفاده کنید (> ) "abc" را بزرگتر از 1 در نظر می گیرد، اما MAX 1 را بزرگتر از "abc" در نظر می گیرد.
همچنین راهی وجود دارد که می توانید به عقب برگردید و از فرمول اصلی گراهامز (فرمولی که دو سلول خالی را بررسی نمی کند) استفاده کنید و به سادگی بر قالب بندی سلول حاوی فرمول تکیه کنید. فقط یک قالب سفارشی مانند زیر ایجاد کنید:
m/d/yyyy;;
به دو نقطه ویرگول در انتهای قالب توجه کنید. اینها به اکسل میگویند که اگر مقدار سلول منفی یا صفر باشد، چیزی را نمایش ندهد. با استفاده از این فرمت، هرگز تاریخ 1/0/1900 ظاهر نمی شود. سلول خالی نشان داده می شود.
البته میتوانید اکسل را طوری تغییر دهید که تمام مقادیر صفر را در کاربرگ پنهان کند - همانطور که در سایر نکات Excel توضیح داده شده است - اما اگر نیاز به نمایش صفر نتایج از فرمولهای دیگر دارید، انجام این کار ممکن است با اهداف شما مطابقت نداشته باشد.