JavaScript is not enabled!...Please enable javascript in your browser

جافا سكريبت غير ممكن! ... الرجاء تفعيل الجافا سكريبت في متصفحك.

-->
الصفحة الرئيسية

شرح الدالة SPLIT فى VBA في Excel – شرح مع أمثلة

 

بسم الله الرحمن الرحيم

اهلا بكم متابعى موقع عالم الاوفيس

الدالة SPLIT فى  VBA في Excel – شرح مع أمثلة

 

عند العمل باستخدام VBA في Excel، قد تحتاج إلى تقسيم سلسلة نصية إلى أجزاء مختلفة استنادًا إلى فاصل.

على سبيل المثال، إذا كان لديك عنوان، فيمكنك استخدام وظيفة تقسيم VBA للحصول على أجزاء مختلفة من العنوان مفصولة بفاصلة (والتي ستكون الفاصل في هذه الحالة).

SPLIT هي دالة سلسلة نصية مدمجة في Excel VBA يمكنك استخدامها لتقسيم سلسلة نصية استنادًا إلى الفاصل.

يغطي هذا المقال التعليمي:

  1. دالة SPLIT في Excel VBA – بناء الجملة
  2. المثال 1 – تقسيم الكلمات في جملة
  3. المثال 2 – حساب عدد الكلمات في جملة
  4. المثال 3 – استخدام فاصل غير حرف المسافة
  5. المثال 4 – تقسيم عنوان إلى ثلاثة أجزاء
  6. المثال 5 – الحصول على اسم المدينة من العنوان


دالة SPLIT في Excel VBA – بناء الجملة

Split ( Expression, [Delimiter], [Limit], [Compare] )

Expression: هذا هو السلسلة التي تريد تقسيمها بناءً على الفاصل. على سبيل المثال، في حالة مثال العنوان، سيكون العنوان بالكامل هو "التعبير". في حالة أن هذه سلسلة بطول صفري ("")، ستعيد دالة SPLIT مصفوفة فارغة.

Delimiter: هذه وسيطة اختيارية. هذا هو الفاصل المستخدم لتقسيم وسيطة "التعبير". في حالة مثال العنوان، الفاصلة هي فاصل يستخدم لتقسيم العنوان إلى أجزاء مختلفة. إذا لم تحدد هذه الوسيطة، فسيتم اعتبار حرف المسافة الفاصل الافتراضي. في حالة تقديم سلسلة بطول صفري ("")، يتم إرجاع سلسلة "التعبير" بالكامل بواسطة الدالة.

Limit: هذه وسيطة اختيارية. هنا تحدد العدد الإجمالي للسلاسل الفرعية التي تريد إرجاعها. على سبيل المثال، إذا كنت تريد فقط إرجاع أول ثلاث سلاسل فرعية من وسيطة "التعبير"، فسيكون هذا 3. إذا لم تحدد هذه الوسيطة، فإن القيمة الافتراضية هي -1، والتي تعيد جميع السلاسل الفرعية.

Compare: هذه وسيطة اختيارية. هنا تحدد نوع المقارنة التي تريد أن تقوم بها دالة SPLIT عند تقييم السلاسل الفرعية. الخيارات التالية متاحة:

عندما تكون قيمة Compare 0: هذه مقارنة ثنائية. وهذا يعني أنه إذا كان الفاصل عبارة عن سلسلة نصية (لنفترض ABC)، فسيكون هذا حساسًا لحالة الأحرف. لن يكون "ABC" مساويًا لـ "abc".

عندما تكون قيمة المقارنة 1: هذه مقارنة نصية. وهذا يعني أنه إذا كان الفاصل عبارة عن سلسلة نصية (لنفترض ABC)، فحتى إذا كان لديك "abc" في سلسلة "التعبير"، فسيتم اعتبارها فاصلًا.

الآن بعد أن غطينا أساسيات دالة SPLIT، فلنلق نظرة على بعض الأمثلة العملية.

 

المثال 1 - تقسيم الكلمات في جملة

لنفترض أن لدي النص - "الثعلب البني السريع يقفز فوق الكلب الكسول".

يمكنني استخدام دالة SPLIT للحصول على كل كلمة من هذه الجملة كعنصر منفصل في مصفوفة.

الكود أدناه سيكون على هذا النحو:

  Sub SplitWords()

Dim TextStrng As String

Dim Result() As String

TextStrng = "The Quick Brown Fox Jumps Over The Lazy Dog"

Result() = Split(TextStrng)

End Sub 

على الرغم من أن الكود لا يفعل شيئًا مفيدًا، إلا أنه سيساعدك على فهم ما تفعله دالة التقسيم في VBA.

تقسم دالة التقسيم سلسلة النص وتعين كل كلمة إلى مصفوفة النتيجة.

في هذه الحالة:

  • تخزن الدالة Result(0) القيمة "The"
  • تخزن الدالة Result(1) القيمة "Quick"
  • تخزن الدالة Result(2) القيمة "Brown" وهكذا.

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

ملاحظة مهمة:

ترجع دالة SPLIT في VBA مصفوفة تبدأ من الأساس 0.

عند تعيين نتيجة دالة SPLIT لمصفوفة، يجب إعلان هذه المصفوفة كنوع بيانات String. إذا أعلنتها كنوع بيانات Variant، فسوف تظهر خطأ عدم تطابق النوع). في المثال أعلاه، لاحظ أنني أعلنت Result() كنوع بيانات String.

المثال 2 - حساب عدد الكلمات في الجملة

يمكنك استخدام الدالة SPLIT للحصول على العدد الإجمالي للكلمات في الجملة. والحيلة هنا هي حساب عدد العناصر في المصفوفة التي تحصل عليها عند تقسيم النص.

سيعرض الكود أدناه مربع رسالة بعدد الكلمات:

Sub WordCount()

Dim TextStrng As String

Dim WordCount As Integer

Dim Result() As String

TextStrng = "The Quick Brown Fox Jumps Over The Lazy Dog"

Result = Split(TextStrng)

WordCount = UBound(Result()) + 1

MsgBox "The Word Count is " & WordCount

End Sub

في هذه الحالة، تخبرنا الدالة UBound بالحد الأعلى للمصفوفة (أي الحد الأقصى لعدد العناصر التي تحتوي عليها المصفوفة). نظرًا لأن قاعدة المصفوفة هي 0، تتم إضافة 1 للحصول على إجمالي عدد الكلمات.

يمكنك استخدام كود مماثل لإنشاء دالة مخصصة في VBA تأخذ النص كمدخل وتعيد عدد الكلمات.

 

سيقوم الكود أدناه بإنشاء هذه الدالة:

Function WordCount(CellRef As Range)

Dim TextStrng As String

Dim Result() As String

Result = Split(WorksheetFunction.Trim(CellRef.Text), " ")

WordCount = UBound(Result()) + 1

end function

بمجرد إنشائها، يمكنك استخدام دالة WordCount تمامًا مثل أي دالة عادية أخرى.

صورة 1

تتعامل هذه الدالة أيضًا مع المسافات البادئة واللاحقة والمسافات المزدوجة بين الكلمات. أصبح هذا ممكنًا باستخدام الدالة TRIM في كود VBA.

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

 

المثال 3 - استخدام فاصل بخلاف حرف المسافة

في المثالين السابقين، استخدمنا وسيطة واحدة فقط في دالة SPLIT، وكانت الباقي وسيطات افتراضية.

عند استخدام فاصل آخر، تحتاج إلى تحديد ذلك في صيغة SPLIT.

في الكود أدناه، تعيد دالة SPLIT مصفوفة بناءً على فاصلة كفاصل، ثم تعرض رسالة مع كل كلمة في سطر منفصل.

Sub CommaSeparator()

Dim TextStrng As String

Dim Result() As String

Dim DisplayText As String

TextStrng = "The,Quick,Brown,Fox,Jump,Over,The,Lazy,Dog"

Result = Split(TextStrng, ",")

For i = LBound(Result()) To UBound(Result())

DisplayText = DisplayText & Result(i) & vbNewLine

Next i

MsgBox DisplayText

End Sub

 

في الكود أعلاه، استخدمت حلقة For Next لفحص كل عنصر من عناصر مصفوفة "Result" وتعيينه إلى متغير "DisplayText".

 

المثال 4 - تقسيم عنوان إلى ثلاثة أجزاء

باستخدام دالة SPLIT، يمكنك تحديد عدد التقسيمات التي تريد الحصول عليها. على سبيل المثال، إذا لم أحدد أي شيء، فسيتم استخدام كل مثيل للفاصل لتقسيم السلسلة.

ولكن إذا حددت 3 كحد، فسيتم تقسيم السلسلة إلى ثلاثة أجزاء فقط.

على سبيل المثال، إذا كان لدي العنوان التالي:

يمكنني استخدام دالة التقسيم في VBA لتقسيم هذا العنوان إلى ثلاثة أجزاء.


دالة التقسيم في VBA - تحديد عدد العناصر

تقسم العنصرين الأولين بناءً على فاصل الفاصلة ويصبح الجزء المتبقي العنصر الثالث في المصفوفة.

 

سيعرض الكود أدناه العنوان في ثلاثة أسطر مختلفة في مربع رسالة:

Sub CommaSeparator()

Dim TextStrng As String

Dim Result() As String

Dim DisplayText As String

TextStrng = "2703 Winifred Way, Indianapolis, Indiana, 46204"

Result = Split(TextStrng, ",", 3)

For i = LBound(Result()) To UBound(Result())

DisplayText = DisplayText & Result(i) & vbNewLine

Next i

MsgBox DisplayText

End Sub

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

 

الكود التالي سيفعل هذا

Function ThreePartAddress(cellRef As Range)

Dim TextStrng As String

Dim Result() As String

Dim DisplayText As String

Result = Split(cellRef, ",", 3)

For i = LBound(Result()) To UBound(Result())

DisplayText = DisplayText & Trim(Result(i)) & vbNewLine

Next i

ThreePartAddress = Mid(DisplayText, 1, Len(DisplayText) - 1)

بمجرد حصولك على هذا الكود في الوحدة النمطية، يمكنك استخدام الدالة (ThreePartAddress) في المصنف تمامًا مثل أي دالة Excel أخرى.

تأخذ هذه الوظيفة وسيطة واحدة - مرجع الخلية الذي يحتوي على العنوان.


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

 

المثال 5 - الحصول على اسم المدينة من العنوان

باستخدام وظيفة التقسيم في VBA، يمكنك تحديد الجزء من المصفوفة الناتجة الذي تريد استخدامه.

 

2703 Winifred Way, Indianapolis, Indiana, 46204

ستبدو المصفوفة الناتجة كما هو موضح أدناه:

 

{"2703 Winifred Way", "Indianapolis", "Indiana", "46204"}

نظرًا لأن هذه مصفوفة، يمكنني اختيار عرض أو إرجاع جزء معين من هذه المصفوفة.

 

فيما يلي رمز لوظيفة مخصصة، حيث يمكنك تحديد رقم وستقوم بإرجاع هذا العنصر من المصفوفة. على سبيل المثال، إذا أردت اسم الولاية، يمكنني تحديد 3 (لأنه العنصر الثالث في المصفوفة).

Function ReturnNthElement(CellRef As Range, ElementNumber As Integer)

Dim Result() As String

Result = Split(CellRef, ",")

ReturnNthElement = Result(ElementNumber - 1)

End Function

تأخذ الدالة أعلاه وسيطتين، مرجع الخلية الذي يحتوي على العنوان ورقم العنصر الذي تريد إرجاعه. تقسم الدالة Split عناصر العنوان وتعينها للمتغير Result.

 

ثم تعيد رقم العنصر الذي حددته كوسيطة ثانية. لاحظ أنه نظرًا لأن الأساس هو 0، يتم استخدام ElementNumber-1 لإرجاع الجزء الصحيح من العنوان.

يمكنك تبسيط الكود بشكل أكبر كما هو موضح أدناه:

 

Function ReturnNthElement(CellRef As Range, ElementNumber As Integer)

ReturnNthElement = Split(CellRef, ",")(ElementNumber - 1)

End Function

في الكود أعلاه، بدلاً من استخدام متغير النتيجة، فإنه يعيد فقط رقم العنصر المحدد.

لذا، إذا كان لديك Split(“Good Morning”)(0)، فسوف يعيد فقط العنصر الأول، وهو “Good”.

 

وبالمثل، في الكود أعلاه، فإنه يعيد فقط رقم العنصر المحدد.

الاسمبريد إلكترونيرسالة