커맨드 버튼 하나만 만들어 놓고 붙여넣기


나머지는 알아서 주석으로 해결~~


Option Explicit
'가변 인수 테스트
'Inputbox로 수를 입력받아 그 합을 구한다.


'UBound 함수 : 배열의 마지막 번호를 넘긴다
'LBound 함수 : 배열의 첫 번호를 넘긴다.
'ex : Dim exam(2 to 4) as Integer
'Debug.print LBound(exam) 결과 : 2
'Debug.print UBound(exam) 결과 : 4

Public Function Sum(ParamArray vArgs())

    Dim i As Integer '루프 변수
    Sum = 0
   
    For i = LBound(vArgs) To UBound(vArgs) '합계 구하는 루프
   
        Sum = Sum + vArgs(i)
   
    Next i
   
End Function

Private Sub Command1_Click()
Dim Args() As Integer '인자 배열
Dim InputNumber As Integer '입력 변수
Dim Count As Integer '첫 입력인지 확인
Dim i As Integer '출력값

Count = 0



Rem 입력 받는 루프, 0이 나올때까지 루프

Do
    InputNumber = Val(InputBox("수를 입력해 주세요(0 : 입력 종료)", "입력")) '입력 받는다
   
    If InputNumber <> 0 Then '입력 받은게 0이 아니라면 배열에 수를 넣는다.
       
        If Count = 0 Then '제일 처음 입력하는 것이면
            ReDim Args(1) As Integer '일단 배열 한개 만들고
            Args(0) = InputNumber '0번째 배열에 첫 수를 넣는다.
            Count = Count + 1 '카운트 추가 -> 사실 이거는 bool형으로 해서 처음이냐 아니냐만 체크해도 되는데.. 일단 이걸로 수도 셀수 있고 하니 놔둠.
       
        Else '처음 입력이 아니면
       
            ReDim Preserve Args(UBound(Args) + 1) As Integer '데이터를 보존하면서 배열 크기 재선언
            Args(UBound(Args) - 1) = InputNumber 'VB의 배열 틍징 -> 배열 크기를 1로 하면 공간이 2개 생긴다 -_-;; -> 그래서 마지막 번호 앞의 거에다가 입력 값을 넣는다
        End If
   
    End If
   
Loop While InputNumber <> 0 '0이 입력안되는동안 계속 루프

If Count <> 0 Then
    ReDim Preserve Args(UBound(Args) - 1) As Integer '이거 지우고 한번 debug.print로 배열 첨부터 끝까지 루프 돌려보면 안다,(UBound,LBound 참조) 맨 마지막에 배열 요소 하나가 남기 때문에 공간 하나를 없앤다.
End If

'출력
For i = LBound(Args) To UBound(Args)
    Debug.Print "Args(" & i & ") : " & Args(i)
Next i

'가변 인수 테스트
Debug.Print
Debug.Print Sum(1, 2, 3, 4, 5)
End Sub

Posted by 머리