엑셀 VBA 동적배열변수 선언하기
배열변수의 크기가 고정된 것을 정적배열변수라고 하며, 상황에 따라 크기가 변하는 배열변수를 동적배열변수라고 합니다.
예를 들어 요일은 {일, 월, 화, 수, 목, 금, 토}로 더 이상 늘어나거나 줄어 들 일이 없습니다.
그러나 일은 1~12월이 {28일, 29일, 30일, 31}일 로 달라집니다.
이렇게 "일"과 같이 변수의 크기가 달라지는 경우는 배열변수의 크기를 다르게 선언해야 합니다.
그런데 배열변수의 크기가 달라질때마다 코드를 바꿀수는 없겠죠? 그래서 동적배열변수를 선언하여 사용합니다.
정적배열변수 예제 |
Option Base 1 '---Index의 시작(최소)값을 1으로 선언
Sub 정적배열변수_예제1()
Dim 요일(7) As String '---배열변수크기는 상수 사용(변수사용 불가)
For i = LBound(요일) To UBound(요일)
요일(i) = Format(i, "aaaa") '---한글 요일서식 적용
Debug.Print 요일(i) '---직접실행창에 결과 표시
Next i
End Sub
1. Option Base 1 : Index의 시작(최소)값을 1로 선언합니다.
2. 배열변수 요일의 Index 갯수가 7개로 고정이 됩니다.(선언이후 수정 불가)
3. LBound(배열변수) :Index 최소값이며, Ubound(배열변수) : Index 최대값 입니다.
동적배열변수 예제 |
Sub 동적배열변수_예제2()
Dim 일() As Byte '--- 동적배열변수 선언
년월 = Application.InputBox(prompt:="년월을 입력하세요", Default:="6자리숫자", Type:=1) '---①
'---입력오류가 없다는 전제로 오류에 대한 조치는 제외
년 = Left(년월, 4) '---년도 추출
월 = Right(년월, 2) '---월 추출
마지막일 = Day(DateSerial(년, 월 + 1, 1) - 1) '---해당월의 마지막일 산정
ReDim 일(마지막일) '--- 배열크기 변경(배열크기를 변수로 사용가능)
MsgBox 년 & "년 " & 월 & "월의 마지막 일은 " & UBound(일) & "입니다." '---②
End Sub
1. 변수명( )로 동적배열을 선언합니다.
2. ReDim문으로 배열의 크기를 지정(변경)합니다. ReDim으로 선언된 배열의 크기는 다시 변경할 수 있습니다.
3. ①은 InputBox에 년월 6자리를 입력합니다. (예 : 201705)
4. ②는 InputBox에서 입력한 결과를 MsgBox로 알려줍니다.
5. 년도와 월이 계속 바뀌어도 ReDim문으로 계속 변수의 크기를 바꾸어 선언 할수 있습니다.
관련글 보기 |
02 | 03 |