وظائف معالجة سلسلة VBA & Operaالاختصاصات

⚡ ملخص ذكي

وظائف معالجة السلاسل النصية في VBA و Operaتجمع التورس وتقيس وتخرجtracنص داخل وحدات ماكرو Excel. تشرح هذه الصفحة عامل الربط، ووظائف Left وRight وMid وLen وInStr، والتقسيم والدمج، والأخطاء التي غالباً ما تتسبب في تعطل كود السلسلة النصية.

  • 🔤 بيانات نصية: قيمة مبنية من الأحرف والرموز والأرقام، مثل النص Jul-2015.
  • ➕ سلسلة Operaتور: تربط علامة العطف (&) سلسلتين، لذا فإن "John" و "Doe" يعيدان John Doe.
  • ✂️ Extracوظائف tion: تقوم الدوال Left و Right و Mid بسحب سلسلة فرعية من بداية أو نهاية أو منتصف قيمة ما.
  • 📏 وظائف القياس: تقوم الدالة Len بحساب الأحرف، بينما تقوم الدالة InStr بإرجاع الموضع الذي تبدأ فيه السلسلة الفرعية.
  • 🧩 التقسيم والدمج: تقوم الدالة Split بتقسيم سلسلة نصية محددة إلى مصفوفة، بينما تقوم الدالة Join بإعادة بناء مصفوفة إلى سلسلة نصية واحدة.
  • ⚠️ الأخطاء الشائعة: عدم تطابق الأنواع، وإرجاع InStr للصفر، والمسافات الزائدة في نهاية السلسلة هي أسباب معظم حالات فشل المقارنات.

وظائف معالجة السلاسل النصية في VBA و Operaالاختصاصات

سلسلة فبا Operaالاختصاصات

تُستخدم بيانات السلسلة لتخزين البيانات التي تتكون من أرقام وأحرف ورموز. "يوليو 2015" هو مثال على بيانات السلسلة. وهي تتكون من

  • الشخصيات (يوليو)
  • رمز (-)
  • Numbers (2015)

تُستخدم عوامل تشغيل السلسلة لمعالجة بيانات السلسلة. على سبيل المثال، يمكنك ربط قيمة July-2015 بالأحرف الثلاثة الأولى من الشهر والسنة مثل "Jul-3".

يوضح الجدول التالي عامل سلسلة VBA التسلسلي.

S / N المُشغل الوصف مثال الناتج
1 & ربط: يستخدم هذا المشغل لربط السلاسل معًا "فلان الفلاني" John Doe

مصدر المثال Code

سلسلة فبا Operaمثال على مصدر التورات Code

MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"

يؤدي تنفيذ الكود أعلاه إلى النتيجة التالية

سلسلة فبا Operaمثال على مصدر التورات Code

إن علامة العطف (&) ليست الرمز الوحيد الذي يظهر لربط النصوص، والفرق بين الاثنين يصبح مهماً عندما يتعلق الأمر بالأرقام.

الفرق بين & و + في دمج السلاسل النصية

تقبل لغة VBA كلاً من علامة العطف (&) وعلامة الجمع (+) بين قيمتين نصيتين، لذا غالبًا ما يتعامل المبتدئون معهما على أنهما قابلتان للتبديل. لكنهما تتصرفان بشكل مختلف عندما يكون أحد المعاملين رقمًا أو قيمة فارغة، وواحدة منهما فقط آمنة.

السلوك & (علامة العطف) + (زائد)
قيمتان نصيتان وينضم إليهم: "Guru"و"99" مرتجعات Guru99 وينضم إليهم: "Guru" + "99" يعود Guru99
نص ورقم يحوّل الرقم إلى نص: "العمر" و30 يُرجع العمر 30 يُثير خطأ عدم تطابق النوع
سلسلتان رقميتان ينتج عن دمج الرقمين "10" و "5" القيمة 105 قد ينتج عن جمع "10" و "5" قيمة 15
قيمة فارغة يتعامل مع القيمة الفارغة (Null) كسلسلة نصية فارغة. يُرجع قيمة فارغة ويتجاهل النتيجة بأكملها

💡 نصيحة: استخدم دائمًا علامة العطف (&) للربط، واحتفظ بعلامة الجمع (+) لـ عمليات حسابيةضع مسافة قبل وبعد علامة العطف (&)، لأن كتابة Total& يقرأها VBA كحرف تعريف من النوع Long.

وظائف معالجة سلسلة VBA

يعد معالجة سلسلة VBA عنصرًا مهمًا في Excel VBA لبرمجة الماكرو والعمليات المتعلقة بالسلاسل. يوفر Excel أنواعًا مختلفة من وظائف معالجة السلاسل في VBA مثل:

  • اليسار: يستخدم لـtract حرفًا من الجانب الأيسر من السلسلة
  • حق: يستخدم لـtract حرفًا من الجانب الأيمن من السلسلة
  • منتصف: يستخدم لـtracسلسلة فرعية من منتصف سلسلة
  • ليون: يستخدم للعثور على طول السلسلة
  • InStr: يُستخدم للعثور على موضع سلسلة فرعية في سلسلة
  • تقليمتُستخدم علامة النقطتين (:) لإزالة المسافات من طرفي السلسلة النصية.
  • استبدلتُستخدم علامة النقطتين (:) لتبديل كل ظهور لسلسلة فرعية بأخرى.
  • UCase / LCaseتُستخدم : لتحويل سلسلة نصية إلى أحرف كبيرة أو صغيرة

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

الوظيفة بناء الجملة مثال الناتج
اليسار Left(string, length) اليسار (يوليو 2015، 3) يوليو
حق Right(string, length) اليمين("يوليو 2015"، 4) 2015
منتصف منتصف (سلسلة، بداية، طول) منتصف (يوليو 2015، 5، 4) 2015
ليون Len(string) لين (يوليو 2015) 8
InStr InStr(start, string, substring) InStr(1، "يوليو 2015"، "-") 4
تقليم تقليم (سلسلة نصية) تقليم(" Guru99 بوصة Guru99
استبدل استبدال(سلسلة نصية، بحث، استبدال) استبدال ("يوليو 2015"، "-"، "/") يوليو / 2015
UCase UCase(string) UCase(“guru99”) جورو 99

يجمع الماكرو أدناه العديد من هذه الوظائف لإعادة بناء تسمية التاريخ من أجزائها.

Sub StringFunctionsDemo()
    Dim Source As String
    Dim MonthPart As String
    Dim YearPart As String

    Source = "July-2015"

    ' Take the first three characters
    MonthPart = Left(Source, 3)
    ' Take the last four characters
    YearPart = Right(Source, 4)

    MsgBox MonthPart & "-" & YearPart, vbOKOnly, "String Functions"
End Sub

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

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

كيفية تقسيم ودمج السلاسل النصية في VBA

غالبًا ما تصل البيانات المنسوخة إلى برنامج Excel كقيمة واحدة طويلة مع فاصل بين كل عنصر، مثل "بيبسي، كوكاكولا، فانتا، عصير". قراءة هذه البيانات باستخدام الدالتين Mid وInStr بطيئة وغير دقيقة. يوفر VBA زوجًا من الدوال المناسبة لهذه المهمة تحديدًا.

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

Sub SplitAndJoinDemo()
    Dim Source As String
    Dim Items() As String
    Dim i As Long

    Source = "Pepsi,Coke,Fanta,Juice"

    ' Break the value into an array on every comma
    Items = Split(Source, ",")

    For i = LBound(Items) To UBound(Items)
        Sheet1.Cells(i + 1, 1).Value = Items(i)
    Next i

    ' Rebuild the list with a different separator
    MsgBox Join(Items, " | "), vbOKOnly, "Joined List"
End Sub

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

  • النتيجة تبدأ من الصفر: تقوم الدالة Split دائمًا بإرجاع مصفوفة مرقمة من 0، بغض النظر عن قيمة Option Base التي تم تعيينها، لذا قم بتشغيل الحلقة باستخدام LBound و UBound بدلاً من رقم ثابت.
  • قم بتعريفها كسلسلة نصية (): قم بتعيين النتيجة إلى مصفوفة سلاسل نصية ديناميكية. يؤدي تحديد حجم ثابت أولاً إلى حدوث خطأ في الترجمة.
  • إدخال فارغ: يؤدي تقسيم سلسلة فارغة إلى إرجاع مصفوفة بدون عناصر، لذا اختبر باستخدام UBound قبل قراءة Items(0).

حتى مع اختيار الدالة الصحيحة، فإن كود السلسلة يفشل في عدد قليل من الطرق التي يمكن التنبؤ بها.

أخطاء شائعة في سلاسل VBA وكيفية إصلاحها

معظم أخطاء السلاسل النصية في لغة VBA في برنامج Excel تنجم عن مجموعة محدودة من الأسباب. إن التعرف على الأعراض يوفر جلسة طويلة من تصحيح الأخطاء.

  • عدم تطابق الأنواع عند دمج التسلسلات: تم استخدام علامة زائد بين النص والرقم. استبدلها بعلامة العطف (&)، التي تحول الرقم تلقائيًا.
  • تُرجع الدالة InStr القيمة 0: لم يتم العثور على السلسلة الفرعية. تُرجع الدالة InStr القيمة 0 بدلاً من -1 في حالة الفشل، لذا تحقق من وجود قيمة أكبر من الصفر قبل تمرير النتيجة إلى الدالة Mid.
  • استدعاء إجراء غير صالح في المنتصف أو اليسار: الطول المطلوب سالب، أو موضع البداية أقل من 1. قم بحماية الاستدعاء باستخدام Len بحيث لا يتجاوز الطول السلسلة أبدًا.
  • المقارنات التي ينبغي أن تتطابق ولكنها لا تتطابق: تؤدي المسافات الزائدة في نهاية البيانات المستوردة إلى كسر المساواة. قم بتضمين كلا الجانبين في دالة Trim، واستخدم دالة StrComp عندما يجب تجاهل حالة الأحرف.
  • نص لن يتحول إلى رقم: قيمة مثل "1,200" لا تجتاز العمليات الحسابية بسبب الفاصلة. قم بإزالتها باستخدام "استبدال" قبل التحويل باستخدام CLng.

قم بتنزيل Excel الذي يحتوي على الكود أعلاه

قم بتنزيل ملف Excel أعلاه Code

الأسئلة الشائعة

تحتوي السلسلة النصية ذات الطول المتغير على ما يصل إلى ملياري حرف تقريبًا، بينما تحتوي السلسلة النصية ذات الطول الثابت على ما يصل إلى 65,400 حرف. ومع ذلك، فإن خلية ورقة العمل تخزن 32,767 حرفًا فقط، لذلك يتم اقتطاع القيم الأطول عند كتابتها في ورقة العمل.

تقارن علامة المساواة الأحرف مع مراعاة حالة الأحرف افتراضيًا. استخدم StrComp(a, b, vbTextCompare) للحصول على نتيجة غير حساسة لحالة الأحرف، أو ضع Option Compare Text في أعلى الوحدة لتغيير الإعداد الافتراضي للوحدة بأكملها.

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

نعم. صف المدخلات والمخرجات المطلوبة، على سبيل المثال:tracقم بتعديل الكود قبل الشرطة الأولى، وسيعيد مساعد الذكاء الاصطناعي تعبيرًا من نوع Left و InStr. اختبره في حالات استثنائية مثل غياب الشرطة.

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

تلخيص هذه التدوينة بـ: