EXCEL - VBA

엑셀 VBA - 배열(1)

별동산 2022. 12. 6. 08:43
반응형

1. 개별 변수와 배열

 

개별 변수는 한 개의 이름에 한 개의 값만을 가지는데 비해서

배열은 동일한 이름에 여러 개의 요소를 갖는 단일 변수입니다. 배열은 인덱스 또는 아래 첨자를 이용해 각 요소에 접근할 수 있습니다.

 

 

2. 변수 선언

 

여러 개의 값을 넣을 수 있는 변수를 선언할 때

개별 변수는 이름을 달리해서 

dim int1 as integer, int2 as interger, int3 as integer라고 해야 하지만

 

배열은 한 개의 이름으로

dim intNum(2) as integer라고 3개의 요소를 만들 수 있습니다.

 

배열은 인덱스가 0부터 시작되기 때문에 intNum(2)이지만 인덱스가 0, 1, 2이기 때문에 3개 인덱스가 되는 것입니다.

 

 

3. 변수 활용

 

값을 대입할 때 개별 변수, 배열 모두 한 번에 하나씩 값을 할당(대입)할 수도 있지만

배열의 경우는 반복문을 이용해서 쉽게 값을 대입할 수 있습니다.

 

개발도구 - Visual Basic 명령을 누른 후 삽입 > 모듈을 눌러 모듈을 추가하고,

VBA 에디터

 

오른쪽 코드 창에 아래와 같이 코드를 작성합니다.

Sub 변수선언()
    Dim i As Integer
    Dim int1 As Integer, int2 As Integer, int3 As Integer
    Dim intNum(2) As Integer
    
    int1 = Range("a1"): int2 = Range("a2"): int3 = Range("a3")
    Debug.Print int1
    Debug.Print int2
    Debug.Print int3
    
    For i = 0 To 2
        intNum(i) = Range("a" & (i + 1))
        Debug.Print intNum(i)
    Next
End Sub

 

가. 개별 변수

 

int1 = Range("a1"): int2 = Range("a2"): int3 = Range("a3")

이라고 각각 변수에 값을 할당했습니다.

 

한 줄에 명령문을 작성할 경우는 :(콜론)으로 구분합니다.

 

Debug.Print는 직접 실행창에 값을 출력하는 구문입니다.

VBA For ~ Next 반복문과 중단점

나. 배열

    For i = 0 To 2
        intNum(i) = Range("a" & (i + 1))
        Debug.Print intNum(i)
    Next

 

각각 할당도 가능하지만,

For ~ Next 반복문을 이용해 한꺼번에 값을 대입할 수 있으며

값을 대입하는 구문은 intNum(i) = Range("a" & (i + 1)) 하나입니다.

 

인덱스는 0부터 시작하지만 셀 주소는 1부터 시작하기 때문에 i가 아니라 (i + 1)이라고 작성했습니다.

VBA 실행

 

 

4. 배열의 인덱스 값 변경하기

 

가. 인덱스 시작 값을 1로 변경하기

 

배열의 인덱스는 0부터 시작하지만 이해하기 쉽도록 1로 변경할 수 있습니다.

option base 1이라고 선언하는데, 공통적으로 적용되도록 sub 프로시저 밖에 있어야 합니다.

 

이렇게 하면 intNum 배열의 인덱스가 1부터 시작하기 때문에 sub 프로시저의 구문을 아래와 같이 수정해야 합니다.

당초 변경 설명
Dim intNum(2) As Integer Dim intNum(3) As Integer 1부터 시작하기 때문에 인덱스 종료값이 3입니다.
    For i = 0 To 2
        intNum(i) = Range("a" & (i + 1))
    For i = 1 To 3
        intNum(i) = Range("a" & i)
인덱스가 1부터 3이므로 for 다음의 숫자를 0 to 2에서 1 to 3로 수정하고, 셀 주소가 인덱스와 일치하기 때문에 i로 하면 됩니다.

 

 

나. 인덱스 범위 지정하기

option base 1로 지정하지 않고 변수 선언 시 인덱스 값을 1 to 3로 지정할 수 있습니다.

Option Explicit
'Option Base 1

Sub 변수선언()
    Dim i As Integer
    Dim int1 As Integer, int2 As Integer, int3 As Integer
    Dim intNum(1 To 3) As Integer
    
    int1 = Range("a1"): int2 = Range("a2"): int3 = Range("a3")
    Debug.Print int1
    Debug.Print int2
    Debug.Print int3
    
    For i = 1 To 3
        intNum(i) = Range("a" & i)
        Debug.Print intNum(i)
    Next
End Sub

 

배열 요소 값을 확인하려면 intNum부분에서 마우스 오른쪽 버튼을 누른 후 조사식 추가 메뉴를 누르고,

 

Next 문 왼쪽 기둥을 마우스 왼쪽 버튼으로 눌러 중단점을 만든 후 F5키 또는 표준 도구 모음의 실행 아이콘을 눌러 한 번씩 Next에 멈춘 상태에서 intNum왼쪽의 +를 눌러 펼치면

 

intNum(1)에 86이 할당되고, intNum(2)와 intNum(3)에는 아직까지 값이 할당되지 않은 것을 확인할 수 있습니다.

VBA - 조사식 창

 

 두 번 더 실행한 후 확인하면 intNum(3)까지 값이 할당됐습니다.

 

한번 더 실행하면 intNum이 초기화돼서 Empty라고 표시됩니다.

 

 

변수를 다시 선언하는 Redim 문과 2차원 등 다차원 배에 대해서는 따로 다루도록 하겠습니다.

개별변수와 배열.xlsm
0.01MB

반응형

'EXCEL - VBA' 카테고리의 다른 글

구구단 만들기(1) (엑셀 VBA의 매크로 기록하기)  (0) 2022.12.08
엑셀 VBA - 배열(2)  (0) 2022.12.07
Excel 추가 기능을 목록에서 지우기  (0) 2022.12.03
For Each ~ Next  (0) 2022.11.14
For ~ Next 반복문  (0) 2022.11.11