본문 바로가기
excel VBA

엑셀 VBA 변수, 배열 및 선언하기

by 퍼포먼스마케팅코더 2023. 8. 30.
반응형

변수에 대한 설명에 수치를 다루고자 하는 경우 프로그램을 만들기 전에 주의할 점이 있다. 우선 다루려는 수의 크기가 어느 정도인지 알아야 한다. 물론 변수선언시 가장 큰 데이터형을 지정하면 프로그램은 별 문제없이 돌아가겠지만 닭 잡는데 소잡는 칼을 쓰는 격이다. 효율성이나 자원배분면에서 손실이 일어난다. 프로그램은 덩치가 작고 빠른게 좋다.

 

그러려면 닭 잡는데 닭 잡는 칼 쓰고 소 잡는데 소잡는 칼을 써야 한다. 또한 VBA는 여러 데이터형을 지원하므로 다루는 데이터에 따라 적당한 데이터형을 써야 한다. 변수란 특정 데이터를 저장하기 위한 메모리의 일부이다. 프로그램은 변수를 사용하여 뭔가를 저장하거나 변수로부터 저장된 데이터를 읽어와 작업을 하게된다. 변수를 선언하는 것은 메모리의 일정부분을 필요한 만큼 할당하는 것이다. 배열이란 앞서에서 말한 듯이 변수들의 집합이다. 배열을 선언하게 되면 VBA는 일련된 주소를 가진 메모리를 배열의 개수만큼 할당하게 된다.

변수의 선언

Dim, Private, Public, Static 문을 사용하여 변수를 선언한다.

Dim TF As Boolean
Private strName As String
Public Price As Single
Static Cumulative As Single

변수 이름 뒤에는 As와 함께 데이터형식을 선언한다. Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (가변 길이 문자열), String * length (고정 길이 문자열), Object, 또는 Variant.. 만일 데이터 형식을 지정하지 않으면 Variant 데이터 형식이 기본값으로 정의된다. 또한 Type 문을 사용하여 사용자 정의 형식을 만들 수 있다.

한 개의 문에 여러 개의 변수를 선언할 수 있다. 데이터 형식을 지정하려면 각 변수마다 데이터 형식을 지정한다. 다음의 문에서는 intX, intY, intZ 변수를 Integer 형식으로 선언됩니다.

Dim intX As Integer, intY As Integer, intZ As Integer

VBA초보가 당하는 실수중 하나는 intX, intY, intZ 변수를 Integer 형식으로 선언하고자 아래와 같이 했지만 Dim intX, intY, intZ As Integer 실제로 이는 intX 과 intY 변수는 Variant 형식으로 선언되고 intZ만이 Integer 형식으로 선언한 것이다. 선언문에 변수의 데이터 형식을 생략하면 변수는 Variant 형식으로 지정된다.

배열의 선언

VBA (Visual Basic for Applications)에서 배열(array)은 같은 유형의 여러 값을 하나의 변수 이름 아래에 저장할 수 있는 데이터 구조입니다. 이를 통해 데이터를 더 효율적으로 관리할 수 있으며, 반복문과 함께 사용하여 대량의 데이터를 빠르게 처리할 수 있습니다.

배열의 선언

배열을 선언할 때는 Dim 키워드와 함께 배열의 크기를 지정합니다.

Dim myArray(1 To 5) As Integer  ' 1부터 5까지의 정수를 저장할 수 있는 배열

또는,

Dim myArray(0 To 4) As Integer  ' 0부터 4까지의 정수를 저장할 수 있는 배열

배열의 사용

배열의 각 위치는 인덱스(index)로 접근합니다.

myArray(1) = 10
myArray(2) = 20
myArray(3) = 30

동적 배열

크기가 고정되지 않은 배열도 선언할 수 있습니다. 이러한 배열을 동적 배열(dynamic array)이라고 합니다.

Dim myDynamicArray() As Integer
ReDim myDynamicArray(1 To 5)

ReDim 키워드를 사용하여 배열의 크기를 동적으로 변경할 수 있습니다.

다차원 배열

VBA에서는 다차원 배열도 지원합니다. 예를 들어, 3행 2열의 배열을 선언하려면 다음과 같이 작성합니다.

Dim my2DArray(1 To 3, 1 To 2) As Integer

배열과 반복문

배열은 반복문과 함께 사용되어 다량의 데이터를 효과적으로 처리할 수 있습니다.

Dim i As Integer
For i = 1 To 5
    myArray(i) = i * 10
Next i

요약

  • 배열은 같은 유형의 여러 값을 하나의 변수에 저장합니다.
  • 배열은 반복문과 함께 사용되어 대량의 데이터 처리에 유용합니다.
  • VBA에서는 크기가 고정된 배열과 동적 배열, 그리고 다차원 배열을 지원합니다.

변수의 범위

변수는 선언되는 위치에 따라 이용가능한 범위가 달라질 수 있다. 가령 변수 선언이 프로시저 내부에 있다면 변수 strName은 오직 프로시저 내부에서만 사용될 수 있다. 프로시저를 벗어나 모듈시트의 선두에 변수선언이 있다면 변수 strName은 그 모듈내의 모든 프로시저에서는 사용 가능하다. 다른 모듈에 있는 프로시저에서는 사용할 수 없다. 프로시저를 벗어나 모듈시트선두에 위치한 Dim은 뒤에서 배울 Private와 동일한 것이다. 그러나 다른 모듈의 모든 프로시저에서 변수strName을 사용할 수 있게 하려면 다음의 예와 같이 Public 문을 앞에 놓으면 된다.

Public strName As String

Public 문의 사용

Public 문을 사용하여 Public 모든 모듈에서 통용되는 변수를 선언한다.

Public strName As String

Public 변수는 모든 프로시저에서 사용할 수 있다.

Private 문의 사용

Private 문을 사용하여 Private 모듈 수준의 변수를 선언한다.

Private MyName As String

Private 변수는 같은 모듈에 있는 프로시저만 사용할 수 있다. 모듈 레벨에서 사용되었을 때는 Dim 문은 Private 문과 같다. 그러나 Private 문을 사용하는 것이 낫다. 이는 코드를 쉽게 읽고 해석하기 위해서 이다.

Static 문의 사용

Dim 문 대신에 Static 문을 사용할 때는 선언된 변수는 호출 사이에도 값을 보유할 것이다.

Option Explicit 문의 사용

Option Explicit 문은 Visual Basic 또는 VBA (Visual Basic for Applications)에서 변수를 사용하기 전에 먼저 선언해야 함을 나타냅니다. 이 기능을 활성화하면, 프로그래머가 실수로 변수 이름을 잘못 입력하는 등의 실수를 줄일 수 있고, 프로그램의 실행 속도와 메모리 사용 효율을 개선할 수 있습니다.

왜 중요한가요?

  1. 명확성: 모든 변수가 미리 선언되어야 하므로, 변수의 형식과 용도가 명확해집니다.
  2. 오류 예방: 변수 이름을 잘못 입력하거나, 이미 사용중인 변수 이름을 다시 사용하면 컴파일 타임에 오류가 발생하여 쉽게 잡아낼 수 있습니다.
  3. 효율성: 미리 데이터 형식을 지정해 놓으면, VBA가 메모리를 더 효율적으로 사용할 수 있습니다.

어떻게 사용하나요?

프로그램 또는 모듈의 맨 위에 Option Explicit라고 적으면 됩니다. 그러면 그 아래에 있는 코드에서는 모든 변수를 명시적으로 선언해야 합니다.

Option Explicit

Sub MySub()
    Dim x As Integer  ' 명확하게 Integer 형식으로 선언
    x = 10
    ' ...
End Sub

자동 설정 방법

Visual Basic의 개발 환경 설정에서 이 옵션을 항상 켜두는 설정도 있습니다. 이렇게 하면 새로운 모듈을 만들 때마다 자동으로 Option Explicit 문이 추가됩니다. 이 기능을 활성화하면 프로그래밍을 좀 더 안전하고 효율적으로 할 수 있습니다.

상수

상수란 프로그램에서 변하지 않는 고정된 값을 의미합니다. 변수와 달리 상수는 한번 값을 설정하면 그 후로 변경할 수 없습니다. VBA에서는 Const 키워드를 사용하여 상수를 선언하고, 이렇게 선언한 상수는 프로그램 내에서 여러번 사용될 수 있습니다. 이를 통해 코드를 더 이해하기 쉽고 관리하기 쉽게 만들 수 있습니다.

상수의 종류

  1. VBA 상수: VBA에 미리 정의된 상수들입니다. 예를 들면, vbRed 같은 색상 코드나 vbYes 같은 메시지 박스 옵션 등이 있습니다.
  2. 엑셀 상수: 엑셀에서만 사용되는 특별한 상수입니다.
  3. 사용자 정의 상수: 개발자가 직접 정의한 상수입니다.

상수의 선언

  • Private 상수: 모듈 내에서만 사용될 상수입니다. 기본적으로 상수는 Private입니다.
Const PI=3.14159

  • Public 상수: 여러 모듈에서도 사용될 수 있는 상수입니다.
Public Const PI As Single=3.14159

데이터 타입

상수에도 데이터 타입을 지정할 수 있습니다. 이를 통해 메모리를 더 효율적으로 사용할 수 있습니다. 타입으로는 Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String, Variant 등이 있습니다.

한 줄에 여러 상수 선언

하나의 줄에 여러 상수를 선언할 수도 있고, 각각에 데이터 타입을 지정할 수 있습니다.

Const conAge As Integer = 34, conWage As Currency = 35000

요약

  • 상수는 Const 키워드를 사용하여 선언합니다.
  • 상수는 값이 변경되지 않아야 하므로, 코드에서 반복적으로 사용되는 고정값을 명확하게 표현할 때 유용합니다.
  • 데이터 타입과 접근 범위 (Public/Private)를 지정할 수 있습니다.
반응형

'excel VBA' 카테고리의 다른 글

엑셀의 구조  (0) 2023.08.30
엑셀 VBA 날짜 시간 함수  (0) 2023.08.30
엑셀 VBA 데이터 타입 정리  (0) 2023.08.30
엑셀 VBA while  (0) 2023.08.30
엑셀 VBA 함수  (0) 2023.08.30

댓글