VBA: كيفية إزالة الأرقام من سلسلة نصية

دليل أكاديمي شامل يشرح كيفية إزالة الأرقام من السلاسل النصية في بيئة Excel VBA باستخدام التعابير النمطية والخوارزميات البرمجية المتقدمة.

Mohammed looti أكاديمي وباحث متخصص في علم النفس
تاريخ النشر
تمت المراجعة العلمية · د. مروة عبد العظيم · 22 أكتوبر، 2026
مراجعة وتدقيق علمي معتمد تاريخ التدقيق: 22 أكتوبر، 2026
د. مروة عبد العظيم دكتوراه في علم النفس
عضو هيئة التدريس • جامعة كربلاء
معايير التدقيق والاعتماد السريري

يخضع هذا المحتوى لمعايير ضبط الجودة والتدقيق العلمي والأكاديمي الصارمة في شبكة علم النفس العربي، لضمان صحة المعلومات ودقتها السريرية ومطابقتها لأحدث الأدلة والبراهين الصادرة عن الجمعيات النفسية والطبية المعتمدة (APA / WHO).

تمثل معالجة البيانات النصية وتنقيتها إحدى الركائز الجوهرية في هندسة البيانات الحديثة والتحليلات الحوسبية داخل بيئات الأعمال والبحوث الأكاديمية على حد سواء. فعند التعامل مع قواعد البيانات المستخرجة من الأنظمة القديمة أو استمارات الاستبيان المفتوحة أو سجلات تتبع الأنشطة، غالباً ما تظهر السلاسل النصية مشوبة بمحارف رقمية متداخلة تؤدي إلى تشويه المعنى الدلالي للنصوص وإعاقة عمليات التصنيف والتحليل الدقيق. في هذا السياق، تبرز لغة البرمجة Visual Basic for Applications المعروفة اختصاراً باسم (VBA) بصفتها أداة أتمتة مدمجة واسعة الانتشار، تمكّن المطورين والمحللين من تطويع بيئة برمجيات Microsoft Office للقيام بعمليات تنقية البيانات المعقدة بكفاءة عالية ومنهجية موثوقة.

تكمن مشكلة تداخل الأرقام مع النصوص في كون السلاسل النصية غير المهيكلة تجمع بين المعرفات الوظيفية، والرموز الكودية، والأسماء الصريحة في حقل بيانات واحد، مما يتطلب تدخلاً برمجياً منهجياً لفصل هذه المكونات. تتجاوز هذه العملية مجرد الحذف السطحي؛ إذ تستلزم فهماً عميقاً لكيفية تمثيل البيانات الحرفية في الذاكرة العشوائية للحاسوب، والتحكم في المؤشرات المنطقية، واختيار الخوارزمية المثلى من حيث استهلاك الذاكرة وسرعة المعالجة الحسابية. تتنوع هذه الخيارات بين استدعاء محركات التعابير النمطية المتقدمة واستخدام الحلقات التكرارية لفحص المحارف فرادى، وهو ما يشكل جوهر المعالجة المتقدمة للسلاسل النصية.

يهدف هذا الدليل المرجعي الموسع إلى تقديم دراسة أكاديمية وتطبيقية متكاملة لآليات إزالة الأرقام من السلاسل النصية باستخدام لغة VBA ضمن بيئة Microsoft Excel. سنستعرض الأسس المعمارية لتمثيل النصوص، والتحليل الدقيق لمحرك التعابير النمطية VBScript.RegExp، بالإضافة إلى تشريح الخوارزميات البديلة القائمة على الفحص المباشر لجداول المحارف، وصولاً إلى استراتيجيات تحسين الأداء عند التعامل مع مجموعات البيانات الكبيرة (Big Data) لضمان تحقيق أعلى كفاءة ممكنة وخلو الشيفرات البرمجية من الثغرات التشغيلية.

1. المقدمة والأسس النظرية لمعالجة النصوص في VBA

1.1 مفهوم السلاسل النصية في بيئة Visual Basic for Applications

في بيئة Visual Basic for Applications، يُعرف نوع البيانات النصية String بأنه بنية تعتمد على تمثيل نصوص BSTR (Basic String) المستخدمة تاريخياً في بنية نماذج الكائنات المدمجة (COM). يتميز هذا النوع بوجود ترويسة طولية (Length Prefix) تسبق المحارف الفعلية في الذاكرة بأربعة بايتات، تخزن طول السلسلة النصية بدقة، تليها مصفوفة من المحارف المشفرة وفق نظام الترميز الموحد (Unicode) بمعيار UTF-16، وتنتهي بمحرفين فارغين من نوع Null للتوافقية البرمجية. هذا التكوين المعماري يعني أن كل محرف يشغل في الأصل مساحة قدرها اثنان بايت (16 بت)، مما يتيح تمثيل مختلف لغات العالم والرموز الخاصة بكل سلاسة واستقرار.

من الناحية الرياضية والمنطقية، تعد السلاسل النصية في بيئة VBA كائنات غير قابلة للتغيير الجزئي المباشر في موضعها (Immutable in-place) بطريقة مباشرة، حيث يؤدي أي تعديل يطرأ على محتوى السلسلة—مثل حذف رقم أو استبدال حرف—إلى قيام المحرك البرمجي بتخصيص مساحة جديدة تماماً في الذاكرة العشوائية لتخزين السلسلة الناتجة، ثم نسخ البيانات المطلوبة إليها وتدمير السلسلة القديمة لاحقاً. هذا السلوك يفرض تكلفة تشغيلية على مستوى إدارة الذاكرة، ويجعل من فهم الخصائص الهيكلية للسلاسل ضرورة حتمية قبل كتابة خوارزميات التعديل النصي المكثف، خاصة عند التعامل مع مصفوفات ضخمة من النصوص.

تبرز أهمية عزل البيانات النصية عن الرموز العددية في المراحل التحضيرية للتحليلات الإحصائية المتقدمة وتطبيقات معالجة اللغات الطبيعية (NLP). فعند استخراج المتجهات النصية، يُنظر إلى المحارف الرقمية كعناصر تشويش تخفض من دقة نماذج التصنيف الآلي وتؤثر سلباً على مصفوفات التشابه الدلالي، مما يجعل التنقية الدقيقة في مرحلة إعداد البيانات خطوة منهجية فاصلة لتحقيق نتائج بحثية وعملياتية موثوقة.

1.2 دواعي وأهمية تنقية النصوص وإزالة المحارف الرقمية

تواجه مؤسسات الأعمال والمؤسسات الأكاديمية تحدياً مستمراً ناتجاً عن تغذية المستودعات المركزية ببيانات غير متجانسة مستخرجة من أنظمة تخطيط موارد المؤسسات (ERP) أو الملفات النصية غير المهيكلة المسحوبة عبر بروتوكولات الربط القديمة. غالباً ما تدمج هذه البيانات المعرفات الشخصية للمستخدمين بأكواد تسلسلية وظيفية داخل حقل نصي واحد؛ ومثال ذلك دمج الرقم الوظيفي باسم الموظف مثل “9482Ahmed” أو دمج رموز المستودعات بأسماء المنتجات. هذه التوليفة المعقدة تجعل الفهرسة واسترجاع السجلات عبر المفاتيح النصية أمراً بالغ الصعوبة ومليئاً بالأخطاء التطابقية.

تتجلى أهمية إزالة المحارف الرقمية في مرحلة تحسين جودة البيانات (Data Cleansing) لتقليل معدلات الأخطاء الإحصائية وتجنب الازدواجية في السجلات. إن وجود أرقام عشوائية أو معرفات قديمة يمنع محركات المطابقة الغامضة (Fuzzy Matching) من التعرف على الكيانات المتطابقة، كما يعوق بناء قواميس المفردات الموحدة في المنظومات المؤسسية. كما أن معالجة الأسماء وإزالة المؤشرات العددية عنها يعيد توحيد المعايير ويوفر أرضية خصبة لعمليات ربط الجداول وتحليل الترددات الحرفية بصورة خالية من أي انحرافات قياسية ناتجة عن التداخلات الهجينة للأحرف والأرقام.

1.3 مقارنة بين الدوال المدمجة والحلول البرمجية المخصصة

توفر برمجية Microsoft Excel مجموعة من الدوال الحسابية والصيغ المدمجة مثل SUBSTITUTE وTEXTJOIN والدوال المصفوفية الحديثة مثل LAMBDA، إلا أن تطبيق هذه الدوال القياسية لإزالة الأرقام يواجه قيوداً جوهرية في المرونة والكفاءة. فعلى سبيل المثال، يتطلب استخدام دالة SUBSTITUTE التقليدية إنشاء عشرة تكرارات متداخلة على الأقل لاستهداف الأرقام من صفر إلى تسعة، مما ينتج عنه صيغ رياضية شديدة التعقيد يصعب تصحيحها أو صيانتها وتستهلك طاقة معالجة هائلة عند تطبيقها على عشرات الآلاف من الخلايا المتتالية.

في المقابل، توفر الدوال المعرفة من قبل المستخدم (User-Defined Functions – UDF) عبر لغة VBA حلاً معيارياً يتسم بالمرونة المطلقة، حيث تُغلّف الخوارزمية داخل دالة مخصصة ذات اسم دلالي واحد، وتستقبل المتغيرات وتعيد القيم المصقولة بآلية محكمة وواضحة. من حيث الاستهلاك الحسابي وإدارة الموارد، تتميز دوال VBA المكتوبة باحترافية بقدرتها على تحرير الذاكرة وتخطي تعقيدات شجرة الحسابات التلقائية لبرنامج إكسل، مما يمنح المطورين سيطرة كاملة على تدفق البيانات ويقلل من زمن المعالجة الإجمالي مقارنة بالصيغ المترابطة المعقدة.

2. الأساس البرمجي: استخدام التعابير النمطية عبر VBScript

2.1 مدخل إلى مكتبة VBScript.RegExp ودورها في المعالجة

تمثل مكتبة VBScript.RegExp إحدى أهم أدوات معالجة النصوص في بيئات ويندوز البرمجية، حيث توفر محرك تعابير نمطية متكامل جرى تصميمه تاريخياً لدعم لغات البرمجة النصية كجزء من بنية Windows Script Host. تعود الجذور النظرية لمحركات التعابير النمطية إلى أعمال عالم الرياضيات والمنطق ستيفن كول كلين (Stephen Cole Kleene) في منتصف القرن العشرين، والذي صاغ المفاهيم الرياضية للمجموعات المنتظمة والأوتوماتا المحدودة، قبل أن يقوم كين طومسون (Ken Thompson) بدمجها برمجياً في محررات النصوص الحوسبية ومحركات البحث النمطي.

يعتمد مفهوم مطابقة الأنماط (Pattern Matching) داخل محرك التعابير النمطية على بناء قواعد منطقية محددة تصف السمات التجريدية للنص المستهدف بدلاً من الاعتماد على أسلوب البحث الخطي المباشر عن الكلمات الثابتة. تمنح هذه المعمارية ميزة تفوق استثنائية؛ إذ يمكن بعبارة نمطية واحدة التعرف على أي رمز ينتمي إلى الفئات الرقمية واستبداله، دون الحاجة إلى كتابة شروط منطقية متعددة أو استدعاءات متكررة لدوال البحث، مما يحول عملية المعالجة إلى عملية متوازية ومنظمة على المستوى الداخلي للمحرك.

2.2 تشريح النمط الأبجدي الرقمي وتحديد نطاق الأرقام

في لغة التعابير النمطية المدعومة بمكتبة VBScript، يُحدد نطاق الأرقام باستخدام الفئة المحرفية المربعة [0-9]، والتي تشير بوضوح إلى مطابقة أي محرف رقمي منفرد يقع ترتيبه بين الصفر والتسعة ضمن جدول ترميز ASCII القياسي. يتطابق هذا التعبير وظيفياً مع الرمز التعويضي المختصر d، والذي يُعد اختصاراً لفئة الخانات العشرية (Digits)؛ حيث يقوم المحرك الداخلي بتفسير كلا الرمزين لمسح السلسلة واقتناص أية محارف توافق هذه الخصائص المحددة.

عند فحص السلسلة النصية، يتعامل المحرك مع كل ظهور للمحرف الرقمي باعتباره هدفاً مطابقاً، سواء ورد الرقم منفرداً في بداية السلسلة أو وردت مجموعة أرقام متتالية في منتصفها أو نهايتها. وتتميز هذه الأنماط بحساسية هندسية عالية تجاه المحارف المحيطة، حيث يمكن ضبط النمط لتجاهل أو تضمين الرموز الخاصة والتنسيقات الرقمية المجاورة مثل علامات التنصيص أو الفواصل الزمنية، مما يضمن دقة استئصال المكونات الرقمية دون المساس بالحروف الأبجدية المتصلة بها مباشرة.

2.3 خاصية Global وأثرها على الاستبدال الشامل

تحتوي بنية كائن التعبير النمطي في مكتبة VBScript على خاصية منطقية محورية تحمل الاسم Global. تحدد هذه الخاصية سلوك المحرك فيما إذا كان يجب التوقف فور العثور على أول تطابق في السلسلة النصية، أم الاستمرار في مسح كافة أجزاء السلسلة حتى نهايتها. فعند ضبط الخاصية بالقيمة المنطقية الافتراضية (RegExp.Global = False)، سيكتفي المحرك بحذف الرقم الأول فقط متجاهلاً كافة الأرقام اللاحقة، وهو ما يتعارض تماماً مع أهداف تنقية البيانات الشاملة.

وعليه، فإن تعيين القيمة المنطقية RegExp.Global = True يُلزم المؤشر الداخلي للمحرك بمتابعة القراءة والاستبدال عبر كامل السلسلة النصية الممررة إليه. يضمن هذا الإجراء البرمجي استئصال كافة الحالات العددية بصرف النظر عن موقعها الجغرافي داخل النص، سواء كانت موزعة في أجزاء متباعدة أو متجمعة في مقاطع محددة، مما يمنح عملية التنقية دقة رياضية مطلقة وموثوقية تنفيذية تامة في مرحلة الإنتاج.

3. التحليل التفصيلي لكود الدالة المخصصة RemoveNumbers

3.1 تفكيك البنية التركيبية للدالة وتصريح المعاملات

لتنفيذ هذه الوظيفة، تُصاغ دالة مخصصة ذات بنية قياسية تعتمد على نمط التسمية الدلالية. تبدأ الدالة بتصريح وصول عام لضمان إمكانية استدعائها من أي وحدة نمطية أو صيغة خلوية داخل المصنف. يوضح النموذج التالي الهيكل الأساسي للدالة:

Function RemoveNumbers(ByVal CellText As String) As String

يعد تصريح المعامل ByVal (تمرير بالقيمة) خطوة منهجية بالغة الأهمية في هندسة برمجيات VBA؛ إذ يمنع الإجراء من إحداث أي تعديل غير مقصود على متغير الإدخال الأصلي المخزن في الذاكرة، ويكتفي بإنشاء نسخة محلية للعمل عليها داخل النطاق الخاص بالدالة. كما أن تحديد نوع الإدخال As String ونوع المخرج As String يضمن فرض فحص صارم للأنماط (Strong Typing)، مما يمنع تمرير هياكل غير صالحة ويسهم في تحسين كفاءة تجميع الكود البرمجي وتقليل استهلاك مساحات التكديس المؤقتة (Stack Memory).

3.2 إدارة الكائنات وإنشاؤها ديناميكياً باستخدام CreateObject

في بيئة VBA، يمكن إنشاء كائن التعبير النمطي من خلال آلية الربط المتأخر (Late Binding) عبر الدالة المدمجة CreateObject، كما في الشيفرة التالية:

Dim regEx As Object
Set regEx = CreateObject("VBScript.RegExp")

تتميز آلية الربط المتأخر بميزة استراتيجية تتمثل في تقليل مشكلات التوافق عند توزيع مصنف الإكسل على أجهزة مستخدمين آخرين؛ إذ لا تتطلب تفعيل مراجع المكتبة يدوياً داخل محرر Visual Basic. يقوم نظام التشغيل بالبحث عن مكتبة الربط الديناميكي المسجلة vbscript.dll وتفعيلها أثناء التشغيل الفعلي للبرنامج، مما يوفر مرونة عالية للحلول البرمجية المشتركة.

ومع ذلك، يجب الانتباه إلى الآثار التشغيلية لإدارة دورة حياة الكائن البرمجي؛ فاستدعاء CreateObject داخل الدالة المخصصة يعني أن كل خلية في ورقة العمل تستدعي الدالة ستتسبب في إنشاء كائن جديد في الذاكرة العشوائية وتدميره فور اكتمال التنفيذ. ورغم أن هذا يضمن تحرير الذاكرة وتفادي تسربها (Memory Leaks)، إلا أنه قد يرتب حملاً زمنياً إضافياً على المعالج في حال معالجة آلاف الصفوف بصورة متزامنة، وهو ما سنستعرض حلوله المثلى في الأقسام اللاحقة.

3.3 ميكانيكية عمل دالة Replace داخل كائن التعبير النمطي

تعتمد آلية التطهير الأساسية على تكوين خصائص الكائن البرمجي وضبطها بدقة لاستئصال الأرقام عبر استدعاء دالة الاستبدال المدمجة به، كما هو موضح أدناه:

With regEx
    .Pattern = "[0-9]"
    .Global = True
    RemoveNumbers = .Replace(CellText, "")
End With

تستقبل دالة .Replace معاملين رئيسيين: الأول هو السلسلة النصية الأصلية المراد معالجتها (CellText)، والثاني هو السلسلة البديلة التي ستحل محل أي تطابق يتم العثور عليه. وبتمرير سلسلة نصية فارغة ""، يقوم المحرك بإزالة كافة المحارف التي تحقق شرط النمط [0-9] بصورة كاملة وإعادة ربط الأجزاء النصية المتبقية دون فراغات داخلية.

في السطر الأخير، تُسند القيمة المرجعة مباشرة إلى اسم الدالة RemoveNumbers لتسليم النتيجة النهائية إلى بيئة إكسل. تتميز هذه العملية بحفاظها الصارم على سلامة المحارف النصية، وعلامات الترقيم، والحروف الأبجدية بكافة لغاتها، مما يضمن خروج النص مصقولاً وخالياً تماماً من أي مكونات رقمية مع الاحتفاظ الكامل بتركيبته المعجمية الأصلية.

4. دليل التطبيق العملي داخل بيئة Microsoft Excel

4.1 خطوات إدراج الكود البرمجي عبر محرر Visual Basic Editor

لتحويل هذا الإجراء البرمجي إلى وظيفة تشغيلية فعالة داخل مصنف إكسل، يتعين على المستخدم الانتقال إلى بيئة التطوير المتكاملة الخاصة بالتطبيقات. يمكن الوصول إلى محرر Visual Basic Editor بالنقر المباشر على مفتاحي Alt + F11 من لوحة المفاتيح، أو عبر تفعيل تبويب المطور (Developer Tab) من خيارات البرنامج والنقر على زر Visual Basic.

يجب التنبيه بحزم إلى ضرورة إدراج وحدة نمطية قياسية (Standard Module) من قائمة Insert > Module، وتجنب لصق الكود داخل وحدات أوراق العمل التابعة (Worksheet Modules) أو وحدة المصنف (ThisWorkbook). تضمن الوحدات النمطية القياسية تسجيل الدالة في النطاق العام للمشروع البرمجي، مما يتيح لمحرك حسابات إكسل التعرف عليها كدالة UDF صالحة للاستخدام المباشر داخل كافة أوراق العمل المتضمنة.

VBA remove numbers from string
VBA remove numbers from string

4.2 استدعاء الدالة كمعادلة معرفة من قبل المستخدم في الخلايا

بمجرد إدراج الكود وحفظه، يصبح بالإمكان استدعاء الدالة المخصصة بنفس الطريقة المتبعة مع الدوال الافتراضية للبرنامج، مثل دالة SUM أو VLOOKUP. تتم كتابة المعادلة في شريط الصيغ وفق النموذج الآتي:

=RemoveNumbers(A2)

حيث يمثل A2 مرجع الخلية المحتوية على النص المختلط المراد تنقيته. على سبيل المثال، إذا كانت الخلية تحتوي على القيمة النصية "4009Andy" الناتجة عن دمج رقم الموظف باسمه، فإن استدعاء الدالة سيقوم فورياً بتحليل السلسلة وإزالة الخانات الأربع الأولى، لتعيد الخلية المحسوبة القيمة النصية الصافية "Andy". يتفاعل برنامج إكسل مع هذه الصيغة تلقائياً، مع دعم ميزة الإكمال التلقائي عند بدء كتابة اسم الدالة، مما يوفر تجربة استخدام مريحة ومطابقة للمعايير القياسية للبرمجية.

4.3 أساليب السحب والتعميم التلقائي على مجموعات البيانات

عند التعامل مع جداول بيانات موسعة تتضمن آلاف السجلات، يُطبق مبدأ التعميم التلقائي باستخدام مقبض التعبئة (Fill Handle) في الزاوية السفلية اليسرى للخلية التي تحتوي على الصيغة، أو بالنقر المزدوج عليه لنشر المعادلة بطول العمود المستهدف. يعتمد هذا الإجراء على مراجع الخلايا النسبية لضمان تكييف المدخلات مع كل صف على حدة بصورة آلية وسريعة.

بعد استكمال المعالجة، يُوصى من الناحية العملية بتحويل النتائج المحسوبة إلى قيم نصية ثابتة عبر نسخ العمود الناتج ولصقه كقيم (Paste Values). يمنع هذا الإجراء إعادة حساب الدالة المخصصة عند كل تعديل طفيف يطرأ على المصنف في المستقبل، مما يوفر موارد المعالج بشكل ملموس، ويضمن استقرار البيانات المستخرجة في حال نقلها إلى مصنفات خارجية لا تحتوي على نفس الشيفرة المصدرية.

5. معالجة الحالات الخاصة والترميزات الرقمية المتنوعة

5.1 التعامل مع الأرقام المشرقية (الأرقام العربية-الهندية)

تقتصر الفئة النمطية [0-9] أو الرمز d في إعدادات VBScript الافتراضية على مطابقة الأرقام اللاتينية (المغربية الأصل). ولكن في كثير من البيئات المؤسسية في منطقة الشرق الأوسط، تحتوي النصوص على أرقام مشرقية (الرموز العربية-الهندية: ٠، ١، ٢، ٣، ٤، ٥، ٦، ٧، ٨، ٩). في هذه الحالة، تفشل الأنماط القياسية في التعرف على هذه الخانات، وتبقى مشوبة في النصوص بعد محاولة التنقية.

لحل هذه المعضلة وتوفير تغطية شاملة لكافة المنظومات الرقمية، يتم توسيع نمط التعبير النمطي ليدمج النطاقين معاً ليصبح:

.Pattern = "[0-9٠-٩]"

يتيح هذا التعديل البسيط للمحرك استهداف الأرقام بكافة أشكالها في المستندات متعددة اللغات. ومع ذلك، يجب توخي الحذر عند كتابة محارف اليونيكود مباشرة داخل محرر VBA الكلاسيكي؛ إذ يعتمد المحرر على ترميز نظام التشغيل المحلي (ANSI Code Page)، وقد تظهر المحارف المشرقية كعلامات استفهام في حال اختلاف إعدادات اللغة في نظام ويندوز، وهو ما يمكن تجاوزه برمجياً بالاعتماد على قيم الترميز السداسية العشرية للمحارف لتفادي أخطاء التوافق الإقليمي.

5.2 إدارة الرموز الرياضية والفواصل المرتبطة بالأرقام

من الأخطاء الفنية الشائعة في هندسة البيانات هو الخلط بين “الأرقام كمحارف” و”الأرقام كقيم حسابية”. فحذف الأرقام وحدها عبر استبدال الخانات العشرية يترك خلفه الرموز الرياضية والفواصل التي كانت ترتبط منطقياً بالقيمة العددية، مثل الفواصل العشرية (.)، وفواصل الآلاف (,)، وعلامات الجمع والطرح (+, -)، وعلامات النسبة المئوية (%). ينتج عن ذلك بقاء نصوص مشوهة مثل "بلغ الإجمالي .%" بدلاً من تنقية العبارة بالكامل.

لتجاوز هذا التشوه الدلالي، يجب هندسة تعبير نمطي أكثر تخصصاً وفق متطلبات المشروع التحليلي. فإذا كان الهدف هو استئصال القيمة الرقمية ومرفقاتها الحسابية بالكامل، يتم توسيع النمط ليشمل التراكيب الرياضية عبر إضافة محددات الحالات الخاصة، مع مراعاة استخدام محارف الهروب (Escape Characters) مثل . لمنع تداخل الرموز النمطية مع محارف النظام الخاصة، وضمان حماية علامات الترقيم النصية الطبيعية (كعلامات الوقف والنقطة في نهاية الفقرات) من الحذف العشوائي.

5.3 الحفاظ على المسافات البيضاء وضمان اتساق النص المتبقي

يؤدي استئصال الأرقام من منتصف النصوص—مثل استبدال "قسم 12 التدريب"—إلى ظهور مسافات بيضاء مزدوجة متتالية ناتجة عن إزالة الرقم مع بقاء المسافات الفاصلة السابقة واللاحقة له. هذا التباعد غير المتناسق يشوه المظهر الجمالي للنصوص ويؤدي إلى أخطاء في عمليات الفهرسة وحساب عدد الكلمات في التحليلات الإحصائية.

لضمان الحصول على نص مصقول ومتسق، يُنصح بدمج دالة إكسل المدمجة للتنسيق داخل كود VBA عبر استدعاء WorksheetFunction.Trim على الناتج النهائي للتعبير النمطي، كما في الصيغة البرمجية التالية:

RemoveNumbers = WorksheetFunction.Trim(.Replace(CellText, ""))

تقوم هذه الإضافة بإزالة المسافات الزائدة من بداية ونهاية السلسلة، فضلاً عن دمج المسافات المزدوجة المتتالية بين الكلمات إلى مسافة واحدة مفردة، مع الحفاظ على الفواصل الطبيعية بين الفقرات، مما يضمن اتساق النصوص المعالجة وجاهزيتها المباشرة للتقارير التنفيذية دون الحاجة إلى معالجة ثانوية لاحقة.

6. بدائل برمجية خوارزمية: الحلقات التكرارية وفحص المحارف

6.1 خوارزمية الفحص الحرفي باستخدام Mid والحلقة For…Next

بالإضافة إلى محركات التعابير النمطية، توفر بيئة VBA القدرة على بناء خوارزميات فحص إجرائية أصيلة تعتمد على التنقل الخطي داخل السلسلة النصية محرفاً تلو الآخر. تعتمد هذه التقنية على دمج حلقة تكرارية من نوع For...Next مع الدالة النصية الأساسية Mid$ والدالة الحسابية Len لقياس طول السلسلة الإجمالي.

تتلخص الخوارزمية في مسح السلسلة من المؤشر الأول حتى الأخير، حيث يُستخرج كل محرف بصورة منفردة وتُفحص خصائصه عبر شرط منطقي. فإذا كان المحرف ينتمي إلى فئة الحروف الأبجدية المقبولة، يُدمج في نهاية متغير تراكمي وسيط يمثل السلسلة المنقاة، بينما يتم تجاهل المحارف الرقمية بصورة كاملة. يمنح هذا الأسلوب المطور تحكماً منطقياً مطلقاً في تحديد شروط التصفية دون الحاجة إلى تحميل أي مكاتب تشغيلية خارجية إضافية في الذاكرة.

6.2 التحقق باستخدام جدول محارف ASCII ودالة IsNumeric

تتنوع الآليات المنطقية لفحص المحرف المستخرج داخل الحلقة التكرارية، ومن أكثر هذه الآليات دقة الاعتماد على المقارنة المباشرة لقيم جدول ترميز ASCII القياسي عبر دالة Asc أو نسختها الدولية AscW. تقع الأرقام اللاتينية من الصفر إلى التسعة في النطاق المحرفي المحدد بين الرمزين 48 و 57 على التوالي؛ وعليه يمكن صياغة الشرط المنطقي ببساطة كالآتي:

If AscW(currentChar) < 48 Or AscW(currentChar) > 57 Then
    resultString = resultString & currentChar
End If

من الضروري التحذير من مغبة استخدام دالة IsNumeric لفحص المحارف المفردة كبديل لشرط النطاق؛ إذ إن دالة IsNumeric في VBA تحتوي على تعقيدات ترتبط بالإعدادات الإقليمية للنظام، وقد تفسر علامات العملات (مثل $) أو علامات الجمع والطرح (+, -) أو حتى الفواصل والنقاط على أنها قيم رقمية صالحة، مما يؤدي إلى استبعاد غير مقصود لرموز نصية وظيفية أساسية. بالمقابل، يمثل استخدام مشغل المقارنة النمطية المدمج Like خياراً ممتازاً وواضحاً؛ إذ يتيح فحص المحرف باستخدام الشرط الخفيف If Not currentChar Like "[0-9]" Then محققاً الجمع بين وضوح البنية ودقة التنفيذ الحسابي.

6.3 مقارنة الأداء الحسابي بين الحلقات والتعابير النمطية

تخضع المفاضلة بين خوارزميات الحلقات التكرارية ومحركات التعابير النمطية لاعتبارات دقيقة تتعلق بحجم البيانات وطبيعة السلاسل النصية المعالجة. يتميز كائن التعبير النمطي بقوته الفائقة ومرونته الهيكلية، غير أن عملية استدعائه عبر نظام الربط وتوليد كائنات COM ترتب تكلفة تشغيلية ملحوظة (Overhead) لا يمكن إغفالها عند تكرار الاستدعاء داخل الدوال الخلوية آلاف المرات.

في المقابل، تتميز الحلقات التكرارية المستندة إلى دالة AscW بالسرعة التنفيذية الفائقة لأنها تعتمد على عمليات حسابية منخفضة المستوى تُنفذ مباشرة داخل محرك VBA دون وساطة برمجية خارجية. بناءً على قياسات الأداء البرمجية، تتفوق الحلقات التكرارية الصريحة في السرعة بنسبة تصل إلى أربعة أضعاف مقارنة بكائن التعبير النمطي في حال استدعاء دالة UDF متكررة على خلايا مفردة في جداول بيانات ضخمة، بينما تبرز كفة التعابير النمطية عند الرغبة في تطبيق قواعد استبعاد مركبة تتضمن فئات متباينة من المحارف يصعب حصرها بالشروط المنطقية البسيطة.

7. تحسين الأداء وإدارة الذاكرة في قواعد البيانات الضخمة

7.1 الربط المبكر مقابل الربط المتأخر لمكتبة RegExp

عند الاعتماد على التعابير النمطية في بيئات الإنتاج التي تتعامل مع مئات الآلاف من السجلات، يبرز التمييز بين الربط المبكر (Early Binding) والربط المتأخر (Late Binding) كأحد أهم محددات سرعة التنفيذ. يتحقق الربط المبكر عبر تفعيل مرجع Microsoft VBScript Regular Expressions 5.5 مباشرة من قائمة Tools > References داخل محرر VBA، وتصريح الكائن باستخدام بنيته الصريحة:

Dim regEx As RegExp
Set regEx = New RegExp

يوفر أسلوب الربط المبكر ميزة الإكمال التلقائي للكود (IntelliSense) للمطورين، مما يسهل عمليات التطوير والتدقيق البرمجي، غير أن ميزته الأهم تكمن في تمكين مترجم VBA من ربط العناوين الوظيفية للدوال أثناء مرحلة التصريف الأولي، متخطياً مرحلة الاستعلام الديناميكي البطيئة التي ترافق أسلوب الربط المتأخر عند كل تشغيل. يُترجم هذا التحسين إلى تقليص ملحوظ في زمن التنفيذ بنسبة تتراوح بين 15% إلى 30% في المعالجات الحسابية المكثفة.

7.2 إعادة استخدام كائن التعبير النمطي عبر المتغيرات الثابتة

لحل معضلة استهلاك الموارد الناتجة عن إنشاء وإتلاف كائن التعبير النمطي في كل مرة تُستدعى فيها الدالة من ورقة العمل، يمكن استخدام الكلمة المفتاحية Static داخل الدالة المخصصة لتثبيت الكائن في الذاكرة العشوائية طوال فترة عمل المصنف، كما في المثال التالي:

Static regEx As Object
If regEx Is Nothing Then
    Set regEx = CreateObject("VBScript.RegExp")
    regEx.Pattern = "[0-9]"
    regEx.Global = True
End If
RemoveNumbers = regEx.Replace(CellText, "")

بهذه المنهجية المعمارية، يتم تخصيص الكائن وضبط نمطه لمرة واحدة فقط عند أول استدعاء للدالة، بينما تستفيد كافة الاستدعاءات اللاحقة من نفس الكائن القائم مسبقاً في الذاكرة. يلغي هذا النمط البرمجي تكلفة دورات التخصيص والإتلاف المتكررة، مما يؤدي إلى طفرة نوعية في سرعة استجابة ورقة العمل واختفاء التباطؤ الملحوظ أثناء إعادة حساب الصيغ الرياضية المعقدة في قواعد البيانات الكبيرة.

7.3 تعطيل محركات التحديث التلقائي أثناء المعالجة الجماعية

عند بناء إجراءات تشغيلية موسعة (Sub Procedures) تتولى تنظيف أعمدة بيانات بأكملها دفعة واحدة بدلاً من استخدام الدوال الخلوية، يجب التدخل لإيقاف التفاعلات المرئية والحسابية لبرنامج إكسل التي تستهلك النصيب الأكبر من قدرات المعالجة المركزية، وذلك من خلال الأوامر التالية:

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

تقوم هذه التعليمات بتعطيل إعادة رسم الشاشة، وإيقاف الحساب التلقائي لكافة صيغ المصنف، وتعطيل استشعار الأحداث البرمجية أثناء تنفيذ عملية التنقية، مما يكرس موارد الجهاز بالكامل للمعالجة النصية. وفي هذا الإطار، يُنصح دائماً بقراءة النطاق الخلوي بالكامل وتفريغه في مصفوفة ذاكرة داخلية (Memory Array)، ثم معالجة نصوص المصفوفة بالكامل داخل الذاكرة الافتراضية، وإعادة كتابتها إلى ورقة العمل في عملية إسناد واحدة، مما يقلص زمن التشغيل من دقائق إلى بضع ثوانٍ معدودة.

8. معالجة الأخطاء والتحقق من صحة المدخلات

8.1 التعامل مع القيم الفارغة والبيانات غير المتوقعة

في سياقات العمل المؤسسية، نادراً ما تكون مجموعات البيانات نقية بالكامل؛ إذ غالباً ما تحتوي الخلايا المستهدفة على أخطاء حسابية ناجمة عن صيغ سابقة (مثل #N/A أو #VALUE!) أو تكون الخلايا فارغة تماماً (Empty/Null). إذا تم تمرير خلية تحوي خطأ إلى دالة نصية تتوقع متغيراً من نوع String، فإن ذلك يتسبب فورياً في انهيار الدالة وظهور خطأ توقف مفاجئ (Type Mismatch – Error 13).

لتجنب هذا الإخفاق، يُستحسن تعريف المعامل العام للدالة كنوع مرن Variant بدلاً من String الصريح، والبدء بفحص صحة البيانات الواردة باستخدام دالة IsError ودالة IsEmpty. فإذا تبين أن الخلية فارغة أو تحتوي على قيمة خطأ، تعيد الدالة سلسلة فارغة أو نفس كود الخطأ الأصلي بأمان دون مقاطعة سير العمل الحسابي لبقية خلايا المصنف.

كذلك ينبغي مراعاة سلوك الدالة عند تمرير خلايا تحتوي على قيم رقمية خالصة (Pure Numbers). ففي هذه الحالة، يجب أن يؤدي حذف كافة الخانات إلى إرجاع سلسلة نصية فارغة "" بصورة طبيعية دون إحداث ارتباك في بنية الإرجاع، مما يؤكد على أهمية اختبار سلامة أنواع البيانات المدخلة قبل الشروع في مطابقة الأنماط النمطية.

8.2 بناء كتل تصيد الأخطاء الاحترافية On Error

يعد تضمين معالجات الأخطاء الهيكلية أحد الفوارق الأساسية بين الشيفرات التجريبية والبرمجيات الاحترافية الموجهة لبيئات الإنتاج. يُبنى معالج الأخطاء في VBA باستخدام العبارة التوجيهية On Error GoTo، والتي تقوم بإعادة توجيه مسار التنفيذ إلى كتلة مخصصة لإدارة الاستثناءات في حال وقوع أي خلل غير محسوب، كما يتضح في البنية الهيكلية التالية:

Function RobustRemoveNumbers(ByVal InputVal As Variant) As String
    On Error GoTo CleanUp
    If IsError(InputVal) Or IsEmpty(InputVal) Then Exit Function
    ' [إجراءات المعالجة النصية هنا]
    Exit Function
CleanUp:
    RobustRemoveNumbers = ""
    ' إعادة تفعيل الإعدادات الأساسية إذا كانت متوقفة
End Function

تضمن هذه الكتلة توفير مسار خروج آمن للبرنامج يحول دون توقف التطبيق أو تجمده، مع إمكانية توثيق رقم الخطأ ورسالته التفسيرية (عبر كائن Err) في ملف سجل خارجي للمساعدة في عمليات الصيانة وتصحيح الأخطاء لاحقاً. كما تضمن إعادة ضبط متغيرات النظام وإعدادات الشاشة المعطلة في حال وقوع خطأ مفاجئ أثناء المعالجة الجماعية للبيانات.

8.3 اختبار الحدود والتحقق البرمجي (Edge Cases Testing)

تقتضي معايير الجودة البرمجية إخضاع دالة إزالة الأرقام لاختبارات تحقق صارمة تغطي الحالات الحدية وغير الاعتيادية (Edge Cases) لضمان متانتها التشغيلية تحت مختلف الظروف. تشمل هذه الاختبارات إدخال سلاسل نصية طويلة جداً تقترب من الحد الأقصى لسعة الخلايا في إكسل (32,767 محرفاً)، والتحقق من قدرة الخوارزمية على معالجتها دون التسبب في فيض تكديس الذاكرة (Stack Overflow).

كذلك يجب اختبار سلوك الدالة مع النصوص التي تحتوي على محارف تحكم غير مطبوعة (Non-printable characters) مثل محارف فواصل الأسطر (vbCrLf أو Chr(10))، ومحارف الجدولة، ورموز اليونيكود النادرة ومحارف التشكيل اللغوي. يضمن توثيق مخرجات هذه الاختبارات التأكد من أن عملية التنقية محددة بدقة على الخانات الرقمية، ولا تمتد عشوائياً لمسح أو تشويه الرموز البنائية المعقدة للنصوص المتخصصة.

9. سيناريوهات وتطبيقات عملية متقدمة في تنظيف البيانات

9.1 تنقية المعرفات الوظيفية وسجلات الهوية المشتركة

يبرز التطبيق العملي لهذه الإجراءات في إدارات الموارد البشرية ومطابقة سجلات العاملين في المؤسسات الكبرى. ففي كثير من الأحيان، تُصدر أجهزة قراءة بصمات الحضور والانصراف تقارير إلكترونية تدمج الكود التعريفي مع الاسم الصريح داخل نفس الحقل بصيغ متباينة، كأن يُسجل الموظف باسم "EMP9082Mohammed_AlGhamdi" أو "Fatima_8841".

من خلال استدعاء دالة RemoveNumbers، يتم التخلص المباشر من الأكواد الرقمية المدمجة، مما يسمح بالحصول على الأسماء الصافية وتوحيدها عبر إزالة الشرطات السفلية لاحقاً. هذه الخطوة تمكن المحللين من إجراء عمليات مطابقة موثوقة بنسبة 100% مع قواعد بيانات الرواتب والتأمينات الاجتماعية التي تخزن الأسماء مجردة من الأكواد، مما يقضي على ظاهرة السجلات الشبحية ويسرع إعداد التقارير الشهرية بدقة وموثوقية عالية.

9.2 فصل البيانات الجغرافية والعناوين البريدية

يمثل التعامل مع الحقول المخصصة للعناوين السكنية والتجارية في أنظمة إدارة علاقات العملاء (CRM) تحدياً هندسياً مستمراً؛ إذ غالباً ما يقوم المستخدمون بإدخال اسم الشارع ورقم المبنى والرمز البريدي وصندوق البريد في حقل نصي واحد، مثل: "شارع الملك فهد مبنى 402 الرياض 11564". يمنع هذا الاندماج الفوضوي للبيانات تصنيف العملاء جغرافياً بصورة مؤتمتة وتحديد مسارات التوصيل بدقة.

تُستخدم خوارزميات إزالة الأرقام لعزل المكونات الجغرافية الصافية للشارع أو الحي، مما يمهد الطريق لإنشاء أعمدة بيانية مستقلة تفصل بين مسميات المعالم والبيانات الرقمية الخاصة بأرقام المباني والرموز البريدية. تسهم هذه المعالجة في تحسين أداء حملات التسويق الموجه وخفض تكلفة الخدمات اللوجستية المرتبطة بخدمات الشحن الميداني المعتمدة على الفرز الجغرافي الدقيق للعملاء.

9.3 أتمتة تنظيف مخرجات الأجهزة والمستشعرات الميدانية

في بيئات التصنيع والرقمنة الصناعية، تسجل مستشعرات إنترنت الأشياء (IoT) ومحطات القياس الميدانية بيانات بيئية وتشغيلية دورية تجمع بين الطوابع الزمنية، وأرقام القنوات الترددية، وأسماء الأحداث المسجلة في سلسلة نصية موحدة (مثل: "CH04_PressureSensor_Normal_992"). يؤدي هذا التداخل إلى صعوبة عزل الحالات التشغيلية ومراقبة انحراف الأداء للمعدات.

من خلال تطوير إجراء ماكرو شامل يستند إلى إزالة الأرقام، يمكن معالجة سجلات القياس اللحظية الضخمة وتحويلها إلى تصنيفات نصية قياسية بنقرة زر واحدة. يتيح ذلك للفرق الهندسية الميدانية تصنيف الأحداث التشغيلية، ومراقبة تكرار الأعطال، وبناء لوحات التحكم التفاعلية بصورة فورية ومستمرة تعزز كفاءة الصيانة التنبؤية للمنشأة الصناعية.

10. أفضل الممارسات البرمجية وتطوير الدوال للإنتاج

10.1 التوثيق البرمجي والتعليقات وفق المعايير المعتمدة

تتطلب كتابة الشيفرات البرمجية الموجهة لبيئات العمل المؤسسية الالتزام بأعلى معايير التوثيق لضمان قابلية الكود للصيانة والتطوير المستقبلي من قبل مطورين آخرين. يشمل ذلك إدراج ترويسة قياسية في مستهل كل دالة ووحدة نمطية، تتضمن وصفاً تفصيلياً للغاية من الدالة، واسم المطور، وتاريخ الإنشاء، وأرقام الإصدارات، بالإضافة إلى بيان تفصيلي بالمدخلات المتوقعة والقيم المرجعة منها.

كما يُوصى باعتماد قواعد التسمية المعيارية المعتمدة برمجياً، مثل استخدام تدوين هانغاريا (Hungarian Notation) للمتغيرات (كاستخدام البادئة str للسلاسل النصية، وobj للكائنات البرمجية، وbol للقيم المنطقية)، مع ضرورة وضع تعليقات شارحة وموجزة تبرر اختيار الأنماط المعقدة في التعابير النمطية. هذه الممارسات تحول الشيفرة البرمجية من مجرد كود تطبيقي إلى أصل برمجي منظم ومستدام يسهل تدقيقه ودمجه في المشروعات البرمجية الأوسع نطاقاً.

10.2 تحويل الدالة إلى وظيفة إضافية قابلة لإعادة الاستخدام

بدلاً من تكرار نسخ ولصق الكود البرمجي في كل مصنف إكسل جديد، يتمثل الحل الاحترافي في تحويل الوحدة النمطية إلى وظيفة إضافية قابلة لإعادة الاستخدام بصيغة (Excel Add-In) ذات الامتداد .xlam. يتم ذلك عن طريق حفظ المصنف المحتوي على الدالة بهذا الامتداد داخل المجلد المخصص للوظائف الإضافية في نظام ويندوز، ثم تفعيل الإضافة من قائمة إضافات إكسل داخل البرنامج.

بمجرد تثبيت هذه الإضافة، تصبح الدالة RemoveNumbers متاحة بصورة دائمة وتلقائية داخل أي مصنف يتم فتحه على الحاسوب الشخصي للمستخدم كأنها دالة أصلية مدمجة في البرنامج، دون الحاجة إلى تمكين الماكرو في كل ملف منفصل. كما تتيح هذه المنهجية لمديري تقنية المعلومات نشر الوظيفة الإضافية وتوزيع تحديثاتها مركزياً على أجهزة الموظفين وفرق العمل في المؤسسة بكفاءة وانسيابية تامة.

10.3 معايير الأمان وحماية المصنفات التي تتضمن وحدات ماكرو

تفرض بيئات العمل الرقمية الحديثة قيوداً أمنية صارمة على تشغيل وحدات الماكرو لحماية الأنظمة المؤسسية من البرمجيات الخبيثة وشفرات الفدية التي قد تتخفى داخل ملفات أوفيس. لذا يجب على المطورين حفظ المصنفات الحاوية على الأكواد بالامتدادات المناسبة الداعمة للماكرو، مثل .xlsm للمصنفات القياسية، أو .xlsb للمصنفات الثنائية التي توفر ضغطاً فائقاً وسرعة عالية في فتح وتخزين البيانات الضخمة.

كذلك يجب الالتزام بالحصول على التوقيع الرقمي للمشروعات البرمجية (Digital Signatures) باستخدام شهادات أمان موثوقة ومعتمدة من السلطات المعنية، مما يسمح بتشغيل الأكواد بسلاسة حتى في ظل ضبط إعدادات مركز التوثيق (Trust Center) على أعلى مستويات الحظر الأمني. يضمن ذلك حماية حقوق الملكية الفكرية للشفرات البرمجية، ويمنع التلاعب غير المصرح به بمحتواها، مما يوفر بيئة تشغيل آمنة وموثوقة تتوافق مع معايير الحوكمة والأمن السيبراني للمؤسسة.

خاتمة

استعرضنا في هذا الدليل الشامل الأبعاد النظرية والتطبيقية لعملية إزالة الأرقام من السلاسل النصية باستخدام لغة Visual Basic for Applications (VBA) داخل بيئة Microsoft Excel. انطلاقاً من الفهم المعماري لطبيعة تمثيل السلاسل النصية في الذاكرة العشوائية وتحديات تنقية البيانات غير المتجانسة، أظهر التحليل التفصيلي تفوق التعابير النمطية المنفذة عبر مكتبة VBScript.RegExp من حيث الأناقة التركيبية والمرونة في استهداف الأنماط المتنوعة، في مقابل الكفاءة الرياضية الصافية لخوارزميات الفحص الحرفي المباشر عبر الحلقات التكرارية في سيناريوهات المعالجة المخصصة.

إن بناء حلول برمجية مستدامة لمعالجة النصوص لا يقتصر على كتابة سطور برمجية تحقق النتيجة الظاهرية فحسب، بل يتطلب استحضاراً واعياً لكفاءة إدارة الذاكرة، والتعامل الحصيف مع معالجة الأخطاء، ومراعاة التنوع الترميزي للأرقام والمحارف الخاصة، وتحسين استهلاك موارد النظام عبر تقنيات الربط المبكر والمتغيرات الثابتة. ومن خلال تبني هذه الممارسات الهندسية الاحترافية، يستطيع مطورو الحلول ومحللو البيانات الانتقال بأعمالهم من حيز المعالجات اليدوية البطيئة والمعرضة للأخطاء إلى آفاق الأتمتة الشاملة وعالية الأداء التي تضمن دقة البيانات وموثوقية مخرجاتها في شتى الميادين التشغيلية والبحثية.

المراجع

  • Kleene, S. C. (1951). Representation of events in nerve nets and finite automata (Research Memorandum RM-704). RAND Corporation.
  • Kleene, S. C. (1956). Representation of events in nerve nets and finite automata. In C. E. Shannon & J. McCarthy (Eds.), Automata Studies (pp. 3–41). Princeton University Press.
  • Microsoft Corporation. (2021). VBScript language reference: Regular expression (RegExp) object. Microsoft Learn. https://learn.microsoft.com/
  • Microsoft Corporation. (2022). Excel VBA reference: String data type and memory allocation. Microsoft Learn. https://learn.microsoft.com/
  • Thompson, K. (1968). Programming techniques: Regular expression search algorithm. Communications of the ACM, 11(6), 419–422.
★

تقييم هذا المحتوى

5.0 / 5 • 7 تقييمات

اقتباس هذا المقال

looti, M. (2026, أكتوبر 22). VBA: كيفية إزالة الأرقام من سلسلة نصية. عرب سايكلوجي. https://arabpsychology.com/statistics/vba-how-to-remove-numbers-from-string/
looti, Mohammed. “VBA: كيفية إزالة الأرقام من سلسلة نصية.” عرب سايكلوجي, 22 أكتوبر 2026, https://arabpsychology.com/statistics/vba-how-to-remove-numbers-from-string/.
looti, Mohammed. “VBA: كيفية إزالة الأرقام من سلسلة نصية.” عرب سايكلوجي. أكتوبر 22, 2026. https://arabpsychology.com/statistics/vba-how-to-remove-numbers-from-string/.