EXCEL - VBA

엑셀의 유용함, 사용자 정의함수(2)

별동산 2020. 7. 28. 06:41
반응형

사용자 정의함수를 작성하는 방식은

Function 함수이름(인수명1 as type , 인수명2 as type, Optional 인수명3 as type = 기본값)

    처리 루틴

    함수이름 = 결과값

End Function

입니다.

 

1. Function으로 시작해서 End Funciton으로 끝나며, 그 사이에 처리 루틴을 작성하고, 함수명으로 rerurn값을 지정합니다.

 

2. 인수는 필요한 만큼 넣으면 되며, 숫자인지 문자인지 형식을 명확히 하기 위해 type을 지정해 주고,

예, i as Integer, search_cell as Range, 날짜1 as Date

 

type은 입력시 소문자로 입력해도 알아서 대문자 등으로 변환되므로 대,소문자는 신경쓰지 않아도 됩니다.

2. optional이란 인수가 꼭 필요하지는 않으나 있으면 그것이 적용되는 선택형 인수를 말하며,

optional 인수의 기본값은 type 뒤에 ="값"식으로 지정하며, 반드시 지정해야 하는 것은 아닙니다.

 

예1) optional 본번자릿수 as integer, Optional 부번자릿수 as integer

예2) optional find_char As String = "/"

예3) Optional 시간구분 As Integer = 1

3. 함수 처리후 결과값(return값)은 함수이름 = xxxxxx 으로 반드시 표현해야 하며,

함수명과 return값의 이름을 같게 해야 합니다.

 

※ 다른 언어의 경우는 return 방식을 쓰는데 엑셀 VBA의 특이한 점으로 주의해야 합니다.

 

예)

Function repl_cr(search_cell As Range, Optional repl_char As String = " ")

    ' alt_enter값을 특정캐릭터값으로 바꿔줍니다.

    repl_cr = Replace(search_cell, Chr(10), repl_char)

End Function

위 함수는 alt+enter값, ascii코드로 하면 10번 값[Chr(10)]을 repl_char로 대체(replace) 해주는 함수입니다.

repl_char 값을 입력하지 않아도 되며, 입력하지 않을 경우 기본값인 "  " 이 적용됩니다.

다시 말해 빈칸이 돼서 두 줄이 한 줄로 바뀌면서 중간에 공백이 삽입되는 것입니다.

 

사용자 정의 함수 사용 예

 

수식을 =repl_cr(a1,"->") 로 옵션 값을 입력하면 옵션 값으로 바뀌어서

결과값은

안녕하세요?->홍길동입니다.

가 됩니다.

4. function안에 들어가는 처리 루틴은 일반적인 경우와 마찬가지로

if문, for ~ next문, while ~ wend, for earch 변수 in 범위 ~ next 등

모든 것이 가능합니다.

5. function내 함수는 VBA에서 제공하는 함수는 그대로 쓰면 되는데,

워크시트에서만 제공하는 함수는 worksheetfunction.rounddown 식으로

앞에 worksheetfunction 또는 Application.Worksheetfunction을 붙여야 합니다.

6. 프로시져문이 2줄이상으로 길어지는 경우 줄 마지막에 _ 을 써서 연결합니다.

예)

If c3 > 0 Then mu = Trim(Mid(r1, IIf(c2 = 0, IIf(c1 = 0, 0, c1), c2) + 1, _

c3 - IIf(c2 = 0, c1, c2) - 1))

 

수식은 복잡하지만 한 문장이 두 줄이상인 경우 _ 로 연결한다는 것만 알면 됩니다.

반응형