كيفية استخدام وظيفة InStr في VBA (3 أمثلة سهلة)

Hugh West

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

تنزيل Practice Workbook

InStr Function.xlsm

مقدمة إلى وظيفة VBA InStr

  • ملخص

يبحث عن سلسلة محددة ضمن سلسلة معينة ، بدءًا من موضع معين. في حالة العثور على تطابق ، يتم إرجاع الموضع في السلسلة المحددة من حيث بدأت المباراة.

  • بناء الجملة

InStr ([بدء ] ، سلسلة 1 ، سلسلة 2 ، [قارن])

  • وسائط
الحجة المتطلب الوصف

[بدء] اختياري الموضع الذي سيبدأ منه البحث. الافتراضي هو 1.
string1 مطلوب السلسلة التي يبحث فيها عن سلسلة معينة.
سلسلة 2 مطلوب السلسلة التي يبحث عنها ضمن سلسلة معينة.
[قارن] اختياري قيمة رقمية بين {-1،0،1،2} تحدد نوع المقارنة. الالافتراضي هو -1 (vbUseCompareOption). إذا لم يتم تحديد عبارة مقارنة الخيار ، قم بإجراء مقارنة ثنائية.

ملاحظة:

  • على الرغم من أن الوسيطة [start] والوسيطة [قارن] اختيارية ، فأنت بحاجة إلى الوسيطة [start] إذا حددت الوسيطة [قارن] . وإلا ، فسيظهر خطأ.
  • إذا كانت إحدى الوسيطة أو كلاهما [بدء] والوسيطة [قارن] هي خالية ، ستواجه خطأ.
  • تؤدي القيم الأربع المحددة في الوسيطة [قارن] أربعة أنواع مختلفة من المقارنة. وهي مذكورة أدناه:
القيمة ثابت الوصف

-1 vbUseCompareOption يقوم بإجراء المقارنة المحددة في عبارة مقارنة الخيار.
0 vbBinaryCompare تجري مقارنة ثنائية.
1 vbTextCompare لإجراء مقارنة نصية.
2 vbDatabaseCompare لإجراء مقارنة بناءً على قاعدة البيانات الخاصة بك .
  • مقارنه الخيار عبارة عبارة مقدمة قبل بدء تشغيل كود VBA الرئيسي. يحدد ما إذا كان الكود سيبحث عن مقارنة ثنائية أو مقارنة نصية عند الحاجة.

نص مقارنة الخيار

    • بعبارات بسيطة ، المقارنة الثنائية تعني حساسة لحالة الأحرفالمقارنة.
    • بعبارات بسيطة ، مقارنة النص تعني المقارنة غير الحساسة لحالة الأحرف.
  • إرجاع القيمة
    • إرجاع الموضع في السلسلة 1 الذي بدأت منه السلسلة 2 ​​ .
    • في حالة السلسلة 2 غير موجود ضمن سلسلة 1 بدءًا من موضع البداية ، تُرجع القيمة 0.
    • إذا كانت السلسلة ذات طول صفري ، فتُرجع القيمة 0.
    • إذا كانت السلسلة السلسلة 2 ذات طول صفري ، تُرجع الوسيطة بدء .
    • وأخيرًا ، إذا كان أي من سلسلة 1 أو سلسلة 2 هي خالية ، تعرض خطأ.

3 أمثلة سهلة لاستخدام وظيفة VBA InStr

في في هذا القسم ، سنرى ثلاثة أمثلة سهلة لتطبيق وظيفة VBA InStr في Excel. دعونا نرى المثال الأول لوظيفة InStr في رموز VBA.

1. تحديد ما إذا كان العنوان هو عنوان بريد إلكتروني أم لا باستخدام وظيفة VBA InStr

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

الآن سنقوم بتطوير رمز VBA باستخدام وظيفة InStr لتحديد سواء كان عنوان بريد إلكتروني أم لا. للقيام بذلك ، اتبع الخطوات أدناه.

الخطوات:

  • في البداية ، انتقل إلى علامة التبويب Developer وحدد Visual Basic (أو اضغط على Alt + F11) لفتح VBA نافذة.

  • ثم ، في نافذة VBA ، انتقل إلى Insert & gt؛ الوحدة النمطية .

  • بعد ذلك ، في الوحدة ، قم بلصق الكود التالي:
4537

  • علاوة على ذلك ، قمنا بإنشاء وظيفة تسمى DECISION . يقرر ما إذا كان العنوان هو عنوان بريد إلكتروني أم لا. دعنا نطبق الوظيفة على مجموعة البيانات التي لدينا.
  • في الخلية C5 ، اكتب الصيغة التالية ثم املأ باقي الخلايا تلقائيًا باستخدام مقبض التعبئة .
=DECISION(B5)

  • كما نرى ، حددنا كل عنوان سواء كان عنوان بريد إلكتروني أم لا.

🎓 كيف تعمل المدونة؟

  • قرار الوظيفة (سلسلة 1 كسلسلة)

أولاً ، يؤدي هذا إلى إنشاء وظيفة تسمى القرار مع وسيطة السلسلة المسماة string1 .

  • Dim Position As Integer

تعلن عن متغير عدد صحيح يسمى Position .

  • Position = InStr (1، string1، “@”، 0)

هذا يعين قيمة ضع متغير كناتج للدالة InStr مع الوسيطات 1 ، سلسلة 1 ، "@" و 0 . باختصار ، هذا يعين الموقع في العنوان حيث يوجد "@" .

  • إذا كان Position = 0 ثم DECISION = "ليس بريدًا إلكترونيًا"

يقوم بتعيين إخراج الوظيفة DECISION كـ "ليس بريدًا إلكترونيًا" ، إذا كان الموضع المتغير هو 0 ، وهذا يعني أنه لم يكن هناك "@" في العنوان.

(تذكر إذا لم يتم العثور على أي سلسلة ضمن السلسلة المحددة ، 1> InStr ترجع الدالة 0 ).

  • Else DECISION = "Email"

هذا يعين إخراج وظيفة DECISION كـ “Email” إذا كان هناك “@” في العنوان. وبالتالي فإن العناوين التي يوجد بها "@" يتم تصنيفها على أنها بريد إلكتروني ، ويتم تصنيف الباقي على أنه "ليس بريدًا إلكترونيًا" .

قراءات مماثلة

  • كيفية استخدام وظيفة VBA UCASE في Excel (4 أمثلة)
  • استخدم دالة MsgBox في Excel VBA (دليل كامل)
  • كيفية استخدام وظيفة VBA SPLIT في Excel (5 أمثلة)
  • استخدم وظيفة LCase في VBA في Excel (باستخدام 4 أمثلة)
  • كيفية استخدام وظيفة الإصلاح في Excel VBA (4 أمثلة)

2. استخدام وظيفة VBA InStr لـ استخراج امتداد بعض عناوين البريد الإلكتروني

هنا ، لدينا قائمة ببعض عناوين البريد الإلكتروني لبعض العملاء. هذه المرة سنستخرج امتداد عنوان البريد الإلكتروني مثل ما إذا كان لديهم gmail.com أو yahoo.com .

للقيام بذلك ، اتبع الخطوات أدناه.

الخطوات:

  • لتبدأ ، مثل الطريقة السابقة ، افتح VBA <2 جديد> module ولصق الكود التالي في النافذة.
7430

  • بالإضافة إلى ذلك ، أنشأنا وظيفة تسمى تمديد . فهو يستخرج امتداد أي عنوان بريد إلكتروني.
  • علاوة على ذلك ، دعنا نطبق هذه الوظيفة على مجموعة البيانات التي لدينا. أولاً ، أدخل هذه الصيغة في الخلية C5 ثم انقر نقرًا مزدوجًا فوق مقبض التعبئة .
=EXTENSION(B5)

  • أخيرًا ، يمكننا أن نرى أننا نجحنا في استخراج امتداد جميع رسائل البريد الإلكتروني.

🎓 كيف تعمل المدونة؟

  • تمديد الوظيفة (البريد الإلكتروني كسلسلة)

يؤدي هذا إلى إنشاء وظيفة جديدة تسمى EXTENSION ، مع وسيطة السلسلة المسماة البريد الإلكتروني .

  • الوضع الخافت كعدد صحيح

يعلن هذا الجزء عن متغير عدد صحيح يسمى الموضع .

  • Position = InStr (1، Email، "@"، 0)

هذا يعين قيمة الموضع متغير كإخراج للدالة InStr مع الوسيطات 1 والبريد الإلكتروني و "@" و 0 . باختصار ، هذا يعين الموضع في البريد الإلكتروني حيث يوجد "@" .

  • EXTENSION = Right (Email، (Len (Email) - Position))

يخصص هذا الجزء إخراج وظيفة EXTENSION كأحرف بعد الرمز "@" . هذا هو الامتداد المطلوب لـ البريد الإلكتروني .

3. استخراج الاسم الأول أو اسم العائلة من الاسم باستخدام وظيفة VBA InStr

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

للقيام بذلك ، اتبع الخطوات أدناه.

الخطوات:

  • أولاً ، على غرار الطريقة 1 ، الصق الكود أدناه في وحدة نمطية جديدة في نافذة VBA.
9250

  • هنا ، قمنا بإنشاء وظيفة تسمى SHORTNAME تستخرج إما الاسم الأول أو الاسم الأخير من الاسم. دعنا نطبق هذه الصيغة على مجموعة البيانات الخاصة بنا.
  • في البداية ، لاستخراج الاسم الأول ، اكتب الصيغة أدناه في الخلية C5 .
=SHORTNAME(B5,-1)

  • أخيرًا ، لاستخراج الأسماء الأخيرة ، نكتب الصيغة التالية في D5 :
=SHORTNAME(B5,1)

  • بعد ذلك ، إذا قمنا تلقائيًا بتعبئة بقية الخلايا بـ Fill Handler ، سنرى النتيجة المرجوة.

🎓 كيف يعمل الرمز؟

  • Function SHORTNAME (الاسم كسلسلة ، First_or_Last As Integer)

تنشئ وظيفة جديدة تسمى SHORTNAME مع وسيطة سلسلة واحدة تسمى الاسم ووسيطة صحيحة واحدة تسمى First_or_Last .

  • Dim Break As Integer

يعلن هذا الجزء عن متغير عدد صحيح جديد يسمى فاصل .

  • Break = InStr (1، Name، ""، 0)

يقوم بتعيين قيمة المتغير فاصل كناتج للدالة InStr مع الوسيطات 1 ، الاسم ، "" و 0 . باختصار ، هذا يعين الموضع في الاسم حيث توجد مسافة ("").

  • إذا كان First_or_Last = -1 ثم SHORTNAME = يسار (اسم ، فاصل - 1)

هذا السطر يعيّن إخراج وظيفة SHORTNAME كأحرف قبل مسافة ، إذا كانت الوسيطة First_or_Last هي -1. هذا هو الاسم الأول.

  • SHORTNAME = Right (Name، Len (Name) - Break)

هذا الجزء يعين إخراج يعمل SHORTNAME كأحرف بعد مسافة ، إذا كانت الوسيطة First_or_Last هي 1. هذا هو الاسم الأخير.

الخاتمة

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

هيو ويست مدرب ومحلل إكسل ذو خبرة عالية ولديه أكثر من 10 سنوات من الخبرة في هذا المجال. حاصل على درجة البكالوريوس في المحاسبة والمالية ودرجة الماجستير في إدارة الأعمال. لدى هيو شغف بالتدريس وقد طور منهجًا تعليميًا فريدًا يسهل اتباعه وفهمه. ساعدت معرفته الخبيرة ببرنامج Excel الآلاف من الطلاب والمهنيين في جميع أنحاء العالم على تحسين مهاراتهم والتميز في حياتهم المهنية. من خلال مدونته ، يشارك Hugh معرفته مع العالم ، ويقدم دروسًا مجانية في Excel وتدريبًا عبر الإنترنت لمساعدة الأفراد والشركات على تحقيق إمكاناتهم الكاملة.