[ 기초 강좌 ]
제 52강
배열(Array)에 대하여(ReDim문)
배열(Redim문) 에 대해 알아봅니다.
이럴 때 필요해요
배열을 이용하여 엑셀함수들을 활용할때 필요합니다.
이렇게 사용해요
변수를 배열로 사용함에 있어 크게 정적 배열과 동적 배열 두 가지의 종류로 구분할 수 있습니다.
정적 배열은 배열 변수의 선언문에서 배열의 크기를 지정하며 프로그램의 중간에 변경할 수 없습니다.
그러나, 동적 배열은 배열 변수의 선언문에서 배열의 특정 크기를 지정하지 않은 채 선언하며
프로그램의 실행 중간에 원하는 크기로 조정할 수 있습니다.
■ 정적 배열 변수의 선언형태
Dim Rev(10) As Variant
■ 동적 배열 변수의 선언형태
Dim Rev( ) As Variant
다음은, 프로시저(동적배열변수사용_2) 라는버튼을 눌러 프로시저를 실행을 해보았을때.
위 그림과 같은 결과가 나타나는 프로시저가 있을때.
코드는 이렇습니다.
Sub 동적배열변수사용_2()
Dim i() As Integer
Dim r As Integer
ReDim i(3)
For r = 1 To 3
i(r) = r * 100
Cells(r, 1) = i(r)
Next r
ReDim i(5)
For r = 1 To 5
Cells(r, 2) = i(r)
Next r
End Sub
프로시저(동적배열변수사용_2)의 코드를 살펴 보시면 아시겠지만, 맨 처음의 코드에서 ReDim i(3) 으로
선언하여 변수 i 의 크기를 3으로 재선언했으며, 다시 ReDim i(5) 로 선언하여 크기 5로 재선언했습니다.
이때 주의하셔야 할 점은 프로시저(동적배열변수사용_2) 의 경우, 즉 먼저 크기 3으로 선언되고 숫자 100,
200, 300 등이 대입된 후, 다시 크기 5로 선언한 경우, 먼저 선언된 배열 ReDim i(3)은 없어 지고 새로운
배열, 즉 ReDim i(5) 이 생성된다는 점입니다.
따라서, 처음에 대입한 숫자들이 없어 지고 전체가 숫자 0으로 초기화됩니다.
그러나 이전의 배열 크기를 보존한 채 배열의 크기를 늘릴 수 있는 방법이 있습니다.
다음은 동적배열변수사용_3 이라는 버튼을 눌러 프로시저를 실행해 보았을때
이런 결과가 나온다면?
코드는 이렇습니다
Sub 동적배열변수사용_3()
Dim i() As Integer
Dim r As Integer
ReDim i(3)
For r = 1 To 3
i(r) = r * 100
Cells(r, 1) = i(r)
Next r
ReDim Preserve i(5)
For r = 1 To 5
Cells(r, 2) = i(r)
Next r
End Sub
앞서의 동적배열변수사용2 라는 프로시저와 다른 부분이 있다면, 단지 변수 i 의 크기를 5로 재선언하는
구문, 즉 ReDim i(5) 와 ReDim Preserve i(5) 의 차이로 Preserve 라는 키 워드가 사용된 점 뿐입니다.
여기서 Preserve라는 단어의 사전적 의미에서도 알 수 있듯이 'ReDim Preserve'문은 배열을 보존한 채
크기가 3에서 5로 늘려 짐을 알 수 있습니다.
따라서 이미 대입된 숫자들(100, 200, 300 등)이 그대로 출력됩니다.
먼저 동적배열변수사용_4 라는 버튼을 눌러 나타 나는 결과
그다음
시트명을 적당한 숫자(789 등)으로 변경하고 나서, 다시 같은 버튼을 눌러도 숫자만있는 시트가 선택되는걸
볼수있습니다.
Sub 동적배열변수사용_4()
Dim Sht As Worksheet
Dim Rev() As Variant
Dim n As Integer
For Each Sht In Worksheets
With Sht
If IsNumeric(.Name) = True Then
'각 시트들을 순환하며 만약(If), 시트의 이름이 숫자(IsNumeric) 인 경우에는 …
ReDim Preserve Rev(n)
Rev(n) = .Name
'동적 배열변수인 Rev에 해당 시트의 이름을 하나씩 차곡차곡( n = n + 1) 저장합니다.
'이때 순환을 하더라도, 앞서 동적 배열변수(Rev)에 저장된 데이터는 그대로 보전(Preserve)됩니다.
n = n + 1
End If
End With
Next Sht
'동적 배열변수(Rev)에 저장된 데이터, 즉 숫자값의 시트명을 갖는 시트들을 한꺼번에 선택(Select)합니다.
Sheets(Rev).Select
End Sub
2. 다운로드 받은 콘텐츠는 본인(본인회사)만 사용할 수 있습니다.
3. 다른 사람과 공유하거나 원본 또는 수정 후 무단전제,무단배포,무단판매,무단 공유할 수 없습니다.
4. 웹상에서 배포는 상업,비상업적 목적을 불문하고, 손해배상등 가중처벌됩니다.