VBA-Урок 14.2. Создание пользовательской функции

В этом примере мы создадим собственную функцию IF , которая может быть использована в расчетах на рабочем листе, подобно к Excel функций.

Чтобы отобразить значение (B2) если ячейка (C2) имеет значение ("YES"), мы могли бы использовать функцию IF в формуле = IF (C2 = "YES", B2,0) :

Нашей целью в этом случае является создание функции, которая могла бы делать это = IF (C2 has a green background, B2,0) , и которую мы бы записали, типа: =IF_GREEN(C2,B2):

Создание собственной функции

Начнем создавать функцию:

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

Теперь наша функция готова к использованию.

Application.Volatile говорит нам, что приложение является меняющимся (как это имеет место для функции IF ). Это означает, что она должна быть перечислена каждый раз, когда значение изменяется. Например, если вы измените любую из сумм (или, на самом деле, любую другую ячейку), эта функция будет перечислена и правильная сумма будет отражена.

Однако, изменение заливки ячейки не является событием, которое запускает перерасчет. Чтобы заставить эксель перечислить значения, вы можете выбрать пустую ячейку и нажать "Удалить" или добавить кнопку "Обновить", которая все будет обновлять, когда вы ее будете нажимать:

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

Вы можете скачать Excel файл, содержащий этот пример, нажав здесь.

Статьи по теме:

  • VBA-Урок 14.1. Использование Excel функций