
سابقه بروزرسانی ها:
1400/07/20:
حل مسئله با استفاده از تابع TextJoin در اکسل ۲۰۱۹ به بالا
جدا کردن قسمتی از یک عبارت در یک سلول یکی از رایج ترین مسائل در اکسل هست. خیلی وقت ها اطلاعات از نرم افزارهای دیگه وارد اکسل میشن و برای همین همه اطلاعات به هم چسبیده و در یک سلول هستن. پس لازمه که که این اطلاعات از هم تفکیک بشن تا بشه ازشون استفاده لازم رو برد. جدا کردن عدد از متن جزو پرتکرارترین مسائل در این زمینه هست.
جدا کردن عدد از متن، بسته به اینکه داده ها چه الگویی داشته باشن، راه حل های خیلی متنوعی داره. یکی از این راه حل ها استفاده از توابع متنی است، یک راه حل هم استفاده از ابزار Text to Column هست.
همونطور که قبلا برای استفاده از ابزار و تابع Find گفتیم، رمز پیدا کردن اطلاعات مورد نظر در یک سلول یا یک محدوده، پیدا کردن یک الگوی منطقی بین اکثریت داده هاست. این الگو ممکنه در نگاه اول به چشم نیاد. اما هر چه تمرین بیشتری در این زمینه انجام بدید، در پیدا کردن الگو موفق تر خواهید بود.
در ادامه میخواهیم نحوه جدا کردن عدد از متن بوسیله توابع متنی (با الگو) و همچنین جدا کردن همه اعداد یک رشته (بدون نیاز به الگو) رو بررسی کنیم:
جدا کردن عدد برای رشته هایی که الگوی مشخصی دارن
فرض کنید داده هایی مطابق شکل روبرو داریم. میخواهیم شماره فاکتور رو جدا کنیم. (دقت کنید Space بین همه کلمات وجود نداره. اگر داشت به راحتی از ابزار Text To Column استفاده میکردیم)
همونطور که میبینید الگوی موجود در این داده ها وجود کلمه فاکتور قبل از کد مورد نظر هست. پس اولین کاری که باید بکنیم اینکه که مکان آخرین حرف از کلمه فاکتور رو پیدا کنیم.
پیدا کردن کلمه فاکتور
برای پیدا کردن مکان کلمه فاکتور، از تابع Find استفاده میکنیم.
=FIND(“فاکتور”,A2)
خروجی این تابع مکان حرف “ف” رو به ما میده و چون کلمه “فاکتور” ۶ حرف هست، خروجی این تابع رو با ۶ جمع میکنیم که مکان آخرین حرف از کلمه “فاکتور” مشخص بشه.
=FIND(“فاکتور”,A2)+6
چون تعداد ارقام فاکتور، ثابت نیست، باید مکان دومین کلمه “شماره” رو هم پیدا کنیم. اگر مکان “ش” رو پیدا کنیم، فاصله بین “ش” و “ر” از فاکتور میشه کد مربوط به فاکتور. پس:
=FIND(“شماره”,A2,5)
چرا آرگومان سوم تابع Find رو ۵ گذاشتیم؟
چون ۲ تا کلمه شماره داریم و ما دومی رو لازم داریم. برای همین میگیم از پنجمین حرف به بعد شروع به جستجو کنه و شماره رو پیدا کنه. اینطوری، “شماره” اول رو کاری نداره.
تا اینجا مکان حرف “ر” از فاکتور و مکان “ش” از شماره دوم رو پیدا کردیم. کافیه از طریق تابع MID کد مربوط به فاکتور رو استخراج کنیم:
تابع MID از بین یک عبارت، قسمت خاصی رو استخراج میکنه. این تابع ۳ آرگومان داره:
Text: عبارت مورد نظر که میخوایم قسمتی از اون رو جدا کنیم.
Start_Num: مکان اولین حرف از قسمتی که میخوایم جدا کنیم.
Num-Chars: تعداد حرفی که از Stat_Num به بعد قراره جدا بشه.
=MID (مکان حرف “ر”-مکان حرف “ش”,مکان حرف “ر”,سل مورد نظر)
=MID (A2,FIND(“فاکتور”,A2)+۶,FIND(“شماره”,A2,۵)-(FIND(“فاکتور”,A2)+۶))
***حالا اگه بخوایم شماره رسید رو جدا کنیم چه فرمولی باید بنویسیم؟(با رعایت این فرض که تعداد رقم شماره رسید متغیر است)
نظرتون رو در ادامه همین پست در قسمت کامنت بنویسید

شکل ۲- جدا کردن عدد از متن – فراخوانی شماره فاکتور از بین عبارت
جدا کردن عدد برای رشته هایی که الگوی مشخصی ندارن
در این روش همه اعداد موجود در یک سلول پشت سر هم قرار میگیرن. از فرمول نویسی آرایه ای استفاده شده و تابع Textjoin که از ورژن ۲۰۱۹ به بعد موجود هست. (برای ورژن های قبلی، فایل نمونه رو دانلود کنید و ببینید)
برای این کار باید تک تک حروف موجود در سلول رو با ترکیب تابع mid و indirect(len)) از هم تفکیک کنیم و بعد هر کدوم رو چک کنیم که عدد هست یا نه. اگر عدد بود دوباره به هم بچسبونیم. اینطوری هر چی کاراکتر غیر عددی هست بینش حذف میشه. فرمول به شرح زیر هست:
=TEXTJOIN(“”, TRUE, IFERROR(MID(A2, ROW(INDIRECT( “1:”&LEN(A2))), 1) *1, “”))
فقط دقت داشته باشید که فمرول آرایه ای هست و حتما باید کلید ترکیبی Ctrl+Shift+Enter زده بشه تا کار کنه.
شرح فرمول
تفکیک کاراکترهای موجود در سلول بصورت تک تک یعنی این قسمت فرمول:
MID(A2, ROW(INDIRECT( “1:”&LEN(A2))), 1)
که نتیجه این قسمت بصورت زیر خواهد بود:
MID(A2,{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38}, 1)
اینجا نشون میده که ۳۸ کاراکتر در سلول وجود داره که هر بار یکیش تفکیک میشه. (اگر تایع MID رو نمیشناسید حتما مقاله رو بخونید)
بعد از اینکه تک تک این کاراکترها تفکیک شدن، مقدار هر کدوم رو در ۱ ضرب میکنیم. یعنی این قسمت فرمول:
MID(A2, ROW(INDIRECT( “1:”&LEN(A2))), 1) *1
حالا اگر اون کاراکتر عدد باشه، نتیجه عدده و اگه متن باشه نتیجه خطای Value. چرا چون ضرب عدد در متن معنی نداره.
{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!; 5;1;1;7;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;5;4;4;4;3;7;6;3;3;6}
الان نتیجه بالا رو ببینید. به ازای همه حروف، خطا و به ازای اعداد مربوط به شماره فاکتور و شماره حساب خودشون رو نمایش داده.
حالا با یک iferror خطاها رو از بین میبریم و کاراکترهای باقیمانده که همون اعداد هستن رو با تابع Textjoin به هم میچسبونیم.
در انتهای آموزش فایلی قرار داده شده که بوسیله یک فرمول آرایه ای (مشابه فرمول بالا اما بدون استفاده از textjoin که قابل استفاده برای ورژن های قبل از ۲۰۱۹ هست) و مشابه فرمول بالا همه اعداد موجود در یک سلول رو جدا میکنه و کنار هم قرار میده. در واقع اگر از این فایل و فرمول بالا (همونطور که مشاهده کردید) روی داده های مثال بالا استفاده کنیم، عدد فاکتور و رسید رو کنار هم میذاره و بهمون میده. برای مواقعی که هیچ الگویی وجود نداره، میشه از این فرمول استفاده کرد. فقط به این نکته توجه داشته باشید که همه اعداد موجود در یک سلول رو استخراج میکنه و باید بدونید روی چه نوع داده هایی استفاده از این فایل بدرد میخوره.
فایل رو دانلود کنید و سعی کنید فرمول رو تحلیل کنید.
توابع متنی، توانایی های خیلی زیادی دارن. تسلط به این دسته توابع خیلی به حرفه ای شدن کمک میکنه.
دانلود فایل این آموزش
برای دانلود فایل این آموزش روی دکمه زیر کلیک کنید:





سلام من یک صورتحساب از بانک گرفتم عدد و حروف داره از گزینه text to columns استفاده میکنم جهت خروج شماره کارت های ۱۶ رقمی ولی پس از استخراج تمام اعدادیکان سمت راست ۰ میزنه مثلا پهار رقم آخر در صورتحساب ۴۶۹۸ است را ۴۶۹۰ میاره . از عوض کردن فورمت و گزینه های نامبر و تکست هم استفاده کردم نشد اکسل ۲۰۱۳ دارم. لطفا راهنمایی فرمائید.
درود بر شما
بله در اکسل اعداد بیش از ۱۵ رقم نمتونیم وارد کنیم
در حین استفاده از این ابزار، فرمت مقصد رو text بذارید و بعد finish رو بزنید
سلام
من سه تا عدد دارم که زیر هم نوشته شده در یک سلول شامل وزن و ماه و ریال که من فقط عدد مربوط به ریال رو لازم دارم
چطور میتونم تو سلول جاگانه دستور بدم که فقط اون عدد مربوط به مبلغ یا ریال فقط برای من نمایش داده بشه ؟؟؟؟
تره خدا راهنمایی کنید خیلی گرفتارم کرده
ممنون
۰۹۹۰۰۹۹۴۸۹۳
بهرام جباری
درود بر شما
بسته به الگو، روش های مختلفی هست
همین تابعی find در این آموزش
ابزار flash fill
داخل سایت سرچ کنید مقاله رو پیدا میکنید
خسته نباشید دقیقا این اموزش فقط درباره متن هایی هست که کارکترهاش برابر هست اگر تعداد کارکتر تغییر کنه چه باید کرد؟
درود بر شما
همونطور که میبینید، اعداد موجو در متن، تعداد کاراکترهای یکسانی ندارن
اما بصورت کلی، کاملا بستگی به الگوی داده ها داره و باید مسئله عینا تعریف بشه تا بشه راه حل پیدا کرد
از ابزار flash fill هم میشه استفاده کرد
سلام
رضا قنبری مهندس عمران
بوسیله فرمول زیر میتوان عدد را از ترکیب جدا کرد.
SUMPRODUCT(MID(0&B146;LARGE(INDEX(ISNUMBER(–MID(B146;ROW($1:$25);1))*ROW($1:$25);0);ROW($1:$25))+1;1)*10^ROW($1:$25)/10)
سلام بر اساتید محترم
از ح پرداختنی گردش گرفتم و میخوام مبالغ چکهای پرداختی تو بستانکار و بدهکار نظیر بشه و نهایتا ببینم کدوم چکها رو پاس نکردیم.
بخشی از شرح هر سطر شماره چک نوشته شده که میشه ازش کمک گرفت چون موقع پرداخت چک تو شرح بستانکاری تایپ شده و وقتی هم وصول شده باشه تو شرح بدهکاری تایپ شده ولی بدون ترتیب و درهم ریخته
مثل :
پاس شدن ۱ فقره چک به شماره چک ۶۶۷۱۴۵ بابت شارژ کارآفرین به شماره رسید ۱۴۷ در تاریخ ۱۳۹۷/۰۳/۱۰
پاس شدن ۱ فقره چک به شماره ۶۱۰۴۳۵ بابت تسویه حقوق اسفند تمامی واحدها به شماره رسید ۴۹ در تاریخ ۱۳۹۷/۰۲/۰۲
وصول ۱ فقره چک به شماره ۴۵۸۱۹۰ بابت تسویه درخواست ۲۶۶۹،۲۶۶۸،۲۶۶۴،۲۶۶۳،۲۶۶۲،۲۶۶۱،۲۶۲۹،۲۶۲۸،۲۶۲۷ به شماره رسید ۵۴۰ در تاریخ ۱۳۹۷/۰۲/۲۷
آیا میشه از تابعی استفاده کرده که اون شماره چک ها رو از شرح جدا کنه ؟ یا روش دیگه ای برای نظیر کردن پیشنهاد میدین؟
درود بر شما
داده ها به نظر میرسه الگویی نداره
اما ابزار flash fill احتمالا بتونه اولین عدد رو جدا کنه
امتحان کنید و البته حتما نتیجه نهایی رو چک کنید
https://excelpedia.net/flash-fill/
سلام خسته نباشید
داده های من یک ستون “کد کالا” و یک ستون “نام کالا” هستن … کد کالا وقتی با بارکد اسکن میشن دار پسوند “x00 ” که ۰۰ تعداد کالا میشه ،حالا من باتوابع MID و Find اون “x00” رو از کد کالام جدا میکنم حالا وقتی میخوام از روی کد کالای بدست اومده vlookup بگیرم که واسم نام کالارو بیاره با ارور n/a مواجه میشم !!! وقتی هم سلول خروجی فرمول MID و Find رو مساوی کد کالایی که میخوام قرار میدم FALSE میگیرم !!! با اینکه نه فاصله ای و چیز اضافی دیده میشه توی سلول وظاهر هردو سلول کاملا یه کد کالا رو نشون میدن !!! برای درست شدن ارور باید سلول را یک بار کپی و paste as values کنم بعد داخل سلول دابل کلیک کنم و اینتر کنم تا vlookup عمل کنه :(
ممنون میشم راهنماییم کنید…
درود بر شما
علت تفاوت جنس خرجی هاست. خروجی توابع متنی ، متن هست و در اکسل، ۲ متنی با ۲ عددی برابر نیست.
برای این موضوع باید خروجی توابع متنی رو داخل تابع Value قرار بدید تا درست کار کنه
برای درک بهتر موضوع لینک زیر رو مطالعه کنید:
https://excelpedia.net/vlookup-problems/
سلام. خیلی ممنون آقای چراغی، بسیار عالی توضیح دادین. ان شاءالله هر روز به موفقیت های بیشتری دست پیدا کنید.
عالی
دَم شما گرم
انشاالله دکترا در تربیت مدرس قبول بشید :)
خیلی ممنون
لطف دارید. البته اگر قصدی باشه :)
برای مثالی که زدید میشه راحت تر عمل کرد اگه ستون به هم ریخته باشه یعنی فاصله بین کارکتر ها باشه ابتدا با تابع TRIM فواصل رو یکدست میکنیم . بعد از تابع FIND و MID استفاده میکنیم. نیاز هم به فرمول نویسی MID (A2,FIND(“فاکتور”,A2)+6,FIND(“شماره”,A2,5)-(FIND(“فاکتور”,A2)+6)) هم نیست میشه هر کدم از عملیات را در یک ستون جدا گانه انجام داد.
دقیقا درسته اما قطعا برای حل یک مسئله روش های مختلفی با معایب و مزایای خودشون وجود داره. و همونطور که توضیح داده شده، روش کاما بستگی به الگوی داده ها داره.
برای حذف فاصله های اضافی در فرمول این آموزش میتونید تابع TRIM روی خروجی استفاده بشه.
سوالی که هست اینه که چطوری از تابع FIND و MID استفاده میکنید ولی فرمول نویسی تابع MID هم انجام نمیدید؟!
ضمن اینکه نوشتن فرمول در ستون های مختلف، منافاتی با ترکیب اونها در یک سلول نداره. و کمترین استفاده از سلول کمکی یکی از شروط فرمول نویسی حرفه ای هست.
موفق باشید
RIGHT(A2;10)
درود بر شما… خیلی عالی
حالا با این فرض این سوال و حل کنید:
شماره رسید تعداد رقم ثابت (۱۰) نیست