TOP

VBA-수업 14.2. 사용자 정의 함수 만들기

VBA을 사용하면 일반 함수처럼 워크시트에서 사용할 수 있는 사용자 지정 함수(User Defined Function)를 만들 수 있습니다. 이는 기존 Excel 함수가 충분하지 않을 때 유용합니다.

User Defined Function(UDF)은 표준 Excel 기능에는 없는 사용자 생성 함수입니다.

이 예에서는 다른 Excel 함수와 유사하게 워크시트의 계산에 사용할 수 있는 사용자 지정 IF 함수를 만듭니다.


셀 (C2)에 값 ("YES")이 있는 경우 (B2)의 값을 표시하려면 수식 =IF(C2="YES",B2,0)에서 IF 함수를 사용할 수 있습니다.

이 경우 우리의 목표는 =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은 응용 프로그램(Excel)이 변경 사항에 민감해야 함을 알려줍니다(일반 함수 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
    

    여기를 클릭하여 이 예제가 포함된 Excel 파일을 다운로드할 수 있습니다: 🢃