باستخدام VBA ، يمكنك إنشاء دالة مخصصة (تسمى User Defined Function) يمكن استخدامها في أوراق العمل تمامًا مثل الوظائف العادية. يكون هذا مفيدًا عندما تكون وظائف Excel الموجودة غير كافية.
User Defined Function (UDF) هي دالة أنشأها المستخدم ولا توجد في وظيفة Excel القياسية.
في هذا المثال ، سننشئ دالة IF مخصصة يمكن استخدامها في العمليات الحسابية على ورقة العمل ، على غرار وظائف Excel الأخرى.
لعرض قيمة (B2) إذا كانت الخلية (C2) لها القيمة ("YES") ، يمكننا استخدام الدالة IF في الصيغة = IF (C2 = "YES"، B2،0):
هدفنا في هذه الحالة هو إنشاء دالة يمكنها القيام بذلك = IF (C2 لها خلفية خضراء ، B2،0) والتي نكتبها مثل: = IF_GREEN (C2، B2):
لنبدأ في إنشاء وظيفة UDF الخاصة بنا:
Function IF_GREEN(paid As Range, amount) End Function
الحجج:
في هذه الحالة ، إذا قام الشيك بإرجاع FALSE ، فستكون القيمة دائمًا 0 ، لذلك لا يوجد سبب لتحديد وسيطة لها.
للتحقق من صحة اللون ، يمكنك استخدام الخلية التي تحتوي على اللون الذي تريده:
Function IF_GREEN(paid As Range, amount) green_color = Sheets("Sheet1").Range("K1").Interior.color End Function
ولكن لتجنب الاعتماد على الخلية ، سنستخدم ببساطة رقم اللون المطلوب:
Function IF_GREEN(paid As Range, amount) green_color = 5296274 'أخضر End Function
لتحديد رقم لون الخلفية لخلية ، حدد الخلية وقم بتشغيل هذا الماكرو:
Sub test_color() MsgBox ActiveCell.Interior.color End Sub
الآن ، كل ما علينا فعله هو التحقق من لون الخلية باستخدام IF:
Function IF_GREEN(paid As Range, amount) Application.Volatile green_color = 5296274 'أخضر If paid.Interior.color = green_color Then 'إذا كان هذا صحيحا IF_GREEN = amount Else 'إذا كذب IF_GREEN = 0 End If End Function
الآن وظيفتنا جاهزة للاستخدام.
ومع ذلك ، فإن تغيير تعبئة الخلية ليس الحدث الذي يؤدي إلى إعادة الحساب. لإجبار Excel على إعادة حساب القيم ، يمكنك تحديد أي خلية فارغة والنقر فوق حذف ، أو إضافة زر تحديث ("Refresh") لتحديث كل شيء عند النقر فوقه:
Sub refresh_macro() Application.Calculate End Sub
فيما يلي طريقة مختصرة لكتابة نفس الوظيفة:
Function IF_GREEN(paid As Range, amount) Application.Volatile IF_GREEN = 0 'إذا كذب If paid.Interior.color = 5296274 Then IF_GREEN = amount 'إذا كان هذا صحيحا End Function
يمكنك تنزيل ملف tblExceltbl الذي يحتوي على هذا المثال بالنقر هنا.