معرفی تابع FINDB
تابع FINDB در اکسل برای پیدا کردن موقعیت شروع یک متن داخل متن دیگر استفاده میشود؛ اما تفاوت مهم آن با تابع FIND این است که FINDB موقعیت را بر اساس تعداد بایتها برمیگرداند، نه صرفاً تعداد کاراکترها. این موضوع بیشتر در زبانهایی که از کاراکترهای دوبایتی یا DBCS استفاده میکنند، مثل ژاپنی، چینی و کرهای اهمیت دارد.
در بسیاری از فایلهای فارسی و انگلیسی، نتیجه FINDB معمولاً شبیه FIND است؛ اما اگر با دادههای چندزبانه، متون آسیای شرقی یا فایلهای واردشده از سیستمهای قدیمی کار میکنید، FINDB میتواند کاربردی باشد.
تابع FINDB به حروف بزرگ و کوچک حساس است. یعنی اگر به دنبال حرف A باشید، حرف a را پیدا نمیکند. همچنین FINDB از wildcardها مثل * و ? پشتیبانی نمیکند.
مثال ساده: فرض کنید در سلول A2 متن زیر قرار دارد:
کد محصول: PRD-1403
اگر بخواهیم جایگاه عبارت PRD را در متن پیدا کنیم، از فرمول زیر استفاده میکنیم:
=FINDB("PRD",A2)نتیجه این فرمول عددی است که نشان میدهد عبارت PRD از کدام موقعیت در متن شروع شده است.
کاربردهای اصلی تابع FINDB
- پیدا کردن موقعیت یک حرف، کلمه یا عبارت در یک متن
- استخراج بخشی از متن با کمک توابعی مثل LEFT، RIGHT و MID
- تشخیص وجود یک عبارت خاص در متن
- کار با کدهای محصول، شماره فاکتور، شناسه سفارش و دادههای ساختاریافته
- جداسازی بخشهای مختلف متن بر اساس جداکنندههایی مثل خط تیره، اسلش، فاصله یا دو نقطه
- تحلیل دادههای متنی چندزبانه، مخصوصاً متنهای دارای کاراکترهای دوبایتی
- ساخت فرمولهای شرطی با IF، ISNUMBER و IFERROR
- کنترل کیفیت دادهها و بررسی اینکه آیا متن طبق الگوی موردنظر نوشته شده است یا نه
ساختار (Syntax)
ساختار انگلیسی تابع FINDB به شکل زیر است:
=FINDB(find_text, within_text, [start_num])
ساختار فارسی و مفهومی تابع به شکل زیر است:
=FINDB(متن_مورد_جستجو; متن_اصلی; [شماره_شروع])
آرگومانها
find_text / متن مورد جستجو
این آرگومان متنی است که میخواهید موقعیت آن را در متن اصلی پیدا کنید. این مقدار میتواند مستقیماً داخل فرمول نوشته شود یا به یک سلول اشاره کند.
مثلاً اگر بخواهید جایگاه عبارت INV را در متن پیدا کنید، میتوانید آن را به شکل زیر بنویسید:
=FINDB("INV",A2)within_text / متن اصلی
این آرگومان متنی است که اکسل باید داخل آن جستجو کند. معمولاً این بخش به یک سلول اشاره میکند؛ مثلاً A2 یا B5.
=FINDB("-",A2)در این مثال، اکسل به دنبال خط تیره داخل متن سلول A2 میگردد.
start_num / شماره شروع جستجو
این آرگومان اختیاری است و مشخص میکند جستجو از کدام موقعیت شروع شود. اگر آن را وارد نکنید، اکسل جستجو را از ابتدای متن شروع میکند.
=FINDB("-",A2,5)در این مثال، اکسل از موقعیت پنجم به بعد به دنبال خط تیره میگردد. این روش زمانی کاربرد دارد که یک کاراکتر چند بار در متن تکرار شده باشد و بخواهید موقعیت مورد دوم یا سوم را پیدا کنید.
مثالهای ساده و پایه
مثال ۱: پیدا کردن موقعیت خط تیره در کد محصول
فرض کنید در سلول A2 مقدار زیر قرار دارد:
PRD-1403-25
برای پیدا کردن موقعیت اولین خط تیره، از فرمول زیر استفاده میکنیم:
=FINDB("-",A2)نتیجه برابر 4 است؛ چون خط تیره بعد از سه کاراکتر PRD قرار گرفته و در موقعیت چهارم شروع میشود.
مثال ۲: پیدا کردن موقعیت دومین خط تیره
اگر بخواهیم دومین خط تیره را در متن PRD-1403-25 پیدا کنیم، باید جستجو را بعد از خط تیره اول شروع کنیم.
=FINDB("-",A2,5)در این مثال، اکسل جستجو را از موقعیت پنجم شروع میکند و موقعیت خط تیره دوم را برمیگرداند.
مثال ۳: حساسیت به حروف بزرگ و کوچک
فرض کنید سلول A2 شامل متن زیر باشد:
Code-prd-1403
اگر فرمول زیر را بنویسید:
=FINDB("PRD",A2)اکسل خطای #VALUE! برمیگرداند، چون در متن اصلی عبارت prd با حروف کوچک نوشته شده، اما در فرمول به دنبال PRD با حروف بزرگ هستیم.
مثال ۴: پیدا کردن دو نقطه در یک متن فارسی
فرض کنید سلول A2 شامل متن زیر باشد:
نام مشتری: علی رضایی
برای پیدا کردن موقعیت دو نقطه از فرمول زیر استفاده میکنیم:
=FINDB(":",A2)نتیجه، موقعیت علامت دو نقطه را در متن نشان میدهد. سپس میتوانید با کمک این عدد، بخش بعد از دو نقطه را استخراج کنید.
مثالهای کاربردی و واقعی
مثال ۱: استخراج بخش قبل از خط تیره
فرض کنید در سلول A2 کد محصول به شکل زیر قرار دارد:
PRD-1403-25
میخواهیم بخش قبل از اولین خط تیره یعنی PRD را استخراج کنیم.
=LEFT(A2,FINDB("-",A2)-1)تابع FINDB موقعیت خط تیره را پیدا میکند و تابع LEFT همه کاراکترهای قبل از آن را برمیگرداند.
مثال ۲: استخراج سال از کد محصول
فرض کنید ساختار کد محصول به شکل PRD-1403-25 است و میخواهیم عدد 1403 را استخراج کنیم.
=MID(A2,FINDB("-",A2)+1,4)در این فرمول، FINDB موقعیت اولین خط تیره را پیدا میکند. سپس تابع MID از یک موقعیت بعد از خط تیره، 4 کاراکتر را استخراج میکند.
مثال ۳: بررسی وجود عبارت خاص با IF و ISNUMBER
اگر بخواهیم بررسی کنیم که آیا عبارت PRD داخل متن سلول A2 وجود دارد یا نه، میتوانیم از ترکیب FINDB، ISNUMBER و IF استفاده کنیم.
=IF(ISNUMBER(FINDB("PRD",A2)),"وجود دارد","وجود ندارد")اگر FINDB عبارت PRD را پیدا کند، یک عدد برمیگرداند. تابع ISNUMBER بررسی میکند که نتیجه عددی است یا نه و IF پیام مناسب را نمایش میدهد.
نکته مهم: اگر عبارت پیدا نشود، FINDB خطای #VALUE! میدهد. بنابراین در عمل بهتر است از IFERROR هم استفاده کنید.
=IFERROR(IF(ISNUMBER(FINDB("PRD",A2)),"وجود دارد","وجود ندارد"),"وجود ندارد")مثال ۴: ترکیب FINDB با COUNTIF برای شمارش سلولهای دارای یک الگو
تابع COUNTIF به طور مستقیم برای جستجوی متنی ساده بسیار مناسب است، اما اگر بخواهید جستجو حساس به حروف بزرگ و کوچک باشد، FINDB گزینه دقیقتری است. برای بررسی یک سلول میتوان از فرمول زیر استفاده کرد:
=IFERROR(ISNUMBER(FINDB("VIP",A2)),FALSE)اگر بخواهید در یک محدوده تعداد سلولهایی را بشمارید که عبارت VIP را دقیقاً با همین حروف دارند، در نسخههای جدید اکسل میتوانید از SUMPRODUCT استفاده کنید:
=SUMPRODUCT(--ISNUMBER(FINDB("VIP",A2:A20)))این فرمول تعداد سلولهایی را میشمارد که عبارت VIP را با رعایت بزرگی و کوچکی حروف در خود دارند.
مثال ۵: ترکیب FINDB با AND برای کنترل ساختار کد
فرض کنید کدهای معتبر باید هم شامل عبارت PRD باشند و هم خط تیره داشته باشند. میتوانیم فرمول زیر را بنویسیم:
=IF(AND(ISNUMBER(FINDB("PRD",A2)),ISNUMBER(FINDB("-",A2))),"کد معتبر","کد نامعتبر")اگر هر دو شرط برقرار باشد، نتیجه کد معتبر خواهد بود. البته برای جلوگیری از خطا بهتر است از IFERROR استفاده کنیم:
=IFERROR(IF(AND(ISNUMBER(FINDB("PRD",A2)),ISNUMBER(FINDB("-",A2))),"کد معتبر","کد نامعتبر"),"کد نامعتبر")مثال ۶: ترکیب FINDB با OR برای تشخیص چند نوع کد
فرض کنید کد سفارش ممکن است با PRD یا SRV مشخص شده باشد. برای بررسی اینکه متن شامل یکی از این دو عبارت است، از فرمول زیر استفاده میکنیم:
=IF(OR(ISNUMBER(FINDB("PRD",A2)),ISNUMBER(FINDB("SRV",A2))),"شناختهشده","نامشخص")برای مدیریت خطاها، نسخه مطمئنتر فرمول به شکل زیر است:
=IF(OR(IFERROR(ISNUMBER(FINDB("PRD",A2)),FALSE),IFERROR(ISNUMBER(FINDB("SRV",A2)),FALSE)),"شناختهشده","نامشخص")مثال ۷: ترکیب FINDB با XLOOKUP برای جستجوی دسته محصول
فرض کنید در سلول A2 کد محصول قرار دارد و در جدول E2:F5 کدهای اولیه و نام دسته محصول وجود دارد. ابتدا بخش قبل از خط تیره را استخراج میکنیم و سپس با XLOOKUP نام دسته را پیدا میکنیم.
=XLOOKUP(LEFT(A2,FINDB("-",A2)-1),E2:E5,F2:F5,"یافت نشد")مثلاً اگر A2 برابر PRD-1403-25 باشد، ابتدا PRD استخراج میشود و سپس در محدوده E2:E5 جستجو میگردد.
ترکیب تابع FINDB با فرمولهای دیگر
- ترکیب با LEFT برای استخراج متن قبل از یک جداکننده
=LEFT(A2,FINDB("-",A2)-1)- ترکیب با MID برای استخراج متن از وسط رشته
=MID(A2,FINDB("-",A2)+1,4)- ترکیب با RIGHT و LEN برای استخراج متن بعد از جداکننده
=RIGHT(A2,LEN(A2)-FINDB("-",A2))- ترکیب با IFERROR برای جلوگیری از نمایش خطا
=IFERROR(FINDB("-",A2),"پیدا نشد")- ترکیب با IF برای ساخت شرط متنی
=IF(IFERROR(FINDB("VIP",A2),0)>0,"مشتری ویژه","عادی")- ترکیب با ISNUMBER برای بررسی وجود متن
=ISNUMBER(FINDB("VIP",A2))- ترکیب با SUMPRODUCT برای شمارش سلولهای دارای متن مشخص با حساسیت به حروف بزرگ و کوچک
=SUMPRODUCT(--ISNUMBER(FINDB("VIP",A2:A100)))- ترکیب با XLOOKUP برای جستجو بر اساس بخشی از متن
=XLOOKUP(LEFT(A2,FINDB("-",A2)-1),E2:E10,F2:F10,"یافت نشد")خطاهای رایج و روش رفع آنها
۱. خطای #VALUE! به دلیل پیدا نشدن متن مورد جستجو
اگر FINDB نتواند find_text را داخل within_text پیدا کند، خطای #VALUE! نمایش میدهد.
روش رفع: از IFERROR استفاده کنید تا به جای خطا، پیام مناسب نمایش داده شود.
=IFERROR(FINDB("PRD",A2),"پیدا نشد")۲. خطای #VALUE! به دلیل اشتباه بودن start_num
اگر آرگومان start_num کمتر از 1 باشد یا از طول متن بیشتر باشد، اکسل خطای #VALUE! میدهد.
روش رفع: مطمئن شوید مقدار start_num عددی معتبر و بزرگتر یا مساوی 1 است.
=FINDB("-",A2,1)۳. نتیجه اشتباه به دلیل حساسیت به حروف بزرگ و کوچک
تابع FINDB به حروف بزرگ و کوچک حساس است. بنابراین PRD و prd برای این تابع متفاوت هستند.
روش رفع: اگر نمیخواهید جستجو به بزرگی و کوچکی حروف حساس باشد، بهتر است از SEARCHB یا SEARCH استفاده کنید.
=SEARCH("PRD",A2)۴. استفاده از wildcard در FINDB
تابع FINDB از کاراکترهای wildcard مثل * و ? پشتیبانی نمیکند. اگر در find_text از این علامتها استفاده کنید، اکسل آنها را به عنوان کاراکتر واقعی در نظر میگیرد.
روش رفع: اگر به جستجوی الگویی نیاز دارید، بسته به سناریو از SEARCH، FILTER، COUNTIF یا ابزارهای پیشرفتهتر استفاده کنید.
=COUNTIF(A2:A20,"*VIP*")
۵. اشتباه گرفتن FINDB با FIND
در بسیاری از فایلهای فارسی و انگلیسی، FINDB و FIND ممکن است نتیجه مشابهی بدهند. اما در متنهای دارای کاراکترهای دوبایتی، FINDB بر اساس بایت محاسبه میکند و نتیجه میتواند متفاوت باشد.
روش رفع: اگر با متن معمولی فارسی یا انگلیسی کار میکنید، معمولاً FIND یا SEARCH کافی است. اگر با دادههای DBCS کار دارید، FINDB را بررسی کنید.
۶. خطا هنگام ترکیب با LEFT یا MID
اگر FINDB خطا بدهد، توابعی مثل LEFT و MID هم خطا خواهند داد، چون به عدد موقعیت وابسته هستند.
روش رفع: فرمول را با IFERROR ایمن کنید.
=IFERROR(LEFT(A2,FINDB("-",A2)-1),"جداکننده پیدا نشد")نکات حرفهای و ترفندهای مهم
- اگر فقط میخواهید موقعیت یک متن را پیدا کنید و داده شما فارسی یا انگلیسی معمولی است، تابع FIND معمولاً انتخاب سادهتری است.
- اگر جستجو نباید به حروف بزرگ و کوچک حساس باشد، از SEARCH یا SEARCHB استفاده کنید.
- برای جلوگیری از خطاهای آزاردهنده، FINDB را معمولاً همراه با IFERROR استفاده کنید.
- اگر قرار است متن قبل یا بعد از یک جداکننده را استخراج کنید، ابتدا مطمئن شوید جداکننده در متن وجود دارد.
- در نسخههای جدید Excel 365، برای استخراج متن میتوانید توابع جدیدتری مثل TEXTBEFORE و TEXTAFTER را هم بررسی کنید.
- برای خوانایی بهتر، فرمولهای طولانی را به چند بخش منطقی تقسیم کنید یا از LET استفاده کنید.
- اگر با دادههای واردشده از سیستمهای مختلف کار میکنید، فاصلههای اضافی را با TRIM حذف کنید.
- اگر متنها ممکن است شامل فاصلههای نامرئی یا کاراکترهای خاص باشند، از CLEAN و TRIM در کنار فرمولهای متنی استفاده کنید.
- در گزارشهای حرفهای، بهتر است به جای نمایش خطا، پیامهایی مثل پیدا نشد یا ساختار نامعتبر نمایش دهید.
مثال حرفهای با LET برای خوانایی بیشتر
در نسخههای جدید اکسل، میتوانید با LET فرمول را خواناتر کنید. فرض کنید میخواهید بخش قبل از خط تیره را استخراج کنید.
=LET(txt,A2,pos,FINDB("-",txt),LEFT(txt,pos-1))در این فرمول، txt همان متن اصلی و pos موقعیت خط تیره است. این روش مخصوصاً در فرمولهای طولانی باعث کاهش خطا و افزایش خوانایی میشود.
جایگزین مدرن با TEXTBEFORE
اگر از Excel 365 یا نسخههای جدیدتر استفاده میکنید، برای استخراج متن قبل از خط تیره میتوانید از TEXTBEFORE استفاده کنید.
=TEXTBEFORE(A2,"-")
این فرمول سادهتر از ترکیب LEFT و FINDB است، اما در همه نسخههای قدیمی اکسل در دسترس نیست.
تفاوت تابع FINDB با توابع مشابه
تفاوت FINDB با FIND
هر دو تابع برای پیدا کردن موقعیت یک متن داخل متن دیگر استفاده میشوند و هر دو به حروف بزرگ و کوچک حساس هستند. تفاوت اصلی این است که FIND موقعیت را بر اساس کاراکتر محاسبه میکند، اما FINDB بر اساس بایت محاسبه میکند.
=FIND("A",A2)=FINDB("A",A2)در متنهای معمولی انگلیسی و فارسی ممکن است نتیجه این دو یکسان باشد، اما در زبانهای دارای کاراکترهای دوبایتی ممکن است تفاوت ایجاد شود.
تفاوت FINDB با SEARCHB
هر دو تابع نسخه بایتی هستند، اما FINDB به حروف بزرگ و کوچک حساس است، در حالی که SEARCHB به بزرگی و کوچکی حروف حساس نیست. همچنین SEARCHB از wildcardها پشتیبانی میکند.
=FINDB("VIP",A2)=SEARCHB("VIP",A2)تفاوت FINDB با SEARCH
SEARCH موقعیت را بر اساس کاراکتر برمیگرداند، به حروف بزرگ و کوچک حساس نیست و از wildcard پشتیبانی میکند. FINDB موقعیت را بر اساس بایت برمیگرداند، به حروف بزرگ و کوچک حساس است و wildcard ندارد.
=SEARCH("vip",A2)=FINDB("vip",A2)تفاوت FINDB با TEXTBEFORE و TEXTAFTER
FINDB فقط موقعیت متن را برمیگرداند، اما TEXTBEFORE و TEXTAFTER مستقیماً متن قبل یا بعد از یک جداکننده را استخراج میکنند. البته TEXTBEFORE و TEXTAFTER در نسخههای جدید اکسل موجود هستند.
=TEXTBEFORE(A2,"-")
=TEXTAFTER(A2,"-")
تفاوت FINDB با MIDB، LEFTB و RIGHTB
FINDB موقعیت بایتی یک متن را پیدا میکند، اما MIDB، LEFTB و RIGHTB برای استخراج متن بر اساس تعداد بایتها استفاده میشوند. این توابع بیشتر در سناریوهای مرتبط با زبانهای DBCS کاربرد دارند.
=MIDB(A2,1,4)
=LEFTB(A2,6)
=RIGHTB(A2,4)
سازگاری با نسخههای مختلف اکسل
تابع FINDB در نسخههای مختلف اکسل پشتیبانی میشود و بیشتر برای سازگاری با زبانهای دوبایتی و فایلهای قدیمیتر کاربرد دارد.
- Excel 2007 و نسخههای بعدی: پشتیبانی میشود.
- Excel 2010، 2013، 2016، 2019 و 2021: پشتیبانی میشود.
- Microsoft 365: پشتیبانی میشود.
- Excel for Mac: در نسخههای جدید پشتیبانی میشود.
- Excel Online: معمولاً پشتیبانی میشود، اما رفتار تابع وابسته به تنظیمات و نوع دادهها میتواند بررسی شود.
نکته مهم: توابع دارای پسوند B مثل FINDB، LEFTB، RIGHTB و MIDB بیشتر در زبانهایی که از مجموعه کاراکترهای دوبایتی استفاده میکنند معنا پیدا میکنند. برای فایلهای فارسی و انگلیسی معمولی، در بسیاری از موارد استفاده از FIND، LEFT، RIGHT و MID سادهتر و خواناتر است.
سؤالات پرتکرار درباره تابع FINDB
تابع FINDB چه کاری انجام میدهد؟
موقعیت شروع یک متن را داخل متن دیگر پیدا میکند و نتیجه را بر اساس تعداد بایتها برمیگرداند.
آیا FINDB به حروف بزرگ و کوچک حساس است؟
بله. برای FINDB عبارت VIP با vip متفاوت است.
اگر متن موردنظر پیدا نشود چه اتفاقی میافتد؟
تابع FINDB خطای #VALUE! برمیگرداند. برای کنترل این خطا بهتر است از IFERROR استفاده کنید.
=IFERROR(FINDB("VIP",A2),"پیدا نشد")آیا FINDB از wildcard پشتیبانی میکند؟
خیر. علامتهایی مثل * و ? در FINDB به عنوان کاراکتر واقعی در نظر گرفته میشوند.
برای جستجوی غیرحساس به حروف بزرگ و کوچک از چه تابعی استفاده کنم؟
از SEARCH یا SEARCHB استفاده کنید.
=SEARCH("vip",A2)آیا FINDB برای زبان فارسی لازم است؟
در بیشتر سناریوهای فارسی، تابع FIND یا SEARCH کافی است. FINDB بیشتر زمانی اهمیت دارد که با دادههای دوبایتی مثل ژاپنی، چینی یا کرهای کار کنید یا فایل شما از سیستمهای قدیمی وارد شده باشد.
تفاوت FINDB و FIND در یک جمله چیست؟
FIND بر اساس کاراکتر موقعیت را برمیگرداند، اما FINDB بر اساس بایت.
چطور متن قبل از یک جداکننده را با FINDB استخراج کنم؟
=LEFT(A2,FINDB("-",A2)-1)چطور متن بعد از یک جداکننده را با FINDB استخراج کنم؟
=RIGHT(A2,LEN(A2)-FINDB("-",A2))آیا میتوان FINDB را با XLOOKUP ترکیب کرد؟
بله. مثلاً میتوانید بخشی از کد را با FINDB استخراج کنید و سپس همان بخش را با XLOOKUP در جدول مرجع جستجو کنید.
=XLOOKUP(LEFT(A2,FINDB("-",A2)-1),E2:E10,F2:F10,"یافت نشد")جمعبندی و پیشنهاد یادگیری بعدی
تابع FINDB یکی از توابع متنی اکسل است که برای پیدا کردن موقعیت یک متن داخل متن دیگر استفاده میشود. تفاوت اصلی آن با FIND این است که FINDB موقعیت را بر اساس بایت محاسبه میکند و به همین دلیل بیشتر در کار با زبانهای دوبایتی یا دادههای چندزبانه اهمیت دارد.
برای کاربران مبتدی و متوسط، مهمترین کاربرد FINDB در ترکیب با توابعی مثل LEFT، MID، RIGHT، IF، IFERROR، ISNUMBER و XLOOKUP است. با این ترکیبها میتوانید بخشهای مختلف کد محصول، شماره فاکتور، شناسه سفارش یا اطلاعات متنی را استخراج و تحلیل کنید.
اگر با دادههای فارسی و انگلیسی معمولی کار میکنید، پیشنهاد میشود در کنار FINDB، توابع FIND و SEARCH را هم یاد بگیرید. همچنین اگر از نسخههای جدید اکسل استفاده میکنید، یادگیری توابع TEXTBEFORE، TEXTAFTER، TEXTSPLIT و LET میتواند کار شما را بسیار سادهتر و حرفهایتر کند.
