جدول المحتويات
سيعلمك هذا البرنامج التعليمي كيفية فصل النص عن الأرقام في Excel باستخدام الصيغ الأصلية والوظائف المخصصة. ستتعلم أيضًا كيفية تقسيم النص والأرقام إلى عمودين منفصلين.
تخيل هذا: تتلقى بيانات أولية للتحليل وتكتشف أن الأرقام مختلطة مع نص في عمود واحد. في معظم الحالات ، سيكون من الملائم بالتأكيد وضعها في أعمدة منفصلة لفحصها عن كثب.
في حال كنت تعمل ببيانات متجانسة ، يمكنك على الأرجح استخدام وظائف LEFT و RIGHT و MID لاستخراج نفس عدد الأحرف من نفس الموضع. لكن هذا هو السيناريو المثالي للاختبارات المعملية. في الحياة الواقعية ، من المرجح أن تتعامل مع بيانات غير متشابهة حيث تأتي الأرقام قبل النص أو بعد النص أو بين النص. توفر الأمثلة أدناه حلولاً لهذه الحالة بالضبط.
كيفية إزالة النص والاحتفاظ بالأرقام في خلايا Excel
يعمل الحل في Excel 365 و Excel 2021 ، و Excel 2019
قدم Microsoft Excel 2019 بعض الوظائف الجديدة غير المتوفرة في الإصدارات السابقة ، وسنستخدم إحدى هذه الوظائف ، وهي TEXTJOIN ، لتجريد أحرف النص من خلية تحتوي على أرقام.
الصيغة العامة هي:
TEXTJOIN ("" ، TRUE ، IFERROR (MID ( خلية، ROW (INDIRECT ("1:" & amp؛ LEN ( الخلية))) ، 1) * 1 ، ""))في Excel 365 و 2021 ، ستعمل هذه أيضًا:
TEXTJOIN ("" ، TRUE ،IFERROR (MID ( خلية، SEQUENCE (LEN ( خلية))) ، 1) * 1 ، ""))للوهلة الأولى ، قد تبدو الصيغ مخيفة بعض الشيء ، لكنها تعمل :)
على سبيل المثال ، لإزالة نص من الأرقام في A2 ، أدخل إحدى الصيغ أدناه في B2 ، ثم انسخها إلى أي عدد من الخلايا حسب الحاجة.
في Excel 365 - 2019:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, ROW(INDIRECT( "1:"&LEN(A2))), 1) *1, ""))
في Excel 2019 ، يجب إدخالها كصيغة صفيف باستخدام Ctrl + Shift + Enter. في المصفوفة الديناميكية Excel ، تعمل كصيغة عادية مكتملة بالمفتاح Enter.
في Excel 365 و 2021:
=TEXTJOIN("", TRUE, IFERROR(MID(A2, SEQUENCE(LEN(A2)), 1) *1, ""))
ونتيجة لذلك ، تكون جميع أحرف النص تمت إزالتها من خلية ويتم الاحتفاظ بالأرقام:
كيف تعمل هذه الصيغة:
لفهم المنطق بشكل أفضل ، دعنا نبدأ في التحقيق الصيغة من الداخل:
يمكنك استخدام إما ROW (INDIRECT ("1:" & amp؛ 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 بدءًا من الحرف الأول وترجعهم كمصفوفة:
{"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 ، يوجد حل أيضًا ، لكن الصيغة أكثر تعقيدًا. يمكنك العثور عليه في هذا البرنامج التعليمي: كيفية استخراج الأرقام في Excel.
وظيفة مخصصة لإزالة النص من الأرقام
يعمل الحل مع جميع إصدارات Excel
إذا كنت تستخدم إصدارًا أقدم من Excel أو ابحث عن الصيغ أعلاه أيضًا يصعب تذكره ، فلا شيء يمنعك من إنشاء وظيفتك الخاصة باستخدام صيغة أبسط واسم سهل الاستخدام مثل RemoveText . يمكن كتابة الوظيفة المعرفة من قبل المستخدم (UDF) بطريقتين:
كود VBA 1:
هنا ، ننظر إلى كل حرف في السلسلة المصدر واحدًا تلو الآخر واحد وتحقق مما إذا كان رقميًا أم لا. إذا كان رقمًا ، تتم إضافة الحرف إلى السلسلة الناتجة.
الوظيفة RemoveText (str As String) Dim sRes As String sRes = "" بالنسبة إلى i = 1 إلى Len (str) إذا كانت True = IsNumeric (Mid (str، i ، 1)) ثم sRes = sRes & amp؛ Mid (str، i، 1) End If Next i RemoveText = sRes End Functionكود VBA 2:
ينشئ الكود كائنًا لمعالجة تعبير عادي. باستخدام RegExp ، نزيل جميع الأحرف بخلاف الأرقام من 0 إلى 9 من السلسلة المصدر.
الدالة RemoveText (str As String) كسلسلة مع CreateObject ("VBScript.RegExp") .Global = True .Pattern = "[^ 0-9]" RemoveText =. استبدال (str، "") تنتهي بوظيفة النهايةفي أوراق العمل الصغيرة ، يعمل كلا الرمزين بشكل جيد. في أوراق العمل الكبيرة حيث يتم استدعاء الوظيفة مئات أو آلاف المرات ، سيعمل الرمز 2 الذي يستخدم VBScript.RegExp بشكل أسرع.
يمكن العثور على الخطوات التفصيلية لإدراج الرمز في المصنف هنا: كيفية إدراج VBA رمز في Excel.
أيًا كان الأسلوب الذي تختاره ، من منظور المستخدم النهائي ، فإن وظيفة حذف النص وترك الأرقام بسيطة مثل:
RemoveText (سلسلة)على سبيل المثال ، إلى أزل الأحرف غير الرقمية من الخلية A2 ، الصيغة في B2 هي:
=RemoveText(A2)
فقط انسخها أسفل العمود ، وستحصل على هذه النتيجة:
ملاحظة. تنتج كل من الصيغ الأصلية والدالة المخصصة سلسلة رقمية . لتحويلها إلى رقم ، اضرب الناتج في 1 ، أو أضف صفرًا ، أو قم بلف الصيغة في دالة VALUE. على سبيل المثال:
=RemoveText(A2) + 0
=VALUE(RemoveText(A2))
كيفية إزالة الأرقام من سلسلة نصية في Excel
يعمل الحل في Excel 365 و Excel 2021 و Excel 2019
الصيغ لإزالة الأرقام من سلسلة أبجدية رقمية تشبه إلى حد كبير تلك التي تمت مناقشتها في المثال السابق.
بالنسبة لـ Excel 365 - 2019:
TEXTJOIN (" "، TRUE ، IF (ISERR (MID ( خلية ، ROW (INDIRECT ("1:" & amp؛ LEN ( خلية )))، 1) * 1)، MID ( خلية ، ROW (INDIRECT ("1:" & amp؛ LEN ( cell )))، 1)، ""))في Excel 2019 ، تذكر أن تجعلها صيغة صفيف بالضغط على Ctrl + Shift + Enter معًا.
لـ Excel 365 و 2021:
TEXTJOIN (""، TRUE، IF (ISERROR (MID ( خلية ، SEQUENCE (LEN ( خلية 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}
عندما ترى الدالة IF القيمة TRUE (خطأ) ، فإنها تُدرج حرف النص المقابل في المصفوفة المعالجة بمساعدة دالة MID أخرى. عندما ترى الدالة IF FALSE (رقم) ، فإنها تستبدلها بسلسلة فارغة:
{"";"";"";" ";"S";"u";"n";"s";"e";"t";" ";"R";"o";"a";"d"}
يتم تمرير هذه المصفوفة النهائية إلى TEXTJOIN ، لذلك فهي تسلسل أحرف النص وتخرج نتيجة.
وظيفة مخصصة لإزالة الأرقام من النص
يعمل الحل مع جميع إصدارات Excel
مع مراعاة ضرورة الاحتفاظ بالصيغة القوية بسيط ، سأشارك رمز الوظيفة المعرفة من قبل المستخدم (UDF) لإزالة أي حرف رقمي.
كود VBA 1:
وظيفة RemoveNumbers (str As String) خافت sRes As String sRes = "" بالنسبة إلى i = 1 إلى Len (str) إذا كانت False = IsNumeric (Mid (str، i، 1)) ثم sRes = sRes & amp؛ Mid (str، i، 1) End If Next i RemoveNumbers = sRes End Functionكود VBA 2:
Function RemoveNumbers (str As String) As String With CreateObject ("VBScript.RegExp" ) .Global = True .Pattern = "[0-9]" RemoveNumbers2 =. استبدال (str، "") End With End Functionكما هو الحال مع وظيفة RemoveText ، من الأفضل استخدام الرمز الثاني في كبيرأوراق العمل لتحسين الأداء.
بمجرد إضافة الرمز إلى المصنف الخاص بك ، يمكنك إزالة جميع الأحرف الرقمية من خلية باستخدام هذه الوظيفة المخصصة:
RemoveNumbers (سلسلة)في حالتنا ، الصيغة في B2 هي:
=RemoveNumbers(A2)
لاقتطاع المسافات البادئة إن وجدت ، قم بتداخل الوظيفة المخصصة داخل TRIM كما تفعل مع الصيغة الأصلية:
=TRIM(RemoveNumbers(A2))
تقسيم الأرقام والنص إلى أعمدة منفصلة
في الحالة التي تريد فيها فصل النص والأرقام إلى عمودين ، سيكون من الجيد إنجاز المهمة باستخدام صيغة واحدة ، يوافق على؟ لهذا ، نقوم فقط بدمج كود الدالتين RemoveText و RemoveNumbers في وظيفة واحدة تسمى SplitTextNumbers أو ببساطة Split أو كل ما تريد :)
كود VBA 1:
وظيفة SplitTextNumbers (str As String ، is_remove_text As Boolean) مثل String Dim sNum، sText، sChar As String sCurChar = sNum = sText = "" بالنسبة إلى i = 1 إلى Len (str) sCurChar = Mid (str، i، 1) إذا كان صحيحًا = IsNumeric (sCurChar) ثم sNum = sNum & amp؛ sCurChar Else sText = sText & amp؛ sCurChar End If Next i If True = is_remove_text ثم SplitTextNumbers = sNum Else SplitTextNumbers = sText End If End Functionرمز VBA 2:
Function SplitTextNumbers (str As String، is_remove_text as Boolean) as String باستخدام 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 (سلسلة ، is_remove_text)أين is_remove_text هي قيمة منطقية تشير إلى الأحرف التي يجب تجريدها:
- TRUE أو 1 - إزالة النص والاحتفاظ بالأرقام
- FALSE أو 0 - إزالة الأرقام والاحتفاظ بالنص
بالنسبة إلى نموذج مجموعة البيانات لدينا ، تأخذ الصيغ هذا الشكل:
لإزالة الأحرف غير الرقمية:
=SplitTextNumbers(A2, TRUE)
لحذف الأحرف الرقمية :
=SplitTextNumbers(A2, FALSE)
نصيحة. لتجنب مشكلة محتملة في المسافات البادئة ، أوصي دائمًا بلف الصيغة التي تزيل الأرقام في وظيفة TRIM:
=TRIM(SplitTextNumbers(A2, FALSE))
أداة خاصة لإزالة الأرقام أو النص
لأولئك الذين يفعلون ذلك ليس مثل تعقيد الأمور دون داع ، سأعرض طريقتنا الخاصة لإزالة النص أو الأرقام في Excel.
بافتراض إضافة Ultimate Suite إلى شريط Excel الخاص بك ، هذا ما تفعله:
- في علامة التبويب بيانات Ablebits ، في المجموعة نص ، انقر فوق إزالة & gt؛ إزالة الأحرف .
نصيحة. إذا كانت النتائج تحتوي على بعض المسافات البادئة ، فإن Trim Spacesأداة القضاء عليها في أي وقت من الأوقات.
هذه هي طريقة إزالة الأحرف النصية أو الرقمية من سلسلة في Excel. أشكرك على القراءة وأتطلع إلى رؤيتك على مدونتنا الأسبوع المقبل!
التنزيلات المتاحة
إزالة النص أو الأرقام في Excel - أمثلة (ملف .xlsm)
Ultimate Suite - نسخة تجريبية (ملف exe.)