معرفی تابع ERROR.TYPE
تابع ERROR.TYPE در اکسل برای تشخیص نوع خطا استفاده میشود. این تابع وقتی یک مقدار یا نتیجه فرمول «خطا» باشد، به شما یک کد عددی برمیگرداند که مشخص میکند خطا از چه نوعی است (مثل #DIV/0! یا #N/A و …). اگر ورودیِ تابع خطا نباشد، خود تابع #N/A برمیگرداند.
کاربرد اصلی ERROR.TYPE این است که بهجای اینکه فقط بفهمیم «خطا داریم»، دقیقاً تشخیص دهیم کدام خطا رخ داده و بعد با IF یا توابع دیگر، واکنش مناسب نشان دهیم (مثلاً پیام متفاوت، مقدار جایگزین، یا ثبت گزارش).
مثال ساده فارسی: فرض کنید در سلول A2 عدد 10 و در B2 عدد 0 است و در C2 تقسیم انجام دادهاید و خطای تقسیم بر صفر گرفتهاید. حالا با ERROR.TYPE میفهمیم نوع خطا چیست.
=ERROR.TYPE(C2)
اگر C2 خطای #DIV/0! باشد، خروجی این فرمول عدد 2 خواهد بود.
کاربردهای اصلی تابع ERROR.TYPE
- تشخیص دقیق نوع خطا برای نمایش پیام مناسب به کاربر
- ساخت گزارش کنترل کیفیت دادهها (Data Validation/Checking)
- تفکیک خطای #N/A از سایر خطاها (مخصوصاً در جستجوها مثل XLOOKUP/VLOOKUP)
- کمک به دیباگ کردن فایلهای پیچیده و پیدا کردن ریشه خطا
- خودکارسازی رفتارهای متفاوت برای خطاهای مختلف (مثلاً صفر کردن #DIV/0! ولی نگه داشتن سایر خطاها)
ساختار (Syntax)
=ERROR.TYPE(error_val)
=ERROR.TYPE(مقدار_خطا)
آرگومانها
error_val / مقدار_خطا
مقداری است که میخواهید بررسی کنید آیا خطا هست یا نه، و اگر خطاست از چه نوعی است. این مقدار میتواند:
- یک سلول (مثل C2)
- نتیجه یک فرمول (مثل A2/B2)
- یا خودِ یک مقدار خطا (اگر جایی تولید شده باشد)
مثالهای ساده و پایه
مثال 1: تشخیص خطای تقسیم بر صفر
فرض کنید:
- A2 = 10
- B2 = 0
- C2 فرمول تقسیم
=A2/B2
حالا در D2 نوع خطا را برگردانید:
=ERROR.TYPE(C2)
نتیجه: چون C2 خطای #DIV/0! است، خروجی D2 برابر 2 میشود.
مثال 2: اگر خطا نیست چه میشود؟
اگر C2 بهجای خطا، یک عدد معمولی باشد (مثلاً 5)، فرمول زیر:
=ERROR.TYPE(C2)
خروجیاش #N/A میشود، چون ERROR.TYPE فقط برای «کد خطاها» طراحی شده و وقتی خطا نباشد کد نمیدهد.
جدول کدهای رایج ERROR.TYPE
- 1 → #NULL!
- 2 → #DIV/0!
- 3 → #VALUE!
- 4 → #REF!
- 5 → #NAME?
- 6 → #NUM!
- 7 → #N/A
- 8 → #GETTING_DATA (در برخی سناریوهای اتصال داده)
مثالهای کاربردی و واقعی
مثال 1: پیام متفاوت برای #DIV/0! و سایر خطاها
فرض کنید نتیجه محاسبه در C2 است. میخواهیم اگر #DIV/0! بود بنویسیم «تقسیم بر صفر»، اگر خطای دیگری بود «خطای دیگر»، و اگر خطا نبود مقدار را نشان دهیم.
=IF(ISERROR(C2);IF(ERROR.TYPE(C2)=2;"تقسیم بر صفر";"خطای دیگر");C2)
مثال 2: ترکیب با XLOOKUP برای تشخیص «پیدا نشدن»
در جستجوها معمولاً خطای مهم #N/A است (یعنی پیدا نشد). این مثال کمک میکند تفاوت «پیدا نشدن» با خطاهای دیگر را جدا کنید.
=LET(r;XLOOKUP(E2;A:A;B:B);IF(ISERROR(r);IF(ERROR.TYPE(r)=7;"یافت نشد";"خطای غیرمنتظره");r))
اگر مقدار E2 در ستون A پیدا نشود، XLOOKUP خطای #N/A میدهد و ERROR.TYPE کد 7 برمیگرداند، پس خروجی «یافت نشد» میشود.
مثال 3: کنترل کیفیت داده با COUNTIF و تولید خطای هدفمند
فرض کنید در A2 کد کالا داریم و باید در لیست مجاز (ستون D) وجود داشته باشد. اگر وجود نداشت، عمداً #N/A تولید میکنیم و سپس با ERROR.TYPE گزارش میگیریم.
=IF(COUNTIF(D:D;A2)=0;NA();A2)
حالا برای تشخیص نوع خطا:
=ERROR.TYPE(IF(COUNTIF(D:D;A2)=0;NA();A2))
اگر کد نامعتبر باشد، خروجی 7 میشود (یعنی #N/A).
مثال 4: تصمیمگیری منطقی با AND/OR روی نوع خطا
گاهی میخواهید فقط بعضی خطاها را «قابل چشمپوشی» بدانید (مثلاً #N/A و #DIV/0!) و بقیه را جدی بگیرید.
=IF(ISERROR(C2);IF(OR(ERROR.TYPE(C2)=2;ERROR.TYPE(C2)=7);"قابل صرفنظر";"نیاز به بررسی");"بدون خطا")
ترکیب تابع ERROR.TYPE با فرمولهای دیگر
- با IF + ISERROR برای ساخت خروجیهای شرطی بر اساس نوع خطا
=IF(ISERROR(A2);IF(ERROR.TYPE(A2)=7;"یافت نشد";"خطا");A2)
- با XLOOKUP برای مدیریت بهتر خطای پیدا نشدن (#N/A) در گزارشها
=LET(v;XLOOKUP(E2;A:A;B:B);IF(ISERROR(v);ERROR.TYPE(v);0))
- با SUM در سناریوهایی که بعضی آیتمها ممکن است خطا بدهند و میخواهید نوع خطا را جداگانه رصد کنید
=SUM(IF(ISERROR(A2:A10);0;A2:A10))
- با OR/AND برای گروهبندی خطاها (مثلاً چند نوع خطای قابل قبول)
=IF(ISERROR(B2);IF(AND(ERROR.TYPE(B2)7;ERROR.TYPE(B2)2);"خطای مهم";"خطای قابل قبول");"OK")
- با COUNTIF برای تولید یا بررسی حالتهایی که میتواند به خطا ختم شود و سپس کدگذاری خطا
=IF(COUNTIF(A:A;E2)=0;ERROR.TYPE(NA());0)
خطاهای رایج و روش رفع آنها
در این بخش منظور از «خطا» هم میتواند خطاهای خود اکسل باشد، هم اشتباهات رایج در استفاده از ERROR.TYPE.
1) انتظار خروجی عددی وقتی سلول خطا نیست
مشکل: کاربر ERROR.TYPE را روی یک مقدار سالم اجرا میکند و خروجی #N/A میگیرد و فکر میکند تابع درست کار نمیکند.
راهحل: قبل از ERROR.TYPE بررسی کنید مقدار خطا هست یا نه.
=IF(ISERROR(A2);ERROR.TYPE(A2);"بدون خطا")
2) استفاده مستقیم از ERROR.TYPE روی فرمولی که ممکن است خطا ندهد
مشکل: مثلاً مینویسید ERROR.TYPE(A2/B2) و وقتی B2 صفر نیست، خروجی #N/A میشود.
راهحل: اگر هدف شما «تشخیص نوع خطا در صورت وقوع» است، آن را داخل IF/ISERROR کنترل کنید.
=LET(r;A2/B2;IF(ISERROR(r);ERROR.TYPE(r);0))
3) اشتباه گرفتن ERROR.TYPE با ISERROR یا IFERROR
مشکل: بعضیها فکر میکنند ERROR.TYPE خودش خطا را مدیریت یا حذف میکند.
راهحل: ERROR.TYPE فقط «نوع خطا» را کدگذاری میکند. برای مدیریت خطا از IFERROR/IFNA استفاده کنید.
=IFERROR(A2/B2;0)
4) مشکل جداکننده آرگومانها (، یا 😉
مشکل: در اکسل فارسی معمولاً جداکننده ; است، اما کاربر با کاما مینویسد و خطای فرمول میگیرد.
راهحل: جداکننده را مطابق تنظیمات منطقهای اکسل خود تنظیم کنید. (در این مقاله فرمولهای فارسی با ; نوشته شدهاند.)
نکات حرفهای و ترفندهای مهم
- برای خوانایی، نتیجه را یکبار محاسبه کنید (LET): اگر قرار است چند بار ERROR.TYPE را روی یک نتیجه بررسی کنید، با LET محاسبه را یکبار انجام دهید.
=LET(r;C2;IF(ISERROR(r);IF(ERROR.TYPE(r)=7;"N/A";"خطا");r))
- بهجای حدس، خطاها را دستهبندی کنید: مثلاً #N/A (کد 7) اغلب «پیدا نشدن» است و ممکن است طبیعی باشد، اما #REF! (کد 4) معمولاً مشکل جدی در ارجاعهاست.
- برای مدیریت سادهتر خطاها از IFNA/IFERROR استفاده کنید: اگر فقط میخواهید خروجی جایگزین بدهید، معمولاً IFERROR یا IFNA کافی است و لازم نیست ERROR.TYPE استفاده کنید.
=IFNA(XLOOKUP(E2;A:A;B:B);"یافت نشد")
- ERROR.TYPE مناسب گزارشگیری است، نه پنهانکاری: اگر میخواهید مشکلات فایل را پیدا کنید، کد خطاها را در ستون جدا ثبت کنید تا سریع ریشهیابی شود.
تفاوت تابع ERROR.TYPE با توابع مشابه
- ERROR.TYPE vs ISERROR: ISERROR فقط میگوید «خطا هست/نیست» (TRUE/FALSE)، اما ERROR.TYPE نوع خطا را با کد عددی مشخص میکند.
- ERROR.TYPE vs IFERROR: IFERROR خطا را مدیریت میکند و مقدار جایگزین میدهد؛ ERROR.TYPE خطا را مدیریت نمیکند، فقط نوعش را مشخص میکند.
- ERROR.TYPE vs IFNA: IFNA فقط #N/A را پوشش میدهد؛ ERROR.TYPE میتواند همه خطاهای رایج را کدگذاری کند (از جمله #N/A).
- ERROR.TYPE vs ISNA: ISNA فقط خطای #N/A را تشخیص میدهد؛ ERROR.TYPE علاوه بر #N/A، سایر خطاها را هم تفکیک میکند.
سازگاری با نسخههای مختلف اکسل
تابع ERROR.TYPE از توابع قدیمی و پرکاربرد اکسل است و در اغلب نسخهها وجود دارد، از جمله:
- Excel 2007، 2010، 2013، 2016، 2019
- Excel 2021
- Microsoft 365 (Excel for Microsoft 365)
نکته: تفاوت اصلی بین نسخهها معمولاً در توابع مکمل (مثل LET یا XLOOKUP) است، نه خود ERROR.TYPE. اگر نسخه شما LET/XLOOKUP ندارد، میتوانید مثالها را با روشهای قدیمیتر (مثل VLOOKUP) جایگزین کنید.
سؤالات پرتکرار درباره تابع ERROR.TYPE
ERROR.TYPE دقیقاً چه چیزی برمیگرداند؟
اگر ورودی خطا باشد، یک عدد (کد نوع خطا) برمیگرداند. اگر خطا نباشد، #N/A برمیگرداند.
چطور فقط خطای #N/A را از بقیه جدا کنم؟
کد #N/A برابر 7 است. پس نوع خطا را 7 بررسی کنید.
=IF(ISERROR(A2);IF(ERROR.TYPE(A2)=7;"N/A";"سایر خطاها");"بدون خطا")
آیا ERROR.TYPE میتواند متن خطا را به متن فارسی تبدیل کند؟
خودش نه؛ فقط کد میدهد. اما شما میتوانید با IF یا SWITCH بر اساس کد، متن دلخواه برگردانید.
بهترین جایگزین برای وقتی فقط میخواهم خطا نمایش داده نشود چیست؟
معمولاً IFERROR یا IFNA سادهتر و تمیزتر است.
جمعبندی و پیشنهاد یادگیری بعدی
تابع ERROR.TYPE وقتی ارزشمند میشود که بخواهید خطاها را دقیق دستهبندی کنید: بفهمید مشکل از تقسیم بر صفر است یا ارجاع شکسته، یا داده نامعتبر، یا «پیدا نشدن» در جستجو. این تابع بهخصوص برای عیبیابی و گزارشگیری در فایلهای واقعی بسیار مفید است.
پیشنهاد برای یادگیری بعدی: برای تکمیل کار با خطاها، توابع IFERROR، IFNA، ISERROR، ISNA و همچنین XLOOKUP (و در نسخههای جدید LET) را یاد بگیرید تا هم خطاها را بهتر مدیریت کنید و هم فرمولهای خواناتر و حرفهایتر بسازید.
