함수에서 결과를 어떻게 반환합니까?
예를 들면 다음과 같습니다.
Public Function test() As Integer
return 1
End Function
컴파일 오류가 발생합니다.
이 함수가 정수를 반환하게하려면 어떻게합니까?
답변
객체가 아닌 리턴 유형의 경우 다음과 같이 함수 이름에 값을 지정해야합니다.
Public Function test() As Integer
test = 1
End Function
사용법 예 :
Dim i As Integer
i = test()
함수가 객체 유형을 반환하면 다음 Set
과 같이 키워드 를 사용해야합니다 .
Public Function testRange() As Range
Set testRange = Range("A1")
End Function
사용법 예 :
Dim r As Range
Set r = testRange()
함수 이름에 반환 값을 할당해도 함수 실행이 종료되지는 않습니다. 함수를 종료하려면 명시 적으로 말해야 Exit Function
합니다. 예를 들면 다음과 같습니다.
Function test(ByVal justReturnOne As Boolean) As Integer
If justReturnOne Then
test = 1
Exit Function
End If
'more code...
test = 2
End Function
설명서 : http://msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx
답변
VBA 함수는 함수 이름 자체를 일종의 변수로 취급합니다. 따라서 ” return
“문 을 사용하는 대신 다음과 같이 말하면됩니다.
test = 1
그러나 이것이 기능에서 벗어나지 않는다는 점에 유의하십시오. 이 명령문 이후의 모든 코드도 실행됩니다. 따라서에 다른 값을 할당하는 많은 할당 문을 가질 수 있으며 test
함수 끝에 도달하면 값이 반환됩니다.
답변
반환 값을 함수 이름으로 설정하는 것만 으로도 Java (또는 다른) 명령문 과 정확히 동일 하지는 않습니다 return
. java에서 return
다음과 같이 함수를 종료 하기 때문입니다 .
public int test(int x) {
if (x == 1) {
return 1; // exits immediately
}
// still here? return 0 as default.
return 0;
}
VB에서 함수 끝에서 반환 값을 설정하지 않으면 정확히 동등한 두 줄이 사용 됩니다 . 따라서 VB에서 정확한 추론은 다음과 같습니다.
Public Function test(ByVal x As Integer) As Integer
If x = 1 Then
test = 1 ' does not exit immediately. You must manually terminate...
Exit Function ' to exit
End If
' Still here? return 0 as default.
test = 0
' no need for an Exit Function because we're about to exit anyway.
End Function
이 경우이므로 메소드의 다른 변수와 같이 리턴 변수를 사용할 수 있다는 것도 알고 있습니다. 이처럼 :
Public Function test(ByVal x As Integer) As Integer
test = x ' <-- set the return value
If test <> 1 Then ' Test the currently set return value
test = 0 ' Reset the return value to a *new* value
End If
End Function
또는 반환 변수의 작동 방식에 대한 극단적 인 예 (실제로 코딩해야하는 방법에 대한 좋은 예는 아님) — 야간에 밤을 유지할 수있는 것 :
Public Function test(ByVal x As Integer) As Integer
test = x ' <-- set the return value
If test > 0 Then
' RECURSIVE CALL...WITH THE RETURN VALUE AS AN ARGUMENT,
' AND THE RESULT RESETTING THE RETURN VALUE.
test = test(test - 1)
End If
End Function
답변
아래 코드는 반환 값을 변수에 저장 retVal
한 다음 MsgBox
값을 표시하는 데 사용할 수 있습니다.
Dim retVal As Integer
retVal = test()
Msgbox retVal