TOP

VBA- الدرس 14.2. إنشاء وظيفة مخصصة

باستخدام 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)

لنبدأ في إنشاء وظيفة UDF الخاصة بنا:

Function IF_GREEN(paid As Range, amount)
     
End Function

الحجج:

  • paid As Range: الخلية التي سنتحقق منها ؛
  • amount: القيمة التي سنقوم بإدخالها إذا TRUE.
  • في هذه الحالة ، إذا قام الشيك بإرجاع 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
    

    الآن وظيفتنا جاهزة للاستخدام.

    Application.Volatile يخبرنا أن الوظيفة متقلبة (كما هو الحال مع الوظيفة IF العادية). هذا يعني أنه سيتم إعادة حسابه في كل مرة تتغير فيها القيمة. على سبيل المثال ، إذا قمت بتغيير أي قيمة في عمود المبلغ (أو في الواقع أي خلية أخرى) ، فسيتم إعادة حساب هذه الوظيفة وسيتم عرض المبلغ المحدث.

    ومع ذلك ، فإن تغيير تعبئة الخلية ليس الحدث الذي يؤدي إلى إعادة الحساب. لإجبار 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 الذي يحتوي على هذا المثال بالنقر هنا.