전 국민 코딩 시대 엑셀 VBA 기초 11 - VBA 함수(Function, Call By Value(ByVal), Call By Refereence( ByRef)

전 국민 코딩 시대 엑셀 VBA 기초 11 - VBA 함수(Function, Call By Value(ByVal), Call By Refereence( ByRef)

전 국민 코딩 시대 엑셀 VBA 기초 11 - VBA 함수(Function, Call By Value(ByVal), Call By Refereence( ByRef) Function은 자주 사용하는 수식이나 코드를 Function의 작성 후 필요할 때마다 함수처럼 사용할 수 있습니다 Function 함수 형식 : Function 함수명(인수 리스트) As Type ' Function 내용 End Function 정의 : 인수 리스트는 함수 실행 상황을 조건으로 넘겨지는 매개변수 값을 돌려주는 방식에 따라 "Call By Value" 방식과 "Call By Refereence"으로 구분됩니다 "Call By Value(ByVal)" 방식과 "Call By Refereence( ByRef)"은 Function에서 참조한 인수의 값이 변동경된 값을 되돌려 주느냐, 변동 없이 되돌려 주느냐에 따라 구분됩니다 Function에서 받은 변수 A, B의 변동된 값을 되돌려 주는 방식을 "Call By Refereence( ByRef)"이라고 하고, 변수 A, B의 값을 변동된 없이 되돌려 주는 방식을 "Call By Value(ByVal)"이라고 합니다 아래와 같이 " Call_Var = Square_Fn(Square_Var)"으로 "Function Square_Fn(Square_Var)"을 사용한 경우 Function에서 인수 리스트(이하 인수)의 변동 없이 Square_Fn(Square_Var)의 결과를 되돌려 받을 수 있습니다 1 Call By Refereence(ByRef) "Call By Refereence(ByRef)"는 일반적으로 사용하는 기본 개념입니다 변수 "A = 81, B = 9"의 값을 Debug Print "Main A ="; A, "B = "; B으로 출력하면, " Main A = 81 B = 9 "결과가 나오고, " Cal_Var = Test2(A, B)"에 의해 Function Test2(A, B)에서 "A = A / 9", " B = B * 9"로 인수 A, B를 재계산 후 Debug Print "Function A ="; A, "B = "; B 과같이 출력한다면 "Function A = 9 B = 81" 재 계산된 인수 A, B 값이 출력 됩니다 당연히 Function Test2(A, B)에서 변동된 값을 되돌려 받기 때문에 Debug Print "Function A ="; A, "B = "; B의 결과는 와 " Main A = 81 B = 9 "결과가 나옵니다 이와 같이 변동된 값을 되돌려 방식을 Call By Refereence( ByRef)라고 합니다 2 Call By Value(ByVal) Call By Value(ByVal)은 Call By Refereence( ByRef)와 반대로 돌려받는 인수의 값이 변동 없습니다 Call By Value(ByVal) 방식으로 사용할 경우 Funcation 함수명 안이 변수에 "Cal_Var = Test2((A), (B))"와 같이 각각 괄호를 사용하면 됩니다 Call By Refereence( ByRef)와 결과가 동일하지만 " Main A = 81 B = 9 "결과가 나옵니다 즉, 돌려받은 인수에 변동이 없음을 알 수 있습니다 Function 함수의 특징 Function 함수 특정 작업을 수행하도록 설계된 독립 프로그램으로, 필요시 호출하여 사용할 수 있으며, 함수를 호출 시, 실인수와 가인 수는 형태와 개수가 일치해야 합니다 Function 함수명 다음의 괄호 안에는 가인 수가 나오는데 가인 수는 함수의 실행 상황을 조건으로 넘겨지는 매개변수를 받기 위한 것으로 실인수와 Type에 맞게 선언하여야 합니다 아래의 코드에서 "Square_Fn(Square_Var)"는 "Function Square_Fn(Square_Var) As Integer"를 호출하면 "Function Square_Fn(Square_Var)에 인수 2가 전달되고 "Function"에서 "Square_Fn = Square_Var * Square_Var"의 결과 4의 결과를 받습니다 Sub Funcion_Test1() ' 변수 선언 Dim Square_Var, Call_Var As Integer Square_Var = 2 Call_Var = Square_Fn(Square_Var) Debug Print "Square_Var="; Square_Var; _ "Square_Fn(Square_Var)="; Call_Var End Sub Function Square_Fn(Square_Var) As Integer ' 함수의 내용 Square_Fn = Square_Var * Square_Var End Function 위의 프로그램 결과는 아래와 "Square_Var= 2 Square_Fn(Square_Var)= 4"로 실인수의 값은 그대로 유지되고 있습니다 Swap 함수 생성 두 변수의 값을 바꾸는 Swap 함수를 만들어 보았습니다 아래 코드 내용 중 Swap(A, B)에서 중 A는 swap(A, B)의 A에, B는 B에 인수가 전달되어 두 변수의 값이 바뀐 상태로 돌아오는 Swaping 기능을 수행합니다 생성한 Function 함수 확인 앞에서 생성한 Swap 함수 확인은 VBA 메뉴에서 [보기] [개체 찾아보기]를 클릭 후, 개체 찾아보기 검색창에서 [swap]를입 력하면, 'Module4'의 구성원인 'Function_Test'에 'swap'함수가 보이는 것을 확인할 수 있습니다 이상 "전 국민 코딩 시대 엑셀 VBA 기초 11 - VBA 함수(Function, Call By Value(ByVal), Call By Refereence( ByRef)"에 대해 알아보았습니다 ============== 참고 : 네이버 블로그 - 전 국민 코딩 시대 엑셀 VBA 기초 11 - VBA 함수(Function, Call By Value(ByVal), Call By Refereence( ByRef)