بسم الله الرحمن الرحيم
اهلا بكم متابعى موقع عالم الاوفيس
الدالة SPLIT فى VBA في Excel – شرح مع
أمثلة
عند العمل باستخدام VBA
في Excel،
قد تحتاج إلى تقسيم سلسلة نصية إلى أجزاء مختلفة استنادًا إلى فاصل.
على سبيل المثال، إذا كان لديك عنوان، فيمكنك
استخدام وظيفة تقسيم VBA
للحصول على أجزاء مختلفة من العنوان مفصولة بفاصلة (والتي ستكون الفاصل في هذه
الحالة).
SPLIT
هي دالة سلسلة نصية مدمجة في Excel VBA يمكنك استخدامها لتقسيم
سلسلة نصية استنادًا إلى الفاصل.
يغطي هذا المقال التعليمي:
- دالة SPLIT في Excel VBA – بناء الجملة
- المثال 1 – تقسيم الكلمات في جملة
- المثال 2 – حساب عدد الكلمات في جملة
- المثال 3 – استخدام فاصل غير حرف المسافة
- المثال 4 – تقسيم عنوان إلى ثلاثة أجزاء
- المثال 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”.
وبالمثل، في الكود أعلاه، فإنه يعيد فقط رقم
العنصر المحدد.