اکسل تعدادی توابع را ارائه می دهد که بسته به محتوای یک سلول، True یا False را برمی گرداند. برای مثال، ISBLANK اگر یک سلول خالی باشد، True را برمیگرداند، اگر سلولی حاوی مقدار خطا باشد، ISERR True را برمیگرداند، و اگر سلول حاوی متن باشد، ISTEXT True را برمیگرداند. ممکن است تعجب کنید که آیا می توان تعیین کرد که یک سلول دارای زمان است یا خیر.
پاسخ کوتاه این است که نه، شما نمی توانید—اکسل هیچ تابعی ندارد که نشان دهد سلول دارای زمان است یا خیر. دلیل آن بسیار ساده است: زمان ها و تاریخ ها در اکسل از نظر فنی چیزی جز اعداد نیستند. تاریخ به هر عددی در محدوده 1 تا 2958465 گفته میشود که تاریخهای 1/1/1900 تا 12/31/9999 را نشان میدهد. اگر یک بخش اعشاری به عدد اضافه کنید، آن زمان نشان دهنده یک زمان است (0 نیمه شب، 0.25 ساعت 6:00 صبح، 0.5 ظهر و غیره است).
با دانستن محدوده مقادیری که میتوان برای تاریخها و زمانها استفاده کرد، همراه با این واقعیت که یک سلول حاوی زمان باید به درستی قالببندی شود تا زمان نمایش داده شود، میتوانید فرمولی ایجاد کنید که نشان دهد سلول دارای زمان است یا خیر:
=IF(AND(CELL("format",B2)>="D6",CELL("format",B2)
این فرمول قالب بندی اعمال شده در سلول B2 را بررسی می کند. اگر قالببندی یکی از فرمتهای رایج مورد استفاده برای زمانها باشد، متن "Time Format" را برمیگرداند. اگر قالببندی متفاوتی استفاده شود، فرمول «فرمت زمان نیست» را برمیگرداند.
یک رویکرد متفاوت این است که بررسی کنید آیا مقدار در سلول B2 یک مقدار زمانی معتبر است یا خیر. می توانید با استفاده از فرمولی مانند زیر این کار را انجام دهید:
=IF(TIMEVALUE(TEXT(B2,"hh:mm:ss"))=B2, "Time Entry", "Not a Time Entry")
تا زمانی که سلول B2 فقط یک زمان داشته باشد، عملکرد خوب کار می کند. اگر سلول دارای تاریخ و زمان باشد، تابع همیشه "Not a Time Entry" را برمی گرداند.
برای به دست آوردن بهترین هر دو جهان - بررسی فرمت ها و مقدار موجود در سلول - ایجاد یک تابع تعریف شده توسط کاربر در VBA را در نظر بگیرید. دلیل آن ساده است: VBA شامل تابع IsDate است که نه تنها به محدوده فعلی عدد نگاه می کند، بلکه بررسی می کند که سلول به عنوان یک تاریخ قالب بندی شده است. ماکرو زیر مثالی از نحوه ایجاد چنین تابعی ارائه می دهد:
Function IsTime(rng As Range) As Boolean
Dim sValue As String
sValue = rng.Cells(1).Text
On Error Resume Next
IsTime = IsDate(TimeValue(sValue))
On Error GoTo 0
End Function
برای استفاده از تابع، از فرمول زیر در یک سلول استفاده کنید:
=IsTime(B2)
تابع نحوه نمایش مقدار را می خواند (با استفاده از ویژگی متن شی سلول) و سپس سعی می کند آن را با تابع TIMEVALUE تبدیل کند. اگر این یک تاریخ باشد (تعیین شده توسط تابع IsDate)، نمایش یک زمان معتبر است. اگر تاریخ نباشد، VBA خطایی ایجاد می کند که کد برنامه ریزی شده است تا نادیده بگیرد.