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

سلسلة فبا Operaالاختصاصات
تُستخدم بيانات السلسلة لتخزين البيانات التي تتكون من أرقام وأحرف ورموز. "يوليو 2015" هو مثال على بيانات السلسلة. وهي تتكون من
- الشخصيات (يوليو)
- رمز (-)
- Numbers (2015)
تُستخدم عوامل تشغيل السلسلة لمعالجة بيانات السلسلة. على سبيل المثال، يمكنك ربط قيمة July-2015 بالأحرف الثلاثة الأولى من الشهر والسنة مثل "Jul-3".
يوضح الجدول التالي عامل سلسلة VBA التسلسلي.
| S / N | المُشغل | الوصف | مثال | الناتج |
|---|---|---|---|---|
| 1 | & | ربط: يستخدم هذا المشغل لربط السلاسل معًا | "فلان الفلاني" | John Doe |
مصدر المثال Code
MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"
يؤدي تنفيذ الكود أعلاه إلى النتيجة التالية
إن علامة العطف (&) ليست الرمز الوحيد الذي يظهر لربط النصوص، والفرق بين الاثنين يصبح مهماً عندما يتعلق الأمر بالأرقام.
الفرق بين & و + في دمج السلاسل النصية
تقبل لغة 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


