جدول المحتويات
يوضح البرنامج التعليمي كيفية استخراج الرقم من سلاسل نصية مختلفة في Excel باستخدام الصيغ وأداة الاستخراج.
عندما يتعلق الأمر باستخراج جزء من سلسلة نصية بطول معين ، يوفر Excel ثلاث وظائف سلسلة فرعية (يسار ويمين ومتوسط) للتعامل مع المهمة بسرعة. عندما يتعلق الأمر باستخراج الأرقام من سلسلة أبجدية رقمية ، يوفر Microsoft Excel… لا شيء.
للحصول على رقم من سلسلة في Excel ، يتطلب الأمر القليل من البراعة وقليلًا من الصبر ومجموعة من الوظائف المختلفة متداخلة في بعضها البعض. أو يمكنك تشغيل أداة Extract وإنجاز المهمة بنقرة واحدة على الماوس. ستجد أدناه تفاصيل كاملة عن كلتا الطريقتين.
كيفية استخراج الرقم من نهاية السلسلة النصية
عندما يكون لديك عمود من السلاسل الأبجدية الرقمية حيث يأتي الرقم بعده نص ، يمكنك استخدام الصيغة التالية للحصول عليه.
RIGHT ( خلية، LEN ( خلية) - MAX (IF (ISNUMBER (MID ( خلية <2)>، ROW (INDIRECT ("1:" & amp؛ LEN ( خلية )))، 1) * 1) = FALSE، ROW (INDIRECT ("1:" & amp؛ LEN ( خلية )))، 0)))سنتناول منطق الصيغة بعد قليل. في الوقت الحالي ، ما عليك سوى استبدال خلية بمرجع إلى الخلية التي تحتوي على السلسلة الأصلية (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 التي تنتمي إلى فئة وظائف النص. يكون إخراج هذه الوظيفة دائمًا نص . في حالتنا ، تكون النتيجة سلسلة فرعية رقمية ، والتي من حيث Excel هي أيضًا نص وليس رقمًا.
إذا كنت بحاجة إلى أن تكون النتيجة رقم (التي يمكنك استخدامها في عمليات حسابية أخرى) ، ثم قم بلف الصيغة في دالة 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. في Excel 2019 والإصدارات الأقدم ، تعمل فقط كصيغة صفيف ، لذا تذكر الضغط على Ctrl + Shift + Enter لإكمالها.
كيف تعمل هذه الصيغة:
لاستخراج رقم من سلسلة أبجدية رقمية ، فإن أول شيء تحتاج إلى معرفته هو مكان بدء الاستخراج. يتم تحديد موضع آخر حرف غير رقمي في سلسلة بمساعدة هذه الصيغة الصعبة:
MAX (IF (ISNUMBER (MID (A2، ROW (INDIRECT ("1:" & amp؛ LEN ( A2)))، 1) * 1) = FALSE، ROW (INDIRECT ("1:" & amp؛ LEN (A2)))، 0))
لفهم المنطق ، دعنا نتحرى الأمر من الداخل :
مجموعة ROW (INDIRECT ("1:" & amp؛ 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؛ TRUE؛ FALSE؛ FALSE؛ FALSE؛ FALSE؛ TRUE؛ TRUE}
تنتقل هذه المصفوفة إلى الاختبار المنطقي لوظيفة IF ، حيث تتم مقارنة كل عنصر من عناصر المصفوفة مقابل FALSE:
IF ({TRUE؛ TRUE؛ FALSE؛ FALSE؛ FALSE؛ FALSE؛ TRUE) ؛ TRUE} = FALSE، ROW (INDIRECT ("1:" & amp؛ LEN (A2)))، 0)
لكل FALSE (قيمة غير رقمية) ، ترجع دالة ROW (INDIRECT ()) أخرى موقعه النسبي في السلسلة. لكل TRUE (قيمة رقمية) ، يتم إرجاع صفر. تبدو المصفوفة الناتجةيلي:
{0؛ 0؛ 3؛ 4؛ 5؛ 6؛ 0؛ 0}
الباقي سهل. تعثر الدالة MAX على أعلى رقم في المصفوفة أعلاه ، وهو موضع آخر قيمة غير رقمية في السلسلة (6 في حالتنا). ببساطة ، اطرح هذا الموضع من الطول الإجمالي للسلسلة التي تم إرجاعها بواسطة LEN ، وقم بتمرير النتيجة إلى RIGHT لإعلامها بعدد الأحرف المراد استخلاصها من الجانب الأيمن من السلسلة:
RIGHT (A2، LEN (A2) - 6)
تم!
كيفية استخراج الرقم من بداية السلسلة النصية
إذا كنت تعمل مع السجلات حيث يظهر النص بعد الرقم ، فيمكنك استخراج الرقم من بداية سلسلة باستخدام هذه الصيغة العامة:
يسار ( خلية ، تطابق (خطأ ، رقم ISNUMBER (MID ( خلية ، ROW (INDIRECT ("1: "& amp؛ LEN ( خلية ) +1)) ، 1) * 1) ، 0) -1)باستخدام السلسلة الأصلية في A2 ، استخدم الصيغة التالية للحصول على الرقم:
=LEFT(A2, MATCH(FALSE, ISNUMBER(MID(A2, ROW(INDIRECT("1:"&LEN(A2)+1)), 1) *1), 0) -1)
بغض النظر عن عدد الأرقام الموجودة في المنتصف أو النهاية ، يتم استخراج رقم البداية فقط:
ملاحظة. في Excel 365 و Excel 2021 ، نظرًا لدعم المصفوفات الديناميكية ، تعمل الصيغة العادية بشكل جيد. في Excel 2019 والإصدارات الأقدم ، يجب الضغط على Ctrl + Shift + Enter لجعلها صراحة صيغة صفيف .
كيف تعمل هذه الصيغة:
هنا ، نستخدم مرة أخرى مجموعة وظائف ROW و INDIRECT و LEN لإنشاء تسلسل من الأرقام يساوي إجمالي الأحرف في السلسلة المصدر بالإضافة إلى 1 (دور ذلكسيصبح الحرف الإضافي واضحًا بعد قليل).
ROW (INDIRECT ("1:" & amp؛ LEN (A2) +1))
MID و ISNUMBER يقومان بنفس المهمة كما في المثال السابق - يسحب MID الأحرف الفردية ويحولها ISNUMBER إلى القيم المنطقية. تنتقل المصفوفة الناتجة من TRUE's و FALSE إلى دالة MATCH كصفيف بحث:
MATCH (FALSE، {TRUE؛ TRUE؛ FALSE؛ FALSE؛ FALSE؛ FALSE؛ TRUE؛ TRUE؛ FALSE}، 0)
MATCH تحسب موضعًا نسبيًا للخطأ الأول ، مما يمنحنا موضع أول حرف غير رقمي في السلسلة (3 في A2). لاستخراج الأرقام السابقة ، نطرح 1 من الموضع أول حرف نصي ونقدم الفرق إلى الوسيطة num_chars وسيطة الدالة LEFT:
LEFT (A2، 3-1)
الآن ، عد إلى الحرف "الإضافي" في التسلسل الذي تم إنشاؤه بواسطة ROW (INDIRECT () + 1)). كما تعلم بالفعل ، يوفر هذا التسلسل نقاط البداية لوظيفة MID. بدون +1 ، سيستخرج MID نفس عدد الأحرف الموجود في السلسلة الأصلية. إذا كانت السلسلة تحتوي على أرقام فقط ، فسيعرض ISNUMBER قيمة TRUE فقط بينما تحتاج MATCH إلى خطأ واحد على الأقل. للتأكد من ذلك ، أضفنا حرفًا آخر إلى الطول الإجمالي للسلسلة ، والتي ستحولها وظيفة MID إلى سلسلة فارغة. على سبيل المثال ، في B7 ، ترجع MID هذه المصفوفة:
{"1" ؛ "2" ؛ "3" ؛ "4" ؛ ""}
ملاحظة. كما هو الحال مع الدالة RIGHT ، تُرجع الدالة LEFT أيضًا قيمة رقميةالسلسلة الفرعية ، وهي نصًا تقنيًا وليس رقمًا. للحصول على النتيجة كرقم بدلاً من سلسلة رقمية ، قم بتداخل الصيغة في دالة 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),"")
كما هو موضح في لقطة الشاشة أدناه ، تعمل الصيغة المحسنة بشكل جميل (تنويه إلى Alex ، خبير Excel لدينا ، لهذا التحسين):
على عكس جميع الأمثلة السابقة ، تكون نتيجة هذه الصيغة رقم . للتأكد من ذلك ، ما عليك سوى ملاحظة القيم المحاذية لليمين في العمود B والأصفار البادئة المقطوعة.
نصيحة. في Excel 365 -Excel 2019 ، هناك حل أبسط بكثير بمساعدة وظيفة TEXTJOIN. يرجى الاطلاع على كيفية إزالة النص والاحتفاظ بالأرقام.
استخراج الرقم من سلسلة نصية باستخدام Ultimate Suite
كما رأيت للتو ، لا توجد صيغة Excel تافهة لسحب الرقم من سلسلة نصية. إذا كنت تواجه صعوبات في فهم الصيغ أو تعديلها لمجموعات البيانات الخاصة بك ، فقد تعجبك هذه الطريقة البسيطة للحصول على رقم من سلسلة في Excel.
مع إضافة Ultimate Suite إلى شريط Excel الخاص بك ، هذه هي الطريقة يمكنه استرداد الرقم بسرعة من أي سلسلة أبجدية رقمية:
- انتقل إلى بيانات Ablebits علامة التبويب & gt ؛ مجموعة نص ، وانقر فوق استخراج :
- حدد كل الخلايا التي تحتوي على سلاسل المصدر.
- في جزء أداة الاستخراج ، حدد زر الاختيار استخراج الأرقام .
- بناءً على ما إذا كنت تريد أن تكون النتائج صيغًا أو قيمًا ، حدد المربع إدراج كصيغة أو اتركه غير محدد (افتراضي).
نصيحتي هي تحديد هذا المربع إذا كنت تريد تحديث الأرقام المستخرجة تلقائيًا بمجرد إجراء أي تغييرات على سلاسل المصدر. إذا كنت تريد أن تكون النتائج مستقلة عن السلاسل الأصلية (على سبيل المثال ، إذا كنت تخطط لإزالة بيانات المصدر في وقت لاحق) ، فلا تحدد هذا المربع.
- انقر فوق الزر إدراج النتائج . تم!
كما في المثال السابق ، نتائجالاستخراج هو أرقام ، مما يعني أنك حر في العد أو الجمع أو المتوسط أو إجراء أي حسابات أخرى معهم.
في هذا المثال ، اخترنا إدراج النتائج كـ القيم ، والوظيفة الإضافية نفذت بالضبط ما طُلب منه:
إذا تم تحديد خانة الاختيار إدراج كصيغة ، فأنت ' د لاحظ صيغة في شريط الصيغة. فضولي لمعرفة أي واحد؟ ما عليك سوى تنزيل الإصدار التجريبي من Ultimate Suite وشاهد بنفسك :)
التنزيلات المتاحة
رقم استخراج Excel - نموذج مصنف (ملف .xlsx)
Ultimate Suite - إصدار تجريبي (.exe ملف)