-
Excel 매크로 (VBA) - 014. 함수(function) (전편)Excel/Excel 매크로 2022. 9. 5. 20:50728x90
전체 목차
- 001. 특정 행을 복사하여 삽입하기
- 002. 선택하여 붙여 넣기 기능 정리
- 003. 변수/Assignment/Loop/비교
- 004. 데이터가 있는 셀의 범위 알아내기
- 005. 데이터 시트(쉘) 순회하기
- 006. 셀 병합 하기
- 007. 변수에 저장되어 있는 데이터 확인하기 (디버그 기능)
- 008. 정렬하기 (Sort)
- 009. 버튼 컨트롤 (Excel Form vs. ActiveX)
- 010. 콤보 상자 컨트롤 (Excel Form vs. ActiveX)
- 011. 확인란/옵션단추 컨트롤(Excel Form vs. ActiveX)
- 012. 스핀단추 컨트롤(스피너, Excel Form vs. ActiveX)
- 013. 자동필터(Auto Filter)
포스트 목차.
01. 엑셀에서의 함수
02. 사용자 정의 함수
03. 함수의 파라미터
04. 함수의 반환값
05. 함수의 예제
지금까지 Sub 프로시저(혹은 Sub루틴)을 위주로 매크로를 작성했다. 본 포스트에서는 또 다른 프로시저인 Function에 대해 다루려고 한다.
01. 엑셀에서의 함수
VBA에서의 함수를 다루기 전에, 우리에게 익숙한 엑셀에서의 함수에 대해 알아보자. 우리가 VBA로 따로 추가하지 않아도 엑셀은 여러 함수들을 제공한다. 이러한 함수들을 빌트인 함수(Built-in Function)이라고 한다.
셀에서 Built-in 함수를 사용하는 방법은 간단하다. 다음 그림처럼 셀을 선택 후, Fx 아이콘을 클릭하여 함수 마법사 창을 띄운 후에 원하는 함수를 선택하면 된다.
위의 방법의 장점은 내가 아직 어떤 함수를 써야할지 모를 때, 또는 엑셀에서 제공하는 Built-in 함수가 무엇이 있는지 모를 때 유리하다. 만약에 내가 사용할 함수를 이미 알고 있다면, 셀에서 등호(=)이후에 "함수명(파라미터...)"를 입력하면 된다.
함수의 사용 예 1)
=Sum(A1, C1)
위의 예에서 Sum은 함수명이며, A1은 첫번째 파라미터, C1은 두번째 파라미터이다.
위의 함수를 해석하면, 셀 A1에 있는 값과 셀 C1에 있는 값을 더한 값을 이 수식이 있는 셀에 넣으라는 이야기다.
함수의 사용 예 2)
함수는 수식의 일부분으로 사용될 수 있다.
=A1 + Sum(A2, C1)
위의 수식을 해석하면, 셀 A1에 있는 값에 Sum(A2, C1)의 결과를 더한 값을 해당 셀의 값으로 하라는 이야기다.
즉 함수의 결과 값이 + 연산자의 피연산자로 사용될 수 있음을 의미한다.
함수의 사용 예 3)
함수의 파라미터로 다른 함수 또는 같은 함수를 사용할 수 있다.
=Sum(A1, C1, Sum(A3, C3))
위의 함수를 해석하면, 셀A1, 셀C1, Sum(A3, C3)의 값을 모두 더하라는 이야기다. 세 값을 모두 더하기 위해서는 Sum(A3, C3)이 무슨 값을 반환하는지 알아야 한다. 여기서 Sum 함수가 반환하는 값은 Sum 함수의 파라미터와 같은 형식의 값이라는 것을 알 수 있다.
02. 사용자 정의 함수
이미 Excel은 수많은 Built-in 함수를 제공한다. 하지만 때때로 이러한 Built-in 함수만으로 사용자가 하려고 하는 작업을 충분하게 수행할 수 없는 경우가 있다. 그럴 때는 사용자 정의 함수(User Defined Function)를 정의해서 사용할 수 있다.
사용자 정의 함수는 모듈을 추가하여 정의할 수 있으며, 정의하는 방법은 다음과 같다.
하나의 파라미터만을 필요로 하는 함수는 다음과 같이 정의할 수 있다.
Function 함수명(파라미터1이름 As 파라미터1 타입) As 함수의 반환형
함수 로직 .....
함수명 = 계산값
End Function그러면 이러한 의문이 들 것이다. 지금까지 사용한 Sub 프로시저와 Function의 차이는 무엇일까?
둘다 호출되어 특정 작업을 수행한다는 것은 비슷하지만 결정적인 차이는 반환하는 값에 있다. Sub 프로시저는 특정 셀에 있는 값을 복사하여 다른 셀에 붙여넣기를 수행한다던지, 복잡한 작업을 수행할 수 있지만 Sub 프로시저가 반환하는 값은 없다. 반며에 Function은 특정값을 반환하게 되며, 반환하는 값에도 형식이 지정된다.
위의 정의에서 함수명 = 계산값을 함수의 정의 내에서 사용하게 되면, 함수가 반환하는 값을 지정하는 것이 가능하다.
03. 함수의 파라미터
함수의 파라미터느 함수의 계산 작업에 필요한 재료들을 뜻한다. 특정 셀 또는 특정 값이 입력될 수도 있으며, 경우에 따라서는 Range 객체가 입력되어 특정 영역의 셀의 범위를 입력으로 받을 수 도 있다. 또한 생략이 가능하게 지정할 수도 있으며, 메모리가 허용하는한 최대한 많은수의 파라미터를 받아서 처리하는 것도 가능하다.
파라미터들을 구분할 때는 콜론을 사용한다. 예를 들어 파라미터의 수가 3개인 함수의 예제는 다음과 같다.
Function 함수명(파라미터1이름 As 파라미터1 타입, 파라미터2이름 As 파라미터2 타입, 파라미터3이름 As 파라미터3 타입) As 함수의 반환형
함수 로직 .....
함수명 = 계산값
End FunctionAs 후에 등장하는 파라미터 타입을 생략하면 Varient 타입으로 선언된다.
Sum 함수처럼 여러개의 파라미터를 받아서 처리 할 수 있게 정의하는 것도 가능한데, 해당 내용은 다음 포스트에서 다루도록 하겠다.
04. 함수의 반환값
함수는 반환값을 갖는다. 따라서 연산자에서 요구하는 형태만 맞는다면 수식내의 다른 연산자와 함께 사용하는 것이 가능하다. 또한 함수A에서 요구하는 파라미터와 특정함B수의 반환값의 형식이 같다면, 함수B는 함수A의 파마리터로 사용될 수 있다.
Function 함수명(파라미터1이름 As 파라미터1 타입, 파라미터2이름 As 파라미터2 타입) As 함수의 반환형
함수 로직 .....
함수명 = 계산값
End Function함수의 반환형은 한수의 정의 첫 줄에서 맨 마지막에 등장하는 As를 이용하여 정의 할 수 있다. 또한 로직 중간 또는 마지막에 함수명에 특정 계산 값을 넣어 반환값으로 사용할 수 있다. 이때 함수명 = 다음에 나오는 계산 값은 함수의 반환형과 일치해야 한다.
05. 함수의 예제
함수를 정의해보자.
함수명 getNextDayInText
파라미터: today
파라미터형: String
하수의 반환형 String
동작1: 입력받은 today(요일의 첫글자)를 이용하여 다음날의 요일의 첫글자를 반환한다.
동작2: 입력받은 today가 7 요일의 첫글자가 아닌경우 "Error"을 반환한다.
동작예. =getNextDayInText("월") = "화"
다음과같이 같단하게 함수를 정의해보자.
12345678910111213141516171819Function getNextDayInText(today As String) As StringIf today = "월" ThengetNextDayInText = "화"ElseIf today = "화" ThengetNextDayInText = "수"ElseIf today = "수" ThengetNextDayInText = "목"ElseIf today = "목" ThengetNextDayInText = "금"ElseIf today = "금" ThengetNextDayInText = "토"ElseIf today = "토" ThengetNextDayInText = "일"ElseIf today = "일" ThengetNextDayInText = "월"ElsegetNextDayInText = "Error"End IfEnd Functioncs 모듈을 생성 후 위의 함수를 입력한 후 파일을 저장한다.
그 이후 셀에서 =get 을 입력하면 위에서 정의한 getNextDayInText라는 함수가 보이는 것을 확인할 수 있다.
다음과 같이 A셀에 값들을 입력하고, B셀에 결과가 어떤식으로 나오는지 화인해보자.
의도한대로 결과가 나오는 것을 확인할 수 있다.
이번 포스트에서는 가장 단순한 형태의 함수를 정의하여, 실제 워크시트에서 함수로 사용하는 방법을 다뤘다. 다음포스트에서는 좀 더 복잡한 함수에 대해 다룰 예정이다.
728x90'Excel > Excel 매크로' 카테고리의 다른 글
Excel 매크로 (VBA) - 016. 중복 데이터 제거하기 (0) 2022.09.07 Excel 매크로 (VBA) - 015. 함수(function) (후편) (0) 2022.09.06 Excel 매크로 (VBA) - 013. 자동필터(Auto Filter) (2) 2022.09.02 Excel 매크로 (VBA) - 012. 스핀단추 컨트롤(스피너, Excel Form vs. ActiveX) (0) 2022.09.01 Excel 매크로 (VBA) - 011. 확인란/옵션단추 컨트롤(Excel Form vs. ActiveX) (0) 2022.08.31