يقدم لك محرر Downcodes شرحًا تفصيليًا لكود البحث عن اسم VBA، والذي يغطي ثلاث طرق: طريقة Range.Find واجتياز الحلقات والوظائف المخصصة، ويتضمن تطبيقات متقدمة وأسئلة شائعة لمساعدتك في إتقان البحث عن اسم VBA في Excel بسرعة. ستقدم هذه المقالة تنفيذ التعليمات البرمجية ومزايا وعيوب كل طريقة بالتفصيل، وستوفر حلاً أكثر شمولاً يعتمد على سيناريوهات التطبيق الفعلية.

لكتابة رمز VBA للبحث عن اسم، يمكنك القيام بذلك بعدة طرق مختلفة، مثل استخدام حلقة، أو استخدام وظيفة البحث في Excel، أو استخدام وظيفة مخصصة للبحث عن اسم محدد. أدناه، سوف نقدم بالتفصيل كيفية استخدام أسلوب Range.Find في VBA لكتابة وظيفة استعلام اسم.
في VBA، يعد أسلوب Range.Find أداة قوية جدًا وشائعة الاستخدام للعثور على بيانات محددة. فيما يلي الخطوات والأمثلة لترميز البحث عن الاسم باستخدام هذه الطريقة.
اسم البحث الفرعي ()
خافت WS كورقة عمل
Set ws = ThisWorkbook.Sheets(Sheet1) 'افترض أن قائمة الأسماء موجودة في الورقة1
اسم البحث خافت كسلسلة
searchName = Wang Xiaoming'هذا هو الاسم الذي نبحث عنه
تم العثور على خلية خافتة كنطاق
تعيين FoundCell = ws.Cells.Find(What:=searchName, LookIn:=xlValues, LookAt:=xlWhole)
إذا لم يتم العثور على الخلية فلا شيء إذن
تم العثور على اسم MsgBox: & اسم البحث & في: & FoundCell.Address
آخر
لم يتم العثور على اسم MsgBox: & اسم البحث
نهاية إذا
نهاية الفرعية
في هذا المثال، قمنا أولاً بإعداد كائن ورقة العمل ws للإشارة إلى ورقة العمل التي تحتوي على بيانات الاسم. searchName هو الاسم الذي نريد البحث عنه. بعد ذلك، استخدم طريقة البحث للبحث. إذا تم العثور على الاسم المقابل، فسنعرض الاسم وموقعه في مربع الرسالة. وإذا لم يتم العثور عليه، فسينبثق مربع رسالة لإبلاغ المستخدم.
إذا كانت الأسماء التي تبحث عنها متناثرة في مناطق غير منتظمة أو كنت بحاجة إلى مطابقة معايير بحث أكثر تعقيدًا، فستكون طريقة اجتياز الخلايا أكثر مرونة.
فرعي FindNameByLooping()
خافت WS كورقة عمل
Set ws = ThisWorkbook.Sheets(Sheet1) 'افترض أن قائمة الأسماء موجودة في الورقة1
اسم البحث خافت كسلسلة
searchName = Zhang San'هذا هو الاسم الذي نبحث عنه
خلية خافتة كنطاق
لكل خلية في ws.UsedRange
إذا كانت الخلية. القيمة = اسم البحث ثم
تم العثور على MsgBox الاسم: & اسم البحث & في: & cell.Address
الخروج من الباطن
نهاية إذا
الخلية التالية
لم يتم العثور على اسم MsgBox: & اسم البحث
نهاية الفرعية
في هذا الكود، يتم استخدام For Each حلقة للتكرار عبر المناطق المستخدمة في ورقة العمل. عند العثور على اسم مطابق، ينبثق مربع رسالة لعرض الاسم وموقعه، ثم استخدم Exit Sub للخروج من الروتين الفرعي. إذا لم يتم العثور عليه بعد اكتمال الاجتياز، فسينبثق مربع رسالة أيضًا.
بالإضافة إلى التعليمات البرمجية أعلاه التي يتم تشغيلها مباشرة في ماكرو VBA، يمكنك أيضًا إنشاء وظيفة مخصصة (وظيفة محددة من قبل المستخدم، UDF) تسمح لك باستخدام الصيغ مباشرة في خلايا Excel لإجراء استعلامات الأسماء.
وظيفة FindNameUDF (اسم البحث كسلسلة) كسلسلة
خافت WS كورقة عمل
Set ws = ThisWorkbook.Sheets(Sheet1) 'افترض أن قائمة الأسماء موجودة في الورقة1
تم العثور على خلية خافتة كنطاق
تعيين FoundCell = ws.Cells.Find(What:=searchName, LookIn:=xlValues, LookAt:=xlWhole)
إذا لم يتم العثور على الخلية فلا شيء إذن
FindNameUDF = تم العثور على الاسم: & searchName & at: & FoundCell.Address
آخر
FindNameUDF = لم يتم العثور على الاسم: & اسم البحث
نهاية إذا
وظيفة النهاية
يمكن استخدام هذه الوظيفة المخصصة FindNameUDF في أي خلية، على سبيل المثال، إذا قمت بإدخال =FindNameUDF(李思)، فسوف يُرجع موقع John أو المعلومات التي لم يتم العثور عليها.
في التطبيقات الفعلية، قد تحتاج أيضًا إلى التعامل مع بعض السيناريوهات المتقدمة، مثل حساسية حالة الأحرف والبحث الشامل ومشكلات أخرى.
FindAllOccurrences الفرعية ()
خافت WS كورقة عمل
Set ws = ThisWorkbook.Sheets(Sheet1) 'افترض أن قائمة الأسماء موجودة في الورقة1
اسم البحث خافت كسلسلة
searchName = Wang Xiaoming'هذا هو الاسم الذي نبحث عنه
خافت تم العثور عليه أولاً كسلسلة
تم العثور على خلية خافتة كنطاق
تعيين FoundCell = ws.Cells.Find(What:=searchName, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
إذا لم يتم العثور على الخلية فلا شيء إذن
firstFound = FoundCell.Address
يفعل
تم العثور على اسم MsgBox: & اسم البحث & في: & FoundCell.Address
تعيين FoundCell = ws.Cells.FindNext(foundCell)
التكرار التكراري أثناء عدم العثور على الخلية لا شيء وfoundCell.Address <> firstFound
آخر
لم يتم العثور على اسم MsgBox: & اسم البحث
نهاية إذا
نهاية الفرعية
في هذا الكود، يتم تعيين المعلمة MatchCase على True للإشارة إلى حساسية حالة الأحرف. بعد العثور على النتيجة الأولى، استخدم أسلوب FindNext لمواصلة البحث عن التطابقات اللاحقة، واستخدم حلقة Do Loop للتأكد من البحث في ورقة العمل بأكملها حتى العودة إلى. تم العثور على عنوان الخلية الأولى.
من خلال الجمع بين استخدام Range.Find ووظائف اجتياز الحلقات والوظائف المخصصة، يمكنك كتابة كود استعلام اسم VBA المناسب وفقًا للاحتياجات المحددة. ما ورد أعلاه هو الطرق المختلفة لاستخدام VBA للاستعلام عن رمز الاسم. يمكنك اختيار الطريقة الأكثر ملاءمة وفقًا لموقفك الفعلي.
1. كيفية استخدام VBA لكتابة رمز استعلام اسم بسيط؟
يمكن استخدام VBA لكتابة وحدات ماكرو Excel قوية. لكتابة رمز البحث عن الاسم، يمكنك اتباع الخطوات التالية:
أولاً، حدد نطاقًا في Excel لتخزين البيانات الخاصة بالأسماء والمعلومات ذات الصلة. على سبيل المثال، يمكنك تخزين الأسماء في العمود A والمعلومات الأخرى ذات الصلة في العمود B. ثم اضغط على Alt+F11 في Excel لفتح محرر VBA. في محرر VBA يمكنك إنشاء وحدة نمطية جديدة. في الوحدة الجديدة، يمكنك كتابة كود VBA لتنفيذ وظيفة الاستعلام عن الاسم. على سبيل المثال، يمكنك استخدام حلقة For للتكرار عبر عمود من الأسماء ثم استخدام عبارة شرطية لتحديد ما إذا تم العثور على اسم مطابق. وأخيرًا، يمكنك عرض نتائج الاستعلام في خلية أخرى في Excel أو استخدام وظيفة MsgBox لعرضها كمربع رسالة منبثقة.باتباع الخطوات المذكورة أعلاه، يمكنك كتابة كود VBA بسيط لتنفيذ وظيفة الاستعلام عن الاسم. يرجى تذكر تمكين وحدات الماكرو عند حفظ ملفات Excel.
2. ما هي المشكلات التي يجب الانتباه إليها عند كتابة كود VBA؟
عند كتابة التعليمات البرمجية لـ VBA، هناك بعض المشكلات التي يجب الانتباه إليها لضمان تشغيل التعليمات البرمجية بشكل صحيح وتحسين الأداء:
تجنب استخدام المتغيرات العامة: ستتواجد المتغيرات العامة طوال العملية بأكملها، مما سيشغل الذاكرة ويؤثر على أداء التعليمات البرمجية. حاول قصر نطاق المتغيرات على إجراءات فرعية أو وظائف محددة. استخدام التعليقات: يؤدي استخدام التعليقات في التعليمات البرمجية الخاصة بك إلى زيادة إمكانية قراءة التعليمات البرمجية ومساعدة المطورين الآخرين على فهم الغرض من التعليمات البرمجية بشكل أفضل. حاول إضافة التعليقات المناسبة لكل روتين فرعي أو وظيفة. معالجة الأخطاء: يمكن أن تؤدي إضافة معالجة مناسبة للأخطاء إلى التعليمات البرمجية إلى تجنب انقطاع التعليمات البرمجية أو الأخطاء بسبب المواقف غير المتوقعة. يمكنك استخدام عبارة On Error لاكتشاف أخطاء وقت التشغيل ومعالجتها. تحسين التعليمات البرمجية: حاول استخدام تقنيات ترميز فعالة، مثل تجنب الحلقات المتداخلة والحسابات المتكررة. يمكن أن يؤدي استخدام عبارة Exit For في حلقة إلى الخروج من الحلقة مبكرًا وتحسين كفاءة تنفيذ التعليمات البرمجية.3. كيفية توسيع وظيفة رمز استعلام اسم VBA؟
يمكن توسيع كود VBA وتخصيصه بمرونة لتلبية الاحتياجات المحددة. إذا كنت ترغب في توسيع وظيفة رمز استعلام اسم VBA، فيمكنك مراعاة الطرق التالية:
إضافة المزيد من شروط الاستعلام: بالإضافة إلى الاسم، يمكنك إضافة شروط استعلام أخرى في الكود، مثل العمر والجنس وما إلى ذلك. يمكنك استخدام عوامل التشغيل المنطقية (مثل And، Or) لدمج شروط استعلام متعددة. تنفيذ استعلامات غامضة: إذا كنت تريد السماح للمستخدمين بتنفيذ استعلامات غامضة، فيمكنك استخدام عامل التشغيل Like الخاص بـ VBA. على سبيل المثال، يمكنك السماح للمستخدمين باستخدام أحرف البدل (مثل * و؟) في الاستعلامات لتمثيل المطابقات الغامضة. التفاعل مع قاعدة البيانات: إذا كان حجم البيانات لديك كبيرًا جدًا، ففكر في تخزين البيانات في قاعدة بيانات واستخدام VBA للتفاعل مع قاعدة البيانات. يمكنك استخدام ADO (كائنات بيانات ActiveX) للاتصال بقاعدة البيانات والاستعلام عنها. إنشاء واجهة مستخدم: إذا كنت تريد أن يتمكن المستخدمون من إدخال شروط الاستعلام وعرض النتائج بشكل مستقل، فيمكنك استخدام أدوات إنشاء واجهة المستخدم مثل UserForm. من خلال إضافة مربعات نص وأزرار إلى UserForm، يمكن للمستخدمين إدخال شروط الاستعلام والنقر فوق الأزرار لتنفيذ عمليات الاستعلام.ما ورد أعلاه هو بعض الأفكار لتوسيع وظيفة كود الاستعلام عن اسم VBA، ويمكنك تخصيصها وتعديلها وفقًا للاحتياجات الفعلية. حظا سعيدا في كتابة كود VBA القوي!
آمل أن تساعدك هذه المقالة على فهم VBA وتطبيقه بشكل أفضل للاستعلام عن الاسم. إذا كان لديك أي أسئلة، فلا تتردد في طرحها!