Excel: استخراج اعداد از رشته متن

  • این را به اشتراک بگذارید
Michael Brown

این آموزش نحوه استخراج اعداد از رشته‌های متنی مختلف در اکسل را با استفاده از فرمول‌ها و ابزار Extract نشان می‌دهد.

وقتی نوبت به استخراج بخشی از یک رشته متنی با طول معین می‌شود. اکسل سه تابع زیر رشته ای (چپ، راست و وسط) را برای انجام سریع کار ارائه می دهد. وقتی صحبت از استخراج اعداد از یک رشته الفبایی به میان می آید، مایکروسافت اکسل ... هیچ چیز را ارائه نمی دهد.

برای دریافت یک عدد از یک رشته در اکسل، کمی هوشمندی، کمی حوصله و مجموعه ای از توابع مختلف نیاز است. در یکدیگر لانه کرده اند. یا می‌توانید ابزار Extract را اجرا کنید و کار را با کلیک ماوس انجام دهید. در زیر جزئیات کامل هر دو روش را خواهید دید.

    نحوه استخراج عدد از انتهای رشته متن

    هنگامی که ستونی از رشته های الفبایی دارید که در آن عدد بعد از آن قرار می گیرد. متن، می توانید از فرمول زیر برای دریافت آن استفاده کنید.

    RIGHT( سلول, LEN( سلول) - MAX(IF(ISNUMBER(MID( سلول، ROW(INDIRECT("1:"&LEN( سلول)))، 1) *1)=FALSE، ROW(INDIRECT("1:"&LEN( سلول))) 0)))

    ما کمی بعداً به منطق فرمول خواهیم پرداخت. در حال حاضر، به سادگی cell را با اشاره به سلول حاوی رشته اصلی (در مورد ما A2) جایگزین کنید و فرمول را در هر سلول خالی در همان ردیف وارد کنید، در B2 بگویید:

    =RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))

    این فرمول فقط از انتها عدد می گیرد. اگر رشته ای نیز دارای اعداد در ابتدا یا وسط باشد، آنها هستندنادیده گرفته شد:

    استخراج با تابع RIGHT که به دسته توابع Text تعلق دارد انجام می شود. خروجی این تابع همیشه text است. در مورد ما، نتیجه یک زیررشته عددی است، که از نظر اکسل نیز متن است، نه عدد.

    اگر نیاز دارید که نتیجه یک عدد باشد. (که می توانید در محاسبات بعدی از آن استفاده کنید)، سپس فرمول را در تابع VALUE بپیچید یا یک عملیات حسابی انجام دهید که نتیجه را تغییر نمی دهد، مثلاً در 1 ضرب کنید یا 0 را اضافه کنید. برای گرفتن خطاهای رشته هایی که حاوی یک علامت نیستند. یک عدد، از تابع IFERROR استفاده کنید. به عنوان مثال:

    =IFERROR(VALUE(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)*1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0)))), "")

    یا

    =IFERROR(RIGHT(A2, LEN(A2) - MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1) *1)=FALSE, ROW(INDIRECT("1:"&LEN(A2))), 0))) +0, "")

    توجه داشته باشید. در Dynamic Array Excel (Office 365 و 2021)، فرمول را به روش معمول با کلید Enter وارد می کنید. در اکسل 2019 و قبل از آن، فقط به عنوان یک فرمول آرایه کار می کند، بنابراین به خاطر داشته باشید که Ctrl + Shift + Enter را فشار دهید تا آن را کامل کنید.

    این فرمول چگونه کار می کند:

    برای استخراج عدد از یک رشته الفبایی، اولین چیزی که باید بدانید این است که استخراج را از کجا شروع کنید. موقعیت آخرین کاراکتر غیر عددی در یک رشته با کمک این فرمول پیچیده تعیین می شود:

    MAX(IF(ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN( A2)))، 1)*1)=FALSE، ROW(INDIRECT("1:"&LEN(A2)))، 0))

    برای درک منطق، بیایید آن را از داخل بررسی کنیم :

    ترکیب ROW(INDIRECT("1:"&LEN(A2)))دنباله ای از اعداد مربوط به کل کاراکترهای رشته منبع (A2) ایجاد می کند و ما این اعداد متوالی را به عنوان اعداد شروع به MID ارائه می کنیم:

    MID(A2, {1;2;3;4 ;5;6;7;8}، 1)

    تابع MID ​​هر کاراکتر جداگانه را از A2 می کشد و آنها را به عنوان یک آرایه برمی گرداند:

    {"0";"5";" -";"E";"C";"-";"0";"1"}

    از آنجایی که MID یک تابع متنی است، خروجی آن همیشه متن است (همانطور که می بینید، همه کاراکترها داخل گیومه قرار می گیرند). برای تبدیل عددی به عدد، آرایه را در 1 ضرب می کنیم (نفی مضاعف --MID() همین اثر را خواهد داشت). نتیجه این عملیات آرایه ای از اعداد و #VALUE است! خطاهای نشان دهنده کاراکترهای غیر عددی:

    ISNUMBER({0;5;#VALUE!;#VALUE!;#VALUE!;#VALUE!;0;1})

    تابع ISNUMBER هر عنصر آرایه را ارزیابی می کند و حکم خود را به شکل مقادیر بولی می دهد - TRUE برای اعداد، FALSE برای هر چیز دیگری:

    {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE}

    این آرایه به تست منطقی تابع IF می رود، جایی که هر عنصر آرایه با FALSE مقایسه می شود:

    IF({TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE ;TRUE}=FALSE، ROW(INDIRECT("1:"&LEN(A2)))، 0)

    برای هر FALSE (مقدار غیر عددی)، تابع ROW(INDIRECT()) دیگری برمی گردد. موقعیت نسبی آن در رشته برای هر TRUE (مقدار عددی)، یک صفر برگردانده می شود. آرایه حاصل به نظر می رسدبه شرح زیر است:

    {0;0;3;4;5;6;0;0}

    بقیه آسان است. تابع MAX بالاترین عدد را در آرایه بالا پیدا می کند که موقعیت آخرین مقدار غیر عددی در رشته است (در مورد ما 6). به سادگی، آن موقعیت را از طول کل رشته برگردانده شده توسط LEN کم کنید و نتیجه را به RIGHT منتقل کنید تا بداند چند کاراکتر باید از سمت راست رشته استخراج شود:

    RIGHT(A2, LEN (A2) - 6)

    انجام شد!

    نحوه استخراج عدد از ابتدای رشته متن

    اگر با رکوردهایی کار می کنید که متن بعد از عدد ظاهر می شود، می توانید با استفاده از این فرمول عمومی، شماره را از ابتدای یک رشته استخراج کنید:

    LEFT( سلول, MATCH(FALSE, ISNUMBER(MID( سلول, ROW(INDIRECT("1: "&LEN( cell)+1)), 1) *1), 0) -1)

    با رشته اصلی در A2، از فرمول زیر برای بدست آوردن عدد استفاده کنید:

    =LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)

    مهم نیست چند رقم در وسط یا انتهای آن باشد، فقط عدد شروع استخراج می شود:

    توجه داشته باشید. در اکسل 365 و اکسل 2021، به دلیل پشتیبانی از آرایه های پویا، یک فرمول معمولی به خوبی کار می کند. در اکسل 2019 و قبل از آن، باید Ctrl + Shift + Enter را فشار دهید تا به وضوح به فرمول آرایه تبدیل شود.

    این فرمول چگونه کار می کند:

    در اینجا، ما دوباره از ترکیب توابع ROW، INDIRECT و LEN برای ایجاد دنباله ای از اعداد برابر با کل کاراکترهای رشته منبع به اضافه 1 استفاده می کنیم (نقش آننویسه اضافی کمی بعد روشن می شود.

    ROW(INDIRECT("1:"&LEN(A2)+1))

    MID و ISNUMBER همان کار را انجام می دهند که در مثال قبلی - MID کاراکترهای فردی را می کشد و ISNUMBER آنها را به مقادیر منطقی تبدیل می کند. آرایه حاصل از TRUE و FALSE به تابع MATCH به عنوان یک آرایه جستجو می رود:

    MATCH(FALSE, {TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;FALSE}, 0)

    MATCH موقعیت نسبی اولین FALSE را محاسبه می کند و موقعیت اولین کاراکتر غیر عددی در رشته را به ما می دهد (3 در A2). برای استخراج اعداد قبلی، 1 را از موقعیت اولین کاراکتر متن کم می کنیم و تفاوت را به آرگومان num_chars از تابع LEFT ارائه می کنیم:

    LEFT(A2, 3-1)

    اکنون، به یک کاراکتر "اضافی" در دنباله ایجاد شده توسط ROW(INDIRECT()+1)) برگردید. همانطور که می دانید، این دنباله نقطه شروع برای تابع MID ​​را فراهم می کند. بدون 1+، MID دقیقاً به همان تعداد کاراکتر در رشته اصلی استخراج می‌کند. اگر رشته فقط شامل اعداد باشد، ISNUMBER فقط TRUE را برمی گرداند در حالی که MATCH حداقل به یک FALSE نیاز دارد. برای اطمینان از آن، یک کاراکتر دیگر به طول کل رشته اضافه می کنیم که تابع MID ​​آن را به یک رشته خالی تبدیل می کند. برای مثال، در B7، MID این آرایه را برمی گرداند:

    {"1";"2";"3";"4";""}

    توجه داشته باشید. همانطور که در مورد تابع RIGHT وجود دارد، LEFT نیز یک عدد را برمی گرداندsubstring که از نظر فنی متن است نه عدد. برای به دست آوردن نتیجه به عنوان یک عدد به جای یک رشته عددی، فرمول را در تابع VALUE قرار دهید یا همان طور که در مثال اول نشان داده شده است، نتیجه را در 1 ضرب کنید.

    نحوه دریافت عدد از هر موقعیتی در یک رشته

    اگر وظیفه شما مستلزم استخراج عدد از هر نقطه ای از رشته است، می توانید از فرمول حیرت انگیز زیر که در انجمن MrExcel منتشر شده است استفاده کنید:

    =SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)) * ROW(INDIRECT("1:"&LEN(A2))), 0), ROW(INDIRECT("1:"&LEN(A2))))+1, 1) * 10^ROW(INDIRECT("1:"&LEN(A2)))/10)

    که در آن A2 عبارت است از رشته متن اصلی.

    تجزیه این فرمول به یک مقاله جداگانه نیاز دارد، بنابراین می توانید به سادگی آن را در کاربرگ خود کپی کنید تا مطمئن شوید که واقعا کار می کند :)

    پس از بررسی نتایج، ممکن است متوجه یک ایراد ناچیز شوید - اگر رشته منبع شامل یک عدد نباشد، فرمول مانند ردیف 6 در تصویر بالا، صفر را برمی گرداند. برای رفع این مشکل، می‌توانید فرمول را در دستور IF قرار دهید، آزمایش منطقی آن بررسی می‌کند که آیا رشته منبع دارای عددی است یا خیر. اگر این کار را کرد، فرمول عدد را استخراج می کند، در غیر این صورت یک رشته خالی برمی گرداند:

    =IF(SUM(LEN(A2)-LEN(SUBSTITUTE(A2, {"0","1","2","3","4","5","6","7","8","9"}, "")))>0, SUMPRODUCT(MID(0&A2, LARGE(INDEX(ISNUMBER(--MID(A2,ROW(INDIRECT("$1:$"&LEN(A2))),1))* ROW(INDIRECT("$1:$"&LEN(A2))),0), ROW(INDIRECT("$1:$"&LEN(A2))))+1,1) * 10^ROW(INDIRECT("$1:$"&LEN(A2)))/10),"")

    همانطور که در تصویر زیر نشان داده شده است، فرمول بهبودیافته به زیبایی کار می کند (با تشکر از الکس، استاد اکسل ما، برای این بهبود):

    برخلاف تمام مثال‌های قبلی، نتیجه این فرمول عدد است. برای اطمینان از این موضوع، فقط به مقادیر راست چین شده در ستون B و صفرهای کوتاه شده توجه کنید.

    نکته. در اکسل 365 -اکسل 2019، راه حل بسیار ساده تری با کمک تابع TEXTJOIN وجود دارد. لطفاً به نحوه حذف متن و حفظ اعداد مراجعه کنید.

    استخراج عدد از رشته متن با Ultimate Suite

    همانطور که اخیراً مشاهده کردید، هیچ فرمول اکسل بی اهمیتی برای بیرون آوردن عدد از یک رشته متنی وجود ندارد. اگر در درک فرمول‌ها یا تغییر دادن آن‌ها برای مجموعه داده‌های خود مشکل دارید، ممکن است این روش ساده برای دریافت عدد از رشته در اکسل را دوست داشته باشید.

    با اضافه شدن مجموعه نهایی ما به نوار اکسل، این روشی است که می‌توانید انجام دهید. می تواند به سرعت اعداد را از هر رشته الفبایی بازیابی کند:

    1. به گروه Ablebits Data > Text بروید و روی Extract کلیک کنید. :

    2. همه سلول ها را با رشته های منبع انتخاب کنید.
    3. در صفحه ابزار Extract، دکمه رادیویی Extract numbers را انتخاب کنید.
    4. بسته به اینکه می خواهید نتایج فرمول یا مقادیر باشند، کادر Insert as formula را انتخاب کنید یا آن را انتخاب نشده رها کنید (پیش فرض).

      توصیه من این است که اگر می خواهید اعداد استخراج شده به محض ایجاد هرگونه تغییر در رشته های منبع، به طور خودکار به روز شوند، این کادر را انتخاب کنید. اگر می‌خواهید نتایج مستقل از رشته‌های اصلی باشد (مثلاً اگر قصد دارید داده‌های منبع را در مرحله بعدی حذف کنید)، این کادر را انتخاب نکنید.

    5. روی دکمه درج نتایج کلیک کنید. انجام شد!

    مانند مثال قبلی، نتایجاستخراج اعداد هستند، به این معنی که شما آزاد هستید که با آنها بشمارید، جمع کنید، میانگین بگیرید یا هر محاسبات دیگری را انجام دهید.

    در این مثال، ما انتخاب کرده ایم که نتایج را به صورت <9 درج کنیم>مقادیر ، و افزونه دقیقاً همان کاری را انجام داد که خواسته شد:

    اگر کادر چک Insert as formula انتخاب شده بود، شما یک فرمول را در نوار فرمول مشاهده کنید. کنجکاو هستید بدانید کدام یک؟ فقط نسخه آزمایشی Ultimate Suite را دانلود کنید و خودتان ببینید :)

    دانلودهای موجود

    Excel Extract Number - نمونه کار کتاب (فایل xlsx)

    Ultimate Suite - نسخه آزمایشی (exe. فایل)

    مایکل براون یک علاقه‌مند به فناوری است که علاقه زیادی به ساده‌سازی فرآیندهای پیچیده با استفاده از ابزارهای نرم‌افزاری دارد. او با بیش از یک دهه تجربه در صنعت فناوری، مهارت های خود را در Microsoft Excel و Outlook و همچنین Google Sheets و Docs تقویت کرده است. وبلاگ مایکل اختصاص داده شده است تا دانش و تخصص خود را با دیگران به اشتراک بگذارد و نکات و آموزش هایی را برای بهبود بهره وری و کارایی ارائه دهد. چه یک حرفه ای با تجربه باشید و چه مبتدی، وبلاگ مایکل، بینش های ارزشمند و توصیه های عملی را برای استفاده حداکثری از این ابزارهای نرم افزاری ضروری ارائه می دهد.