جدول المحتويات
هل ترغب في التعامل مع المسافات البيضاء بأكثر الطرق فعالية؟ استخدم التعبيرات العادية لإزالة جميع المسافات في الخلية ، واستبدل المسافات المتعددة بحرف واحد ، واقطع المسافات بين الأرقام فقط ، والمزيد.
أيًا كانت بيانات الإدخال التي تستخدمها ، فلن تصادف تقريبًا مجموعة بيانات بدون مسافات. في معظم الحالات ، تكون المسافة البيضاء جيدة - يمكنك استخدامها لفصل أجزاء مختلفة بصريًا من المعلومات لتسهيل إدراكها. ومع ذلك ، في بعض الحالات ، قد يصبح الأمر شريرًا - يمكن للمسافات الزائدة أن تفسد الصيغ وتجعل أوراق العمل الخاصة بك غير قابلة للإدارة تقريبًا.
لماذا استخدم التعبير العادي لقص المسافات البيضاء في Excel؟
قبل أن نتعمق في التفاصيل الجوهرية لاستخدام التعبيرات العادية لإزالة المسافات البيضاء في أوراق عمل Excel ، أود معالجة السؤال الذي يتبادر إلى الذهن في المقام الأول - لماذا نحتاج إلى regexes عندما يحتوي Excel بالفعل على TRIM وظيفة؟
لفهم الاختلاف ، دعنا نرى ما يعتبر مسافة بيضاء في كل حالة:
- يمكن لوظيفة TRIM المضمنة فقط تجريد حرف المسافة التي تحتوي على القيمة 32 في نظام ASCII ذي 7 بت.
- يمكن للتعبيرات العادية تحديد بعض الأشكال المختلفة للمسافات البيضاء مثل المسافة () ، وعلامة التبويب (\ t) ، وعودة أول السطر (\ r) ، والجديد خط (\ n). بالإضافة إلى ذلك ، هناك حرف مسافة بيضاء (\ s) يتطابق مع جميع هذه الأنواع ويأتي مفيدًا للغاية لتنظيف المدخلات الأوليةالبيانات.
معرفة ما يحدث بالضبط خلف الكواليس ، من الأسهل كثيرًا التوصل إلى حل ، أليس كذلك؟
كيفية تمكين التعبيرات العادية في Excel
من الحقائق المعروفة أن برنامج Excel الجاهز لا يدعم التعبيرات العادية. لتمكينها ، تحتاج إلى إنشاء وظيفة VBA مخصصة. لحسن الحظ ، لدينا بالفعل واحد اسمه RegExpReplace . انتظر ، لماذا "استبدال" ونحن نتحدث عن إزالة؟ في لغة Excel ، كلمة "إزالة" هي مجرد كلمة أخرى لـ "استبدل بسلسلة فارغة" :)
لإضافة الوظيفة إلى Excel ، ما عليك سوى نسخ الكود الخاص بها من هذه الصفحة ، ولصقها في محرر VBA ، واحفظ ملفك كمصنف ممكن بماكرو (.xlsm).
فيما يلي بناء جملة الوظيفة للمرجع الخاص بك:
RegExpReplace (نص ، نمط ، استبدال ، [example_num] ، [match_case])الوسيطات الثلاث الأولى مطلوبة ، والوسيطتان الأخيرتان اختياريتان.
حيث:
- Text - السلسلة الأصلية لـ ابحث في.
- Pattern - التعبير العادي المراد البحث عنه.
- الاستبدال - النص المراد استبداله. لإزالة المسافات البيضاء ، يمكنك تعيين هذه الوسيطة على إما:
- سلسلة فارغة ("") لقص جميع المسافات تمامًا
- مسافة حرف ("") لاستبدال المسافات المتعددة بحرف مسافة واحد
- Instance_num (اختياري) - رقم المثيل. في معظم الحالات ، ستحذفه لاستبدال جميع الحالات(افتراضي).
- Match_case (اختياري) - قيمة منطقية تشير إلى مطابقة حالة النص (TRUE) أو تجاهلها (FALSE). بالنسبة للمسافة البيضاء ، فهي غير ملائمة وبالتالي تم حذفها.
لمزيد من المعلومات ، يرجى الاطلاع على وظيفة RegExpReplace.
كيفية إزالة المسافة البيضاء باستخدام regex - أمثلة
باستخدام تمت إضافة وظيفة RegExpReplace إلى المصنف الخاص بك ، فلنتناول سيناريوهات مختلفة واحدة تلو الأخرى.
قم بإزالة جميع المسافات البيضاء باستخدام regex
لإزالة جميع المسافات في سلسلة ، ما عليك سوى البحث عن أي حرف مسافة بيضاء ، بما في ذلك مسافة ، علامة تبويب ، حرف إرجاع ، وسطر تغذية ، واستبدالها بسلسلة فارغة ("").
نمط : \ s +
استبدال : ""
بافتراض أن السلسلة المصدر في A5 ، فإن الصيغة في B5 هي:
=RegExpReplace(A5, "\s+", "")
لتسهيل إدارة الأنماط ، يمكنك إدخال regex في خلية محددة مسبقًا وتزويدها بالصيغة باستخدام مرجع مطلق مثل $ A $ 2 ، لذلك سيظل عنوان الخلية بدون تغيير عند نسخ الصيغة أسفل العمود.
=RegExpReplace(A5, $A$2, "")
إزالة أكثر من مسافة بيضاء واحدة
لإزالة المسافة البيضاء الزائدة (أي أكثر من n مسافات متتالية) ، استخدم نفس regex \ s + ولكن استبدل المطابقات التي تم العثور عليها بحرف مسافة واحد.
Pattern : \ s +
الاستبدال : ""
=RegExpReplace(A5, "\s+", " ")
يرجى الانتباه إلى أن هذه الصيغة تحتفظ بمسافة واحدة ليس فقط بينأدناه مجموعة البيانات ، لنفترض أنك ترغب في قطع جميع المسافات البادئة / اللاحقة وجميع المسافات البينية باستثناء واحدة ، مع الحفاظ على العديد من الأسطر سليمة. لإنجاز المهمة ، ستحتاج إلى وظيفتين مختلفتين من RegExpReplace.
تستبدل الوظيفة الأولى مسافات متعددة بحرف مسافة واحد.
=RegExpReplace(A5, " +", " ")
الآخر يقطع المسافات من بداية ونهاية السطر:
=RegExpReplace(A5, "^ +| +$", "")
فقط قم بتداخل الوظيفتين في بعضهما البعض:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +| +$", "")
وستحصل على النتيجة المثالية:
Regex لاستبدال المسافات المتعددة بحرف واحد
في حالة رغبتك في إزالة جميع المسافات من سلسلة واستبدال كل مجموعة من المسافات المتتالية بحرف محدد ، هذا ما عليك القيام به:
أولاً ، استخدم هذا التعبير المعتاد لقص المسافات البيضاء البادئة والخلفية:
=RegExpReplace(A8, "^[\s]+|[\s]+$", "")
ثم ، قم بخدمة الوظيفة المذكورة أعلاه إلى الوسيطة text في RegExpReplace آخر الذي يستبدل مسافة بيضاء متتالية أو أكثر بالحرف الذي تحدده ، على سبيل المثال واصلة:
النمط : \ s +
الاستبدال : -
بافتراض أن السلسلة المصدر في A8 ، فإن الصيغة يأخذ هذا الشكل:
=RegExpReplace(RegExpReplace(A8, "^[\s]+|[\s]+$", ""), "\s+", "-")
أو يمكنك إدخال الأنماط والاستبدالات في خلايا منفصلة كما هو موضح في لقطة الشاشة:
Regex لإزالة الأسطر الفارغة
هذا سؤال يطرحه المستخدمون الذين لديهم أسطر متعددة في خلية واحدة بشكل متكرر: "هناك الكثير من الأسطر الفارغة في خلاياي. هل هناك أي طريقة للحصول علىالتخلص منها بخلاف المرور عبر كل خلية وحذف كل سطر يدويًا؟ "الإجابة: هذا سهل!
لمطابقة الأسطر الفارغة التي لا تحتوي على حرف واحد من بداية السطر الحالي حتى السطر التالي \ n ، التعبير العادي هو:
النمط : ^ \ n
إذا كانت الأسطر الفارغة بصريًا تحتوي على مسافات أو علامات تبويب ، فاستخدم هذا التعبير العادي:
النمط : ^ [\ t] * \ n
فقط استبدل regex بسلسلة فارغة باستخدام هذه الصيغة ، وستختفي جميع الأسطر الفارغة مرة واحدة!
=RegExpReplace(A5, $A$2, "")
إزالة المسافات البيضاء باستخدام أدوات RegEx
أظهرت الأمثلة أعلاه جزءًا صغيرًا فقط من الاحتمالات الرائعة التي توفرها regexes. لسوء الحظ ، ليس كل تتوفر ميزات التعبيرات العادية الكلاسيكية في VBA.
لحسن الحظ ، فإن أدوات RegEx المضمنة في Ultimate Suite الخاصة بنا خالية من هذه القيود حيث تتم معالجتها بواسطة محرك Microsoft .NET RegEx. يتيح لك ذلك إنشاء أنماط أكثر تعقيدًا لا يدعمها VBA RegExp w ستجد مثالًا لمثل هذا التعبير العادي.
Regex لإزالة المسافة بين الأرقام
في سلسلة أبجدية رقمية ، افترض أنك ترغب في إزالة المسافات البيضاء بين الأرقام فقط ، لذا فإن سلسلة مثل يصبح "A 1 2 B" "A 12 B".
لمطابقة مسافة بيضاء بين أي رقمين ، يمكنك استخدام أدوات البحث التالية:
Pattern : (؟ & lt؛ = \ d) \ s + (؟ = \ d)
لإنشاء صيغة قائمةفي regexes أعلاه ، فيما يلي خطوتان سهلتان للقيام بهما:
- في علامة التبويب Ablebits Data في علامة التبويب Text ، انقر فوق Regex أدوات .
- في جزء أدوات Regex ، حدد بيانات المصدر ، وأدخل regex ، واختر إزالة الخيار ، واضغط على إزالة .
للحصول على النتائج كصيغ ، وليس قيم ، تذكر وضع علامة في خانة الاختيار إدراج كصيغة .
في لحظة ، سترى وظيفة AblebitsRegexRemove مدرجة في عمود جديد على يمين البيانات الأصلية.
بدلاً من ذلك ، يمكنك إدخال regex في بعض الخلايا ، قل A5 ، وأدخل الصيغة مباشرة في خلية باستخدام مربع الحوار إدراج دالة ، حيث يتم تصنيف AblebitsRegexRemove ضمن AblebitsUDFs .
نظرًا لأن هذه الوظيفة مصممة خصيصًا لإزالة السلاسل ، فإنها تتطلب وسيطين فقط - سلسلة الإدخال والتعبير العادي:
=AblebitsRegexRemove(A5, $A$2)
هذه هي كيفية إزالة المسافات في اكسل باستخدام التعبيرات العادية. أشكرك على القراءة وأتطلع إلى رؤيتك على مدونتنا الأسبوع المقبل!
التنزيلات المتاحة
إزالة المسافة البيضاء باستخدام regex - أمثلة (ملف .xlsm)
Ultimate Suite - نسخة تجريبية (ملف exe.)
الكلمات ولكن أيضًا في بداية ونهاية السلسلة ، وهذا ليس جيدًا. للتخلص من المسافة البيضاء السابقة واللاحقة ، قم بتداخل الصيغة أعلاه في دالة RegExpReplace أخرى تجرد المسافات من البداية والنهاية: =RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+|[\s]+$", "")
Regex to قم بإزالة المسافة البيضاء السابقة واللاحقة
للبحث عن مسافة بيضاء في بداية السطر أو نهايته ، استخدم بداية ^ ونهاية $ نقاط الارتساء.
المسافة البادئة :
نمط : ^ [\ s] +
مسافة زائدة مسافة بيضاء:
نمط : [\ s ] + $
المسافة البادئة و اللاحقة المسافة البيضاء:
النمط : ^ [\ s] +