برنامج VBA InStrRev | كيفية استخدام وظيفة Excel VBA InStrRev؟

برنامج Excel VBA INSTRREV

دالة VBA INSTRREV ، باعتبارها تعني "In String Reverse" ، تُرجع موضع التواجد الأول لسلسلة بحث (سلسلة فرعية) في سلسلة أخرى ، بدءًا من نهاية السلسلة (من اليمين إلى اليسار) التي نبحث عنها سلسلة قابلة للبحث.

تبدأ وظيفة INSTRREV في البحث عن السلسلة النصية القابلة للبحث من نهاية السلسلة التي نحتاج فيها إلى معرفة الموضع من البداية ولكننا نحسبها . هناك وظيفة INSTR vba أخرى (ترمز إلى "In String" ) والتي تبحث أيضًا عن سلسلة في سلسلة أخرى وتعيد الموضع ، لكن هذه الوظيفة تبدأ البحث من بداية السلسلة التي نبحث منها عن سلسلة قابلة للبحث.

INSTRREV و INSTR ، كلاهما مضمنان في وظيفة String / Text VBA لـ MS Excel. يمكننا استخدامها أثناء كتابة أي ماكرو في Microsoft Visual Basic Editor.

بناء الجملة

كما نرى في الصورة أعلاه ، هناك وسيطتان إلزاميتان و 2 اختياريتان.

  • StringCheck As String: هذه هي الوسيطة المطلوبة. نحن بحاجة إلى إعطاء تعبير سلسلة يجري البحث عنها.
  • StringMatch As String: هذه الوسيطة مطلوبة أيضًا. نحتاج إلى تحديد تعبير السلسلة الذي يتم البحث عنه.
  • البدء بالطول = -1: هذه وسيطة اختيارية. نحدد التعبير الرقمي. بشكل افتراضي ، يستغرق الأمر -1 مما يعني أن البحث يبدأ من موضع الحرف الأخير. إذا حددنا أي قيمة موجبة مثل 80 ، فسيبدأ البحث من نهاية السلسلة في 80 حرفًا من اليسار.
  • قارن كـ VbCompareMethod = vbBinaryCompare As Long: هذه الوسيطة اختيارية.

يمكننا تحديد القيم التالية لهذه الحجة.

إرجاع القيم

  1. ترجع الدالة INSTRREV القيمة 0 إذا كان التحقق  من السلسلة بطول صفري أو  لم يتم العثور على تطابق سلسلة أو وسيطة "بدء" > تطابق طول السلسلة .
  2. تقوم هذه الدالة بإرجاع "Null" إذا كان التحقق من سلسلة  أو تطابق سلسلة  هو "Null" .
  3. إذا كانت مطابقة السلسلة بطول صفر ، فستعود الدالة للبدء .
  4. إذا كان مباراة سلسلة وجدت ضمن سلسلة الاختيار ، ثم تقوم الدالة بإرجاع الموضع الذي تم العثور المباراة.

كيفية استخدام وظيفة VBA INSTRREV؟

يمكنك تنزيل نموذج VBA INSTRREV Excel هذا هنا - قالب Excel VBA INSTRREV

لنفترض أن لدينا بيانات لأسماء الأفلام ومخرجيها. نريد تقسيم أسماء المخرجين.

لدينا بيانات في 1201 صفًا. إذا قمنا بهذه المهمة يدويًا ، فستستغرق الكثير من الوقت.

للقيام بالشيء نفسه ، سوف نستخدم كود فبا. الخطوات هي:

  • نحتاج إلى النقر فوق أمر 'Visual Basic' المتاح في 'Code' Group في علامة التبويب 'Developer' أو يمكننا الضغط على Alt + F11 لفتح محرر visual basic.

  • سنقوم بإدخال وحدة باستخدام قائمة "إدراج" .

  • سننشئ روتينًا فرعيًا باسم "SplittingNames" .

  • نحتاج 6 متغيرات. واحد لتخزين قيم الخلايا ، والتي سنتعامل معها. ثانيًا لتخزين موضع المسافة الأولى في السلسلة ، والثالث لتخزين موضع آخر مسافة في السلسلة ، والرابع لتخزين رقم الصف الأخير ، والخامس والسادس للصف والعمود اللذين سنستخدمهما لطباعة القيم في الخلايا المجاورة.

  • لمعرفة آخر صف مستخدم في الورقة ، نحتاج إلى استخدام الكود التالي.

سيحدد هذا الرمز أولاً الخلية B1 ثم حدد آخر خلية مستخدمة في نفس العمود ثم نقوم بتعيين رقم صف الخلية إلى متغير "LastRow".

  • الآن لمعالجة جميع الخلايا في العمود B ، سنقوم بتشغيل حلقة "for" .

  • سنخزن قيمة خلايا العمود B من الصف 2 إلى الصف 1201 واحدة تلو الأخرى في متغير 's للتلاعب بها.

  • نحتاج إلى ضبط قيمة المتغير "Column" على 3 لأننا نحتاج إلى كتابة أسماء الانقسام في C (العمود الثالث) والعمود فصاعدًا.

  • إذا كانت السلسلة عبارة عن كلمة واحدة فقط ، فهذا يعني أنه لا توجد مسافة في السلسلة ، فنحن نريد السلسلة نفسها كإخراج. لهذا ، سنحدد الشرط باستخدام 'If and Else statement' بعلامة النجمة (تشير إلى حرف واحد أو أكثر) على النحو التالي:

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

تأخذ الدالة INSTR الوسيطة على النحو التالي:

تفاصيل الحجة

  • البداية: من أي وضع نبدأ.
  • String1: نحتاج إلى إعطاء تعبير سلسلة يتم البحث عنه.
  • String2: نحتاج إلى تحديد تعبير سلسلة يتم البحث عنه.

مقارنة بـ VbCompareMethod: تحديد طريقة المقارنة. بشكل افتراضي ، تكون المقارنة ثنائية.

  • نحن بحاجة إلى استخدام VBA LEFT ظيفة لاستخراج الأحرف اليسرى من السلسلة. لقد استخدمنا "Last Space-1" للحصول على الأحرف اليسرى قبل المساحة الأخيرة.

نحتاج إلى استخدام الدالتين RIGHT و LEN لاستخراج الأحرف الصحيحة من السلسلة بعد المسافة الأولى.

ماكرو مكتوب. الآن نحتاج فقط إلى تشغيل الماكرو باستخدام مفتاح F5 .

رمز:

 اسم تقسيم فرعي () خافت كسلسلة خافتة أول مسافة بمسافة طويلة خافتة مثل خافت طويل للصف الأخير مثل صف خافت طويل وعمود خافت طويل مثل ورقة طويلة 1.Range ("B1"). حدد Selection.End (xlDown). حدد LastRow = ActiveCell. الصف للصف = 2 إلى LastRow s = Sheet1.Cells (الصف ، 2). عمود القيمة = 3 If s Like "* *" ثم FirstSpace = InStr (1، s، "") LastSPace = InStrRev (s، "") Sheet1.Cells (صف ، عمود) .Value = Left (s، LastSPace - 1) Sheet1.Cells (Row، Column + 1) .Value = Right (s، Len (s) - FirstSpace) Else Sheet1.Cells (Row، Column + 1) .Value = Right (s، Len (s) - FirstSpace) العمود) .Value = s End If Next End Sub 

لدينا نتيجة الآن.


$config[zx-auto] not found$config[zx-overlay] not found