본문 바로가기
언어 참조

매개변수 배열 이해

2023. 8. 4.

이 글은 도움말을 번역한 글입니다.

매개 변수 배열을 사용하여 인수 배열을 프로시저에 전달할 수 있습니다. 프로시저를 정의할 때 배열의 요소 수를 알 필요가 없습니다.

ParamArray 키워드를 사용하여 매개변수 배열을 나타냅니다.

ParamArray

ParamArray 키워드는 Sub 또는 Function에서 맨 마지막에 위치해야 합니다. ParamArray는 임의 개수의 인수들을 배열로 처리하는데 사용되기 때문에, ParamArray 뒤에 오는 매개변수들은 일반적인 방식으로 처리되지 않으며, ParamArray가 맨 뒤에 위치해야 인수들을 올바르게 구분할 수 있습니다.

ParamArray로 정의된 매개변수 배열은 반드시 Variant 타입의 배열로 선언되어야 합니다. ParamArray를 사용하여 임의 개수의 인수를 처리하기 때문에, 다양한 데이터 타입의 인수들을 다룰 수 있어야 하기 때문입니다.다른 데이터 유형을 지정하면 에러가 납니다.

Sub InvalidParamArrayExample(ParamArray myArray() As Integer)
    ' 에러 발생: ParamArray는 Variant 타입의 배열로 선언되어야 함
End Sub

ParamArray는 ByVal, ByRef와 같은 매개변수 전달 방식과 함께 사용할 수 없습니다. ParamArray는 인수들을 배열로 처리하는데에만 사용되며, 인수들은 Variant 타입의 배열로 값으로 전달됩니다.

Sub SumNumbers(ByVal ParamArray numbers() As Variant)
' ByVal,ByRef와 함께 사용할 수 없으므로 에러가 납니다.
    Dim total As Double
    Dim i As Integer
    
    ' numbers 배열에 전달된 값들을 모두 더합니다
    For i = LBound(numbers) To UBound(numbers)
        total = total + numbers(i)
    Next i
    
    ' 총합을 출력합니다
    MsgBox "총합: " & total
End Sub

ParamArray로 정의한 매개변수 배열은 선택적인 인수들을 받기 위한 것입니다. 따라서 매개변수 배열인 ParamArray는 매개변수 리스트에서 유일한 선택적인 매개변수이어야 합니다. 즉, ParamArray와 함께 Optional 키워드를 사용하여 선택적으로 전달하는 매개변수를 추가로 선언할 수 없습니다.

Sub InvalidParamArrayWithOptional(Optional optionalArg As String,ParamArray myArray() As Variant)
    ' 에러 발생: ParamArray와 함께 Optional 키워드 사용 불가
End Sub

하나의 ParamArray만 허용됩니다. 두 개 이상의 ParamArray를 사용할 수 없습니다.

Sub InvalidMultipleParamArray(ParamArray arr1() As Variant, ParamArray arr2() As Variant)
    ' 에러 발생: 두 개 이상의 ParamArray 사용 불가
End Sub

다음 예제에서는 매개 변수 배열을 사용하여 프로시저를 정의하는 방법을 보여 줍니다.

Sub AnyNumberArgs(strName As String, ParamArray intScores() As Variant)
    Dim intI As Integer
 
    Debug.Print strName; " Scores"
   
    For intI = 0 To UBound(intScores())
        Debug.Print " "; intScores(intI)
    Next intI
End Sub

Sub CallAnyNumberArgs()
   
    AnyNumberArgs "John", 95, 85, 78
    AnyNumberArgs "Alice", 90, 87, 92, 95
    AnyNumberArgs "Jamie", 10, 26, 32, 15, 22, 24, 16
    AnyNumberArgs "Kelly", "High", "Low", "Average", "High"
    
End Sub

도움말 출처

Understanding parameter arrays (VBA)

Office VBA reference topic

learn.microsoft.com

'언어 참조' 카테고리의 다른 글

For...Next 문  (0) 2023.08.04
인수를 효율적으로 전달하기  (0) 2023.08.04
명명된 인수 및 선택적 인수 이해  (0) 2023.08.03
배열 선언 및 사용  (0) 2023.08.01
속성을 설정할 때 코드 실행  (0) 2023.08.01