نحوه حذف متن یا اعداد از سلول اکسل

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

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

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

در صورتی که با داده‌های همگن کار می‌کنید، احتمالاً می‌توانید از توابع LEFT، RIGHT و MID برای استخراج استفاده کنید. تعداد کاراکترهای یکسان از یک موقعیت اما این یک سناریوی ایده آل برای آزمایش های آزمایشگاهی است. در زندگی واقعی، به احتمال زیاد با داده های متفاوتی سروکار دارید که اعداد قبل از متن، بعد از متن یا بین متن قرار می گیرند. مثال‌های زیر دقیقاً برای این مورد راه‌حل‌هایی ارائه می‌دهند.

    نحوه حذف متن و حفظ اعداد در سلول‌های اکسل

    این راه حل در Excel 365، Excel 2021 کار می‌کند. و Excel 2019

    Microsoft Excel 2019 چند توابع جدید را معرفی کرد که در نسخه های قبلی موجود نیستند و ما قصد داریم از یکی از این توابع یعنی TEXTJOIN برای حذف کاراکترهای متن از یک سلول استفاده کنیم. حاوی اعداد است.

    فرمول عمومی این است:

    TEXTJOIN("", TRUE, IFERROR(MID( cell, ROW(INDIRECT( "1:"&LEN( سلول)))، 1) *1، ""))

    در اکسل 365 و 2021، این یکی نیز کار خواهد کرد:

    TEXTJOIN(""، TRUE،IFERROR(MID( سلول، SEQUENCE(LEN( سلول))، 1) *1، ""))

    در نگاه اول، فرمول ها ممکن است کمی ترسناک به نظر برسند، اما آنها کار می کنند :)

    به عنوان مثال، برای حذف متن از اعداد در A2، یکی از فرمول های زیر را در B2 وارد کنید، و سپس آن را به تعداد سلول های مورد نیاز کپی کنید.

    در اکسل 365 - 2019:

    =TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))

    در اکسل 2019، باید به صورت یک فرمول آرایه با Ctrl + Shift + Enter وارد شود. در آرایه پویا اکسل، به عنوان یک فرمول معمولی که با کلید Enter تکمیل می شود، کار می کند.

    در اکسل 365 و 2021:

    =TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))

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

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

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

    شما از ROW(INDIRECT("1:"&LEN(رشته))) یا SEQUENCE(LEN(رشته)) برای ایجاد یک دنباله اعداد مربوط به تعداد کل استفاده می کنید. از کاراکترهای رشته منبع، و سپس آن اعداد متوالی را به عنوان اعداد شروع به تابع MID ​​وارد کنید. در B2، این بخش از فرمول به صورت زیر است:

    MID(A2, {1;2;3;4;5;6;7;8;9;10;11;12;13;14;15}, 1)

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

    <. 0> {"2";"1";"0";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}

    این آرایه در 1 ضرب می‌شود. مقادیر عددی بدون تغییر باقی می‌مانند، در حالی که ضرب یک کاراکتر غیر عددی باعث #VALUE می‌شود! خطا:

    {2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}

    عملکرد IFERROR کنترل می شوداین خطاها را با رشته های خالی جایگزین می کند:

    {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""}

    این آرایه نهایی به تابع TEXTJOIN ارائه می شود، که مقادیر غیر خالی را در آرایه به هم می پیوندد ( ignore_empty آرگومان بر روی TRUE تنظیم شد) با استفاده از یک رشته خالی ("") برای جداکننده:

    TEXTJOIN("", TRUE, {2;1;0;"";"";"";"";"";"";"";"";"";"";"";""})

    نکته. برای Excel 2016 - 2007، یک راه حل نیز وجود دارد، اما فرمول بسیار پیچیده تر است. می توانید آن را در این آموزش پیدا کنید: نحوه استخراج اعداد در اکسل.

    عملکرد سفارشی برای حذف متن از اعداد

    راه حل برای همه نسخه های اکسل کار می کند

    اگر از نسخه قدیمی اکسل استفاده می کنید یا فرمول های بالا را نیز پیدا می کنید به خاطر سپردن سخت است، هیچ چیز شما را از ایجاد تابع خود با یک نحو ساده تر و یک نام کاربرپسند مانند RemoveText باز نمی دارد. تابع تعریف شده توسط کاربر (UDF) را می توان به دو روش نوشت:

    کد VBA 1:

    در اینجا، ما به هر کاراکتر در رشته منبع نگاه می کنیم. یکی و بررسی کنید که عددی است یا خیر. اگر یک عدد باشد، کاراکتر به رشته به دست آمده اضافه می شود.

    تابع RemoveText(str As String ) Dim sRes As String sRes = "" برای i = 1 To Len(str) If True = IsNumeric(Mid(str, i ، 1)) سپس sRes = sRes & Mid(str, i, 1) End If Next i RemoveText = sRes End Function

    VBA code 2:

    کد یک شی برای پردازش یک عبارت منظم ایجاد می کند. با استفاده از RegExp، همه کاراکترهای غیر از ارقام 0-9 را از رشته منبع حذف می کنیم.

    تابع RemoveText(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[^0-9]" RemoveText = .Replace(str, "" ) End With End Function

    در کاربرگ های کوچک، هر دو کد به یک اندازه خوب عمل می کنند. در کاربرگ‌های بزرگ که تابع صدها یا هزاران بار فراخوانی می‌شود، کد 2 که از VBScript.RegExp استفاده می‌کند سریع‌تر کار می‌کند.

    مراحل دقیق برای درج کد در کتاب کار خود را می‌توانید در اینجا بیابید: نحوه درج VBA کد در اکسل.

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

    RemoveText(string)

    به عنوان مثال، به کاراکترهای غیر عددی را از سلول A2 حذف کنید، فرمول در B2 این است:

    =RemoveText(A2)

    فقط آن را در ستون کپی کنید، و این نتیجه را دریافت خواهید کرد:

    توجه. هم فرمول های بومی و هم تابع سفارشی رشته عددی را خروجی می دهند. برای تبدیل آن به عدد، نتیجه را در 1 ضرب کنید، یا صفر را اضافه کنید، یا فرمول را در تابع VALUE قرار دهید. به عنوان مثال:

    =RemoveText(A2) + 0

    =VALUE(RemoveText(A2))

    نحوه حذف اعداد از رشته متن در اکسل

    راه حل در Excel 365، Excel 2021 و Excel کار می کند 2019

    فرمول‌های حذف اعداد از یک رشته الفبایی تقریباً شبیه به مواردی است که در مثال قبلی مورد بحث قرار گرفت.

    برای Excel 365 - 2019:

    TEXTJOIN(" "، TRUE، IF(ISERR(MID( سلول ، ROW(INDIRECT("1:"&LEN( سلول ) ))، 1) *1)، MID( سلول ، ROW(INDIRECT("1:"&LEN( سلول )))، 1)، ""))

    در اکسل 2019، به یاد داشته باشید که با فشار دادن کلیدهای Ctrl + Shift + Enter با هم، آن را به فرمول آرایه تبدیل کنید.

    برای Excel 365 و 2021:

    TEXTJOIN("", TRUE, IF(ISERROR(MID( cell , SEQUENCE(LEN( cell 1) *1), MID ( سلول ، SEQUENCE(LEN( سلول ))، 1)، ""))

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

    =TEXTJOIN("", TRUE, IF(ISERR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2) )), 1) *1), MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))

    یا

    =TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), ""))

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

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

    برای خلاص شدن از شر فضاهای اضافی قبل از متن ، فرمول را در تابع TRIM به این صورت بپیچید:

    =TRIM(TEXTJOIN("", TRUE, IF(ISERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1), MID(A2, SEQUENCE(LEN(A2)), 1), "")))

    اکنون، نتایج شما کاملاً عالی هستند!

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

    در اصل، فرمول مانند آنچه در مثال قبلی توضیح داده شد کار می کند. تفاوت این است که، از آرایه نهایی ارائه شده تا تابع TEXTJOIN، باید اعداد را حذف کنید نه متن. برای انجام آن، از ترکیب توابع IF و ISERROR استفاده می کنیم.

    همانطور که به یاد دارید،MID(…)+0 آرایه ای از اعداد و #VALUE تولید می کند! خطاهایی که کاراکترهای متن را در موقعیت های مشابه نشان می دهند:

    {2;1;0;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}

    عملکرد ISERROR خطاها را می گیرد و آرایه حاصل از مقادیر بولی را به IF:

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

    <ارسال می کند. 0> هنگامی که تابع IF TRUE (یک خطا) را می بیند، کاراکتر متن مربوطه را با کمک یک تابع MID ​​دیگر در آرایه پردازش شده وارد می کند. وقتی تابع IF FALSE (عددی) را می بیند، آن را با یک رشته خالی جایگزین می کند:

    {"";"";"";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}

    این آرایه نهایی به TEXTJOIN منتقل می شود، بنابراین کاراکترهای متن را به هم متصل می کند و خروجی آن نتیجه.

    عملکرد سفارشی برای حذف اعداد از متن

    راه حل برای همه نسخه های اکسل کار می کند

    با در نظر داشتن فرمول قوی باید حفظ شود ساده، کد تابع تعریف شده توسط کاربر (UDF) را به اشتراک می گذارم تا هر کاراکتر عددی را حذف کنم.

    کد VBA 1:

    تابع RemoveNumbers(str As String ) Dim sRes به عنوان رشته sRes = "" برای i = 1 به Len(str) If False = IsNumeric(Mid(str, i, 1)) سپس sRes = sRes & Mid(str, i, 1) End If Next i RemoveNumbers = sRes End Function

    VBA code 2:

    Function RemoveNumbers(str As String ) As String With CreateObject ( "VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 = .Replace(str, "" ) End With End Function

    همانطور که در مورد تابع RemoveText است، کد دوم بهتر است در بزرگکاربرگ‌ها برای بهینه‌سازی عملکرد.

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

    RemoveNumbers(string)

    در مورد ما، فرمول در B2 این است:

    =RemoveNumbers(A2)

    برای کوتاه کردن فضاهای اصلی در صورت وجود، تابع سفارشی را در داخل TRIM قرار دهید، مانند فرمول اصلی:

    =TRIM(RemoveNumbers(A2))

    تقسیم اعداد و متن به ستون های جداگانه

    در شرایطی که می خواهید متن و اعداد را به دو ستون جدا کنید، خوب است که کار را با یک فرمول انجام دهید. ، موافق؟ برای این کار، ما فقط کد توابع RemoveText و RemoveNumbers را در یک تابع با نام SplitTextNumbers یا به سادگی Split یا هر چیزی که دوست دارید :)

    کد VBA 1:

    تابع SplitTextNumbers(str As String , is_remove_text As Boolean ) As String Dim sNum, sText, sChar As String sCurChar = sNum = sText = "" برای i = 1 To Len(str) sCurChar = Mid(str, i, 1) If True = IsNumeric(sCurChar) سپس sNum = sNum & sCurChar Else sText = sText & sCurChar End If Next i If True = is_remove_text سپس SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End Function

    VBA code 2:

    Function SplitTextNumbers(str As String Asremoole, is_ext با CreateObject ("VBScript.RegExp") .Global = True If True = is_remove_text سپس .Pattern = "[^0-9]" دیگری.Pattern = "[0-9]" End If SplitTextNumbers = .Replace(str, "" ) End With End Function

    عملکرد سفارشی جدید ما به دو آرگومان نیاز دارد:

    SplitTextNumbers(string, is_remove_text)

    Where is_remove_text یک مقدار بولی است که نشان می دهد کدام کاراکترها باید حذف شوند:

    • TRUE یا 1 - حذف متن و حفظ اعداد
    • FALSE یا 0 - حذف اعداد و حفظ متن

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

    برای حذف کاراکترهای غیر عددی:

    =SplitTextNumbers(A2, TRUE)

    حذف کاراکترهای عددی :

    =SplitTextNumbers(A2, FALSE)

    نکته. برای جلوگیری از مشکل احتمالی فاصله های پیشرو، توصیه می کنم همیشه فرمولی را که اعداد را حذف می کند در تابع TRIM قرار دهید:

    =TRIM(SplitTextNumbers(A2, FALSE))

    ابزار ویژه برای حذف اعداد یا متن

    برای کسانی که این کار را انجام می دهند. دوست ندارم مسائل را بی جهت پیچیده کنیم، روش خودمان را برای حذف متن یا اعداد در اکسل نشان خواهم داد.

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

    1. در برگه Ablebits Data ، در گروه Text ، روی Remove > Remove Characters کلیک کنید.

  • در صفحه افزونه، محدوده منبع را انتخاب کنید، گزینه حذف مجموعه کاراکترها را انتخاب کنید و یکی از آنها را انتخاب کنید Text characters یا Numeric characters در لیست کشویی.
  • Remove را بزنید و از نتیجه لذت ببرید :)
  • نکته. اگر نتایج حاوی برخی از فضاهای پیشرو باشد، فضاهای برشابزار در کمترین زمان آنها را از بین می برد.

    این نحوه حذف متن یا کاراکترهای عددی از یک رشته در اکسل است. از شما سپاسگزارم که خواندید و مشتاقانه منتظر دیدار شما در وبلاگ ما در هفته آینده هستم!

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

    حذف متن یا اعداد در اکسل - مثالها (فایل xlsm.)

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

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