البرنامج التعليمي لوظيفة Excel VBA: العودة، الاتصال، الأمثلة
⚡ ملخص ذكي
دالة 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 | اكشن |
|---|---|
|
|
|
|
|
|
|
|
كيفية إرجاع قيمة وتحديد نوع بيانات الدالة
للدالة وظيفة واحدة لا تقوم بها الروتينات الفرعية: وهي إعادة قيمة. هناك تفصيلان يتحكمان في هذه القيمة، وكلاهما سهل التغاضي عنه.
أولاً، عملية الإسناد. لا تحتوي لغة 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) واجهة المستخدم
أضف زر أمر إلى ورقة العمل كما هو موضح أدناه
قم بتعيين الخصائص التالية لزر CommandButton1 إلى ما يلي.
| S / N | السيطرة | الممتلكات | بعد التخفيض |
|---|---|---|---|
| 1 | زر الأوامر1 | الاسم | btnAddNumbers |
| 2 | شرح | إضافة Numbers الوظيفة |
يجب أن تظهر واجهتك الآن على النحو التالي
الخطوة 2) رمز الوظيفة.
- اضغط على Alt + F11 لفتح نافذة التعليمات البرمجية
- أضف الكود التالي
Private Function addNumbers(ByVal firstNumber As Integer, ByVal secondNumber As Integer) addNumbers = firstNumber + secondNumber End Function
هنا في الكود،
| Code | اكشن |
|---|---|
|
|
|
|
|
|
الخطوة 3) اكتب Code التي تستدعي الدالة
- انقر بزر الماوس الأيمن على زر btnAddNumbers زر الأمر
- حدد عرض Code
- أضف الكود التالي
Private Sub btnAddNumbers_Click() MsgBox addNumbers(2, 3) End Sub
هنا في الكود،
| Code | اكشن |
|---|---|
| "رسالةBox تضيفNumbers(2,3) " |
|
الخطوة 4) قم بتشغيل البرنامج، وسوف تحصل على النتائج التالية
قم بتنزيل 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 إلا إذا كنت ترغب في هذا التأثير.



