البرنامج التعليمي لوظيفة Excel VBA: العودة، الاتصال، الأمثلة

⚡ ملخص ذكي

دالة VBA في Excel عبارة عن كتلة من التعليمات البرمجية تُنفّذ مهمةً ما وتُعيد نتيجةً إلى البرنامج الذي استدعاها. تتناول هذه الصفحة صيغة تعريف الدالة، وكيفية إرجاع قيمة، ومثالًا عمليًا على عملية جمع، واستخدام الدالة داخل خلية في ورقة العمل.

  • 🎯 فريف: تقوم الدالة بتنفيذ مهمة محددة وتعيد نتيجة واحدة إلى الكود الذي يستدعيها.
  • 🧾 بناء الجملة: تقوم الدالة name(arguments) As Type بفتح الكتلة وتقوم الدالة End Function بإغلاقها.
  • ↩️ إرجاع قيمة: قم بتعيين النتيجة إلى اسم الدالة، كما في إضافةNumbers = العدد الأول + العدد الثاني.
  • 🔢 نوع الإرجاع: إعلان طالما أو كما Double يتجنب استخدام النسخة الافتراضية الأبطأ.
  • 🖱️ الدعوة: يقوم زر الأمر بتمرير رقمين وعرض المجموع الناتج في مربع رسالة.
  • 📊 استخدام ورقة العمل: تتحول الدالة العامة في وحدة نمطية قياسية إلى صيغة معرفة من قبل المستخدم في أي خلية.

دالة VBA في Excel

ما هي الوظيفة؟

الوظيفة هي جزء من التعليمات البرمجية التي تؤدي مهمة محددة وترجع النتيجة. تُستخدم الوظائف في الغالب لتنفيذ المهام المتكررة مثل تنسيق البيانات للمخرجات وإجراء العمليات الحسابية وما إلى ذلك.

لنفترض أنك تقوم بتطويرping برنامج لحساب الفائدة على القرض. يمكنك إنشاء دالة تستقبل مبلغ القرض وفترة السداد. ثم تستخدم الدالة مبلغ القرض وفترة السداد لحساب الفائدة وإرجاع قيمتها.

لماذا استخدام الوظائف

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

قواعد تسمية الوظائف

تُطابق قواعد التسمية قواعد تسمية الإجراءات الفرعية. لا يمكن أن يحتوي اسم الدالة على مسافة، ويجب أن يبدأ بحرف أو شرطة سفلية، ولا يمكن أن يكون اسمًا محجوزًا. VBA كلمات مفتاحية مثل Function أو Private أو End.

بناء جملة VBA للإعلان عن الوظيفة

Private Function myFunction (ByVal arg1 As Integer, ByVal arg2 As Integer)
    myFunction = arg1 + arg2
End Function

هنا في بناء الجملة،

Code اكشن
  • "وظيفة خاصة myFunction(...)"
  • هنا يتم استخدام الكلمة الأساسية "Function" للإعلان عن وظيفة تسمى "myFunction" وبدء نص الوظيفة.
  • يتم استخدام الكلمة الأساسية "خاص" لتحديد نطاق الوظيفة
  • "ByVal arg1 كعدد صحيح، ByVal arg2 كعدد صحيح"
  • يعلن عن معاملين لنوع البيانات الصحيح وهما 'arg1' و'arg2'.
  • myFunction = arg1 + arg2
  • يقيم التعبير arg1 + arg2 ويعين النتيجة لاسم الوظيفة.
  • "وظيفة النهاية"
  • تُستخدم عبارة "End Function" لإنهاء جسم الدالة

كيفية إرجاع قيمة وتحديد نوع بيانات الدالة

للدالة وظيفة واحدة لا تقوم بها الروتينات الفرعية: وهي إعادة قيمة. هناك تفصيلان يتحكمان في هذه القيمة، وكلاهما سهل التغاضي عنه.

أولاً، عملية الإسناد. لا تحتوي لغة VBA على عبارة Return. بدلاً من ذلك، يتم إسناد النتيجة إلى اسم الدالة نفسها، ولهذا السبب يظهر السطر كالتالي: myFunction = arg1 + arg2إذا لم يتم تنفيذ هذا التعيين مطلقًا، فإن الدالة تعيد قيمة فارغة بصمت بدلاً من إثارة خطأ، لذلك يجب على كل فرع من فروع الكود تعيينها.

أما الأمر الثاني فهو نوع القيمة المُعادة. ينتهي التصريح أعلاه عند القوس المُغلق، لذا تُعيد الدالة نوع Variant. إضافة عبارة As بعد الأقواس تُصلح النوع، مما يُسرّع العملية، ويُقلل استهلاك الذاكرة، ويُمكّن المُصرّف من اكتشاف أي عدم تطابق.

إعلان سياسات الإرجاع والاستبدال متى يتم استخدامه
الدالة f(x As Long) متنوع فقط عندما يختلف نوع النتيجة بشكل حقيقي
دالة f(x) As Long طويل الأعداد الصحيحة مثل العد وأرقام الصفوف
دالة f(x As Long) As Double Double أي عملية حسابية تنتج أعدادًا عشرية
دالة f(x As Long) As String خيط تم إرجاع نص منسق للعرض
دالة f(x As Long) As Boolean منطقية فحص التحقق من الصحة يجيب بـ "صحيح" أو "خطأ".

💡 نصيحة: استخدم دالة الخروج للخروج مبكراً بمجرد تعيين قيمة الإرجاع، بنفس الطريقة التي يخرج بها Exit Sub من روتين فرعي.

الوظيفة الموضحة بمثال:

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

  1. إنشاء واجهة المستخدم
  2. أضف الوظيفة
  3. كتابة التعليمات البرمجية لزر الأمر
  4. اختبر الكود

الخطوة 1) واجهة المستخدم

أضف زر أمر إلى ورقة العمل كما هو موضح أدناه

وظائف VBA والروتين الفرعي

قم بتعيين الخصائص التالية لزر CommandButton1 إلى ما يلي.

S / N السيطرة الممتلكات بعد التخفيض
1 زر الأوامر1 الاسم btnAddNumbers
2 شرح إضافة Numbers الوظيفة

يجب أن تظهر واجهتك الآن على النحو التالي

وظائف VBA والروتين الفرعي

الخطوة 2) رمز الوظيفة.

  1. اضغط على Alt + F11 لفتح نافذة التعليمات البرمجية
  2. أضف الكود التالي
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer)
    addNumbers = firstNumber + secondNumber
End Function

هنا في الكود،

Code اكشن
  • "إضافة وظيفة خاصةNumbers(...) "
  • يعلن عن وظيفة خاصة "إضافةNumbers" الذي يقبل معلمتين صحيحتين.
  • "ByVal firstNumber كعدد صحيح، ByVal SecondNumber كعدد صحيح"
  • يعلن عن متغيرين للمعلمات firstNumber و secondNumber
  • "يضيفNumbers =الرقم الأول +الرقم الثاني"
  • فهو يضيف قيمتي firstNumber و SecondNumber ويعين المجموع المراد إضافتهNumbers.

الخطوة 3) اكتب Code التي تستدعي الدالة

  1. انقر بزر الماوس الأيمن على زر btnAddNumbers زر الأمر
  2. حدد عرض Code
  3. أضف الكود التالي
Private Sub btnAddNumbers_Click()
    MsgBox addNumbers(2, 3)
End Sub

هنا في الكود،

Code اكشن
"رسالةBox تضيفNumbers(2,3) "
  • يستدعي الوظيفة إضافةNumbers ويمرر 2 و3 كمعاملات. تعيد الدالة مجموع الرقمين خمسة (5)

الخطوة 4) قم بتشغيل البرنامج، وسوف تحصل على النتائج التالية

وظائف VBA والروتين الفرعي

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

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

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

كيفية استخدام دالة VBA في خلية ورقة العمل

يمكن كتابة دالة بلغة VBA في خلية تمامًا مثل دالتي SUM أو VLOOKUP. يُطلق على هذا في Excel اسم دالة مُعرَّفة من قِبل المستخدم (UDF)، وهذا هو السبب الذي يدفع الكثيرين إلى تعلّم الدوال قبل الإجراءات الفرعية. يجب استيفاء ثلاثة شروط.

  • ضعه في وحدة نمطية قياسية: إدراج، وحدة نمطية في المحرر. الدالة المخزنة خلف ورقة العمل أو في ThisWorkbook غير مرئية لشريط الصيغة.
  • أعلنها للعامة: يستخدم المثال أعلاه الوضع الخاص (Private)، مما يخفيه عن برنامج Excel. الوضع العام (Public) هو الوضع الافتراضي، لذا يكفي ببساطة إزالة الكلمة المفتاحية.
  • أعد قيمة، ولا تُغير شيئاً: لا يمكن لدالة المستخدم (UDF) تنسيق الخلايا أو حذف الصفوف أو الكتابة إلى خلية أخرى. يمنع برنامج Excel هذه الإجراءات، وتظهر الخلية #VALUE!.

الدالة أدناه تحول درجة الحرارة ويمكن استخدامها في أي مكان على الورقة.

Public Function CelsiusToF(ByVal Celsius As Double) As Double
    CelsiusToF = (Celsius * 9 / 5) + 32
End Function

احفظ المصنف كملف .xlsm يدعم وحدات الماكرو، ثم اكتب =CelsiusToF(A1) في أي خلية. يتم تحديث النتيجة عند تغيير قيمة A1، ويظهر الاسم في قائمة الإكمال التلقائي للصيغة ضمن فئة "معرّف من قِبل المستخدم". ولأن المصنف يحتوي الآن على وحدات ماكرو، يجب على أي شخص يفتحه تمكين المحتوى قبل أن تُرجع الصيغة قيمة بدلاً من #NAME؟.

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

تُعزى معظم الدوال التي يتم تجميعها ولكنها تُرجع إجابة خاطئة إلى أربع مشكلات.

  • تُرجع الدالة قيمة فارغة أو 0: لم يتم إسناد النتيجة إلى اسم الدالة، أو أن أحد فروع عبارة "if" يتخطى عملية الإسناد. قم بتعيين قيمة الإرجاع في كل مسار.
  • #NAME? في خلية ورقة العمل: الدالة خاصة، أو موجودة في وحدة ورقة بدلاً من وحدة نمطية قياسية، أو تم حفظ المصنف بدون تمكين وحدات الماكرو.
  • تجاوز السعة مع الوسائط الصحيحة: يستخدم المثال نوع البيانات As Integer، والذي يتوقف عند 32,767. قم بتغيير كلا المعاملين ونوع الإرجاع إلى Long لأي بيانات حقيقية.
  • تغيير الحجة يفاجئ المتصل: يؤدي حذف ByVal إلى تمرير VBA للمتغير نفسه، مما يسمح للدالة بتغيير قيمة المُستدعي. استخدم ByVal إلا إذا كنت ترغب في هذا التأثير.

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

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

أضف الكلمة المفتاحية الاختيارية مع قيمة افتراضية، كما في: اختياري حسب القيمة، معدل حسب Double = 0.05. يجب أن يكون كل مُعامل بعد المُعامل الاختياري اختياريًا أيضًا، ويجب أن يأتي في نهاية القائمة.

نعم، من خلال دالة Application.WorksheetFunction، على سبيل المثال Application.WorksheetFunction.Sum(Range(“A1:A10”)). أما الدوال التي يوفرها VBA بالفعل، مثل Left أو Trim، فيتم استدعاؤها مباشرةً بدون هذا البادئة.

نعم. الصق صيغة ورقة العمل، وسيقوم مساعد الذكاء الاصطناعي بإرجاع دالة عامة مكافئة ذات وسائط مُسماة ونوع إرجاع مُعلن. قارن النتائج على صفوف نموذجية قبل استبدال الصيغة.

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

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