본문 바로가기

엑셀/VBA

엑셀 VBA 다차원 배열변수 및 동적 배열변수 알아보기

반응형

앞에서 개체 변수와 배열 변수에 대해 알아보았습니다. 이번에는 배열 변수를 다차원으로 생성하는 방법과 동적 배열 변수를 생성하는 방법에 대해 알아보겠습니다.

 

엑셀 VBA 개체 변수 및 배열 변수에 대해 알아보기

 

엑셀 VBA 개체 변수 및 배열 변수에 대해 알아보기

엑셀 VBA 상수 및 변수에 대해 앞에서 알아봤습니다. 아래 링크를 클릭하여 이전 글을 확인해 보시기 바랍니다. 변수에는 개체 변수라는 것도 있습니다. 개체 변수는 변수 형태를 VBA에서 사용하

mr-johndoe.tistory.com

 

1. 다차원 배열 변수

 VBA에서 배열 변수를 선언할 때 다차원으로 선언할 수 있습니다. 엑셀 시트로 차원을 보자면 행이나 열 한 방향으로 배열을 만드는 것을 1차원 배열이라 생각하시고 행과 열을 함께 배열로 만드는 것을 2차원 배열로 생각하시면 좀 이해가 되실지 모르겠습니다.

 

 

 

다차원 배열은 다음과 같이 선언할 수 있습니다.

 

   Dim 배열변수명(번호1, 번호2, ..., 번호n) As 데이터 형식

 

위에서 번호를 만들고 싶으신 차원만큼 입력하시면 다차원 배열을 생성하실 수 있습니다.

 

이전 글에서 사용했던 예제를 통해 알아보겠습니다.

 

  Public Sub 숫자()
      Dim 숫자(4) As Integer
      숫자(0) = 1
      숫자(1) = 2
      숫자(2) = 3
      숫자(3) = 4
      숫자(4) = 5
    
      Range("B3").Value = 숫자(0)
  End Sub

 

이 예제를 보시면 숫자라는 배열 변수는 1차원 배열 변수로 선언된 것으로 배열 방을 엑셀 시트로 생각하시면 B3 셀 한 곳에 숫자(0)의 값을 입력할 수 있는 것처럼 셀 하나에 배열 변수 한 방의 값이 대입될 수 있습니다.

 

그럼 다음과 같이 코드를 변경해 보겠습니다.

 

  Public Sub 숫자()
      Dim 숫자(2,2) As Integer
      숫자(0,0) = 1

      숫자(0,1) = 2

      숫자(1,0) = 3

      숫자(1,1) = 4

    
      Range("B3").Value = 숫자(0,0)

      Range("C3").Value = 숫자(0,1)

 

      Range("B4").Value = 숫자(1,0)

      Range("C4").Value = 숫자(1,1)

   End Sub

 

Dim 숫자(2,2) As Integer는 정수형으로 숫자라는 배열 변수를 선언하였습니다. 그런데 숫자(2,2)로 2차원 배열로 선언을 하였습니다. 이를 엑셀 시트로 설명드리자면 B3:C4 셀 범위를 선택한 것 같이 배열 변수 방을 선언하였다고 생각하시면 됩니다.

 

2차원_배열_변수_코딩_결과
[그림 1] 2차원 배열 변수 코딩 결과

위의 2차원 배열 변수 코딩을 실행하면 [그림 1]과 같이 엑셀 시트에 나타납니다. 빨간색 사각형으로 표시한 각 셀이 배열 변수 방이라고 생각하시면 3번 행과 4번 행에 각각 B열과 C열의 방을 생성하여 총 4개의 방을 만들었습니다. 이와 같이 2차원은 가로 세로로 방이 만들어지게 되는 것이며 평면에 사각형을 생각하시고 만약, 3차원을 배열 변수를 만들게 된다면 큐빅과 같이 2차원 배열이 위로 쌓아진다고 생각하시면 됩니다.

 

말로 설명하니 잘 이해가 되시지 않으실 거라 생각됩니다. 보통 엑셀 VBA에서는 최대 2차원 배열 변수까지 사용하니 그 이상은 생각지 않으셔도 될 것 같습니다.

 

 

 

2. 동적 배열 변수

 배열 변수를 선언할 때 배열 방 갯수를 알고 있는 상태에서는 선언하기가 가능하지만 보통의 경우에는 어느 정도 크기로 배열 변수를 선언해야 하는지를 모르는 경우가 상당히 많습니다. 이때 사용하는 것이 동적 배열 변수로 처음에는 배열 변수를 선언만 하고 그 크기는 정하지 않았다가 프로그램이 어느 정도 진행한 다음 배열 변수 크기가 결정되면 그때 선언할 수 있게 해 줍니다.

 

사용 방법은 다음과 같습니다.

 

   Dim 변수명( ) As 데이터 형식

 

   ReDim 변수명(숫자)

 

Dim 변수명( ) As 데이터 형식을 보시면 변수명 괄호 안에 아무것도 입력하지 않아 변수를 선언하였지만 그 크기는 선언하지 않았습니다. 변수명으로 동적 변수를 선언한 것입니다.

그리고, 프로그램이 진행되다가 변수의 크기가 결정되면 ReDim을 사용하여 변수 크기를 선언합니다.

ReDim을 사용하여 변수 크기를 선언하면 변수에 입력되어 있던 값은 모두 리셋되게 됩니다.

만약, 변수에 입력되어 있는 값을 유지하고 싶은 경우에는 PreserveReDim문에 추가하여 사용합니다.

 

   Dim 변수명( ) As 데이터 형식

 

   ReDim Preserve 변수명(숫자)

 

Preserve를 사용하여 동적 배열 변수를 선언하게 되면 마지막 차원의 크기만 바꿀 수 있습니다. 가령 2차원의 경우 (2,1)의 배열이라면 처음의 2는 바꿀 수 없고 뒤의 1은 바꿀 수 있습니다.

 

이 내용을 예제로 확인해보겠습니다.

 

   Public Sub 숫자()
      Dim 숫자( ) As Integer

 

      ReDim 숫자(2,1)
      숫자(0,0) = 1

 

      ReDim Preserve 숫자(2,2)

      숫자(0,1) = 2

      숫자(1,0) = 3

      숫자(1,1) = 4

    
      Range("B3").Value = 숫자(0,0)

      Range("C3").Value = 숫자(0,1)

 

      Range("B4").Value = 숫자(1,0)

      Range("C4").Value = 숫자(1,1)

   End Sub

 

VBE 창에 코딩을 하고 실행하면 [그림 1]과 동일한 결과를 얻을 수 있습니다.

 

반응형