사용자 정의함수를 작성하는 방식은
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))
수식은 복잡하지만 한 문장이 두 줄이상인 경우 _ 로 연결한다는 것만 알면 됩니다.
'EXCEL - VBA' 카테고리의 다른 글
엑셀 - 개발 도구 탭 활성화 하기 (0) | 2022.09.16 |
---|---|
지번 형식 변환하기 2 (사용자 정의함수) (0) | 2020.07.31 |
엑셀의 유용함, 사용자 정의함수(1) (0) | 2020.07.27 |
엑셀 날짜 관련 함수 총정리(5) (VBA 날짜관련 함수 - DateAdd, DateDiff, DatePart 등) (0) | 2020.07.20 |
개인용 매크로 통합문서, personal.xlsb (0) | 2020.07.10 |