728x90

엑셀에서는 각종 함수를 사용할 수 있습니다.

지원되는 함수만해도 각양각색 다양하고 엑셀이 대중적으로 사용되는 이유이기도 합니다.

 

엑셀의 함수들

 

 

그래도 하나씩 나한테 꼭 필요하지만 없는 것들이 있습니다.

이럴때는 VBA로 함수를 만들 수 있습니다.

엑셀에서 함수를 만드는 예제 포스팅은 아래를 참고하세요.

엑셀(EXCEL) VBA로 영문자에서 이니셜(Initial) 추출하는 함수 만들기(첫 머리글자 따는 코드)

 

엑셀(EXCEL) VBA로 영문자에서 이니셜(Initial) 추출하는 함수 만들기(첫 머리글자 따는 코드)

한글은 한자어를 사용해서 개념적으로 어려운 단어를 만들고 음절을 생략하는 식으로 약어를 만듭니다.영어에는 단어를 쓰고 난 후에 각 단어의 첫 영자를 따서 약어를 만듭니다. 축구에 관련

toast-story.tistory.com

 

그런데 함수에 대해서 만들때는 좋게 사용하지만 설명을 달아놓지 않으면 나중에는 전혀 사용하지 못합니다.

코드를 작성해 놓고 오랜만에 보면 어? 모르겠다 하는 경우가 한둘이 아니죠.

코드안에 주석으로 처리를 해두어도 되겠지만 엑셀 인터페이스에서 설명을 보는 방법을 알아보겠습니다.

기본적으로 사용자 함수는 작성할 수 있을 정도의 고수분들이 참고용으로 사용하는 기능이니 코드를 펼치겠습니다.

 

< 예시 코드 >

 

Function FilterOddEven(rng As Range, num As Integer) As Variant
'이 Function 항목은 오늘 사용할 함수입니다.

    Dim cell As Range
    Dim result() As Variant
    Dim count As Integer
    Dim i As Integer
    
    ' 입력 값 검사
    If num <> 1 And num <> 2 Then
        FilterOddEven = CVErr(xlErrValue) ' 숫자가 1, 2가 아니면 #VALUE! 에러를 나타냄
        Exit Function
    End If
    
    '결과 배열 만들기
    ReDim result(1 To rng.count)
    count = 0
    
    ' 홀수(1) 또는 짝수(2) 조건에 맞는 값만 필터링
    i = 1
    For Each cell In rng
        If Not IsEmpty(cell.Value) Then
            If (num = 1 And i Mod 2 <> 0) Or (num = 2 And i Mod 2 = 0) Then
                count = count + 1
                result(count) = cell.Value
            End If
        End If
        i = i + 1
    Next cell
    
    ' 결과 배열 크기조절
    If count > 0 Then
        ReDim Preserve result(1 To count)
    Else
        FilterOddEven = CVErr(xlErrNA) ' 결과가 없으면 #N/A 반환
        Exit Function
    End If
    
    ' 배열 반환
    FilterOddEven = result
End Function

'---------------------------------------------
'↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
' 오늘의 주제인 설명을 추가하는 코드입니다.

Sub AddDescription()
    Dim funcName As String
    Dim funcDesc As String
    Dim paramDesc1 As String
    Dim paramDesc2 As String

    ' ① 함수 이름을 정확하게 입력합니다.
    funcName = "FilterOddEven"
    ' ② 함수의 전체 설명입니다.
    funcDesc = "함수의 설명 - 주어진 범위에서 홀수/짝수 리스트를 필터합니다."

    ' ③ 매개변수 설명 설정
    paramDesc1 = "리스트를 필터할 범위"
    paramDesc2 = "필터할 기준을 선택합니다. 1 = 홀수번째 값, 2 = 짝수번째 값"

    ' ④ 함수 옵션 등록
    Application.MacroOptions Macro:=funcName, _
                              Description:=funcDesc, _
                              Category:="사용자 정의 함수", _
                              ArgumentDescriptions:=Array(paramDesc1, paramDesc2)
End Sub

 

 

이번에 예시로 들기 위해 작성해둔 사용자 함수를 사용하겠습니다. 위에 있는

"Function FilterOddEven(rng As Range, num As Integer) As Variant"에서 "End Function"까지는 그냥 예시입니다.

함수의 이름은 FilterOddEven이고 범위 하나와 숫자 하나를 계수로 받아들입니다.

오늘 소개하고 싶은 것은 아래 있는 "Sub AddDescription()" 구문입니다.

 

위의 코드의 ①, ②, ③번 부분은 설명과 같습니다.

함수의 이름과 함수 자체의 설명, 매개변수의 설명을 입력합니다.

④ Application.MacroOptions

 이 부분이 메크로(코드)의 옵션을 변경하는 적용 어플리케이션입니다.

 funcName 변수의 함수를 찾아서 Description(설명)과 Categoty(분류)를 변경합니다.

그리고 ArgumentDescriptions(매개변수)를 배열 형식으로 입력합니다.

 

※ 주의하실 점은 "Sub AddDescription()"  는 그냥 둔다고 되는 것이 아니고 F5나 ▶ 버튼을 눌러서 실행시켜야 합니다.

엑셀이 함수를 찾을 수 있도록 모듈을 만들어서 작성하거나 함수 바로 아래 작성해두고 단독으로 실행하면 됩니다.

한번만 실행하면 해당 문서에서는 계속 작동합니다.

 

설명을 보는 방법도 알려드리겠습니다.

아래 움짤로 보면 이해 되실 것 같습니다.

 

설명 확인하는 방법

 

함수를 다 타이핑해서 입력한 후에 함수키를 누르면 "함수 인수" 매뉴가 나타나는데 여기서 볼 수 있습니다.

함수키

 

방큼 코드를 통해 입력 한 설명이 정상적으로 입력 되었음을 알 수 있습니다.

좀 더 복잡하게도 넣을 수 있으니 사용자 함수를 여러개 사용하시는 분은 이런식으로 설명을 추가해 보세요.

함수를 사용하기가 편해지고 응용력이 높아질 것입니다.

 

잘 입력되어 있죠

 

 

 

 

반응형

+ Recent posts