Visual Basic for Application의 배열

Visual Basic for Application의 배열은 일반적으로 동일한 형식의 관련 변수 집합을 저장하는 구조입니다. 배열 항목은 숫자 인덱스로 액세스됩니다.

예를 들어, 나중에 VBA 코드에서 사용하기 위해 이름을 저장해야 하는 20명의 팀이 있습니다. 다음과 같이 각 이름을 보유할 20개의 변수를 간단히 선언할 수 있습니다.

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

그러나 훨씬 간단하고 조직적인 방법을 사용할 수 있습니다. :

Dim Team_Members(1 ~ 20) 문자열로

위의 줄에서 배열을 선언했습니다. 이제 다음과 같이 각 요소에 값을 작성해 보겠습니다.

Team_Members(1) = "존 스미스"

별도의 변수를 사용하는 것과 비교하여 배열에 데이터를 저장하는 것의 추가적인 이점은 배열의 각 요소에 대해 동일한 작업을 수행해야 할 때 분명해집니다. 팀 구성원의 이름이 20개의 개별 변수에 저장되어 있으면 각각에 대해 동일한 작업을 수행하기 위해 매번 20줄의 코드를 작성해야 합니다. 그러나 이름이 배열에 저장되어 있으면 간단한 루프를 사용하여 각각에 대해 원하는 작업을 수행할 수 있습니다.

작동 방식은 열 셀에 각 팀 구성원의 이름을 순차적으로 인쇄하는 코드 예제와 함께 아래에 설명되어 있습니다. A 활성 Excel 워크시트.

For i = 1 ~ 20 Cells(i,1).Value = Team_Members(i) 다음 i

분명히 20개의 이름을 저장하는 배열로 작업하는 것이 20개의 개별 변수를 사용하는 것보다 훨씬 덜 번거롭고 정확합니다. 그러나 이 이름이 20이 아니라 1000이면 어떻게 될까요? 그리고 추가적으로 성씨와 가명을 따로 보관해야 한다면?! 어레이의 도움 없이 VBA 코드에서 이러한 양의 데이터를 처리하는 것이 곧 완전히 불가능해질 것이 분명합니다.

Excel Visual Basic의 다차원 배열

위에서 설명한 Visual Basic 배열은 XNUMX차원으로 간주됩니다. 이것은 그들이 이름의 간단한 목록을 저장한다는 것을 의미합니다. 그러나 배열은 여러 차원을 가질 수 있습니다. 예를 들어, XNUMX차원 배열은 값 그리드와 비교할 수 있습니다.

5개의 다른 팀에 대한 5월의 일일 판매 수치를 저장하려고 한다고 가정해 보겠습니다. 이를 위해서는 31일 동안 XNUMX개의 메트릭 세트로 구성된 XNUMX차원 배열이 필요합니다. 다음과 같이 배열을 선언합시다.

Dim Jan_Sales_Figures(1 ~ 31, 1 ~ 5) 통화로

배열 요소에 액세스하려면 XNUMX월_매출_수치, 날짜와 명령 번호를 나타내는 두 개의 인덱스를 사용해야 합니다. 예를 들어 판매 수치가 포함된 요소의 주소는 2-오15 일 XNUMX월은 다음과 같이 작성됩니다.

15월_매출_수치(2, XNUMX)

같은 방식으로 3차원 이상의 배열을 선언할 수 있습니다. 배열 선언에 차원을 추가하고 추가 인덱스를 사용하여 이 배열의 요소를 참조하기만 하면 됩니다.

Excel Visual Basic에서 배열 선언

이 기사의 앞부분에서 이미 VBA에서 배열을 선언하는 몇 가지 예를 살펴보았지만 이 항목은 더 자세히 살펴볼 가치가 있습니다. 그림과 같이 XNUMX차원 배열은 다음과 같이 선언할 수 있습니다.

Dim Team_Members(1 ~ 20) 문자열로

이러한 선언은 VBA 컴파일러에 배열이 팀 멤버 20에서 1까지의 인덱스에서 액세스할 수 있는 20개의 변수로 구성됩니다. 그러나 배열 변수에 0에서 19까지 번호를 매기는 것을 생각할 수 있습니다. 이 경우 배열은 다음과 같이 선언되어야 합니다.

Dim Team_Members(0 ~ 19) 문자열로

실제로 기본적으로 배열 요소의 번호는 0부터 시작하며 배열 선언에서 초기 인덱스는 다음과 같이 전혀 지정되지 않을 수 있습니다.

Dim Team_Members(19) 문자열로

VBA 컴파일러는 이러한 항목을 20에서 0까지의 인덱스가 있는 19개 요소의 배열을 선언하는 것으로 처리합니다.

다차원 Visual Basic 배열을 선언할 때도 동일한 규칙이 적용됩니다. 예 중 하나에서 이미 표시된 것처럼 XNUMX차원 배열을 선언할 때 차원의 인덱스는 쉼표로 구분됩니다.

Dim Jan_Sales_Figures(1 ~ 31, 1 ~ 5) 통화로

그러나 배열의 두 차원에 대해 시작 인덱스를 지정하지 않고 다음과 같이 선언하는 경우:

Dim Jan_Sales_Figures(31, 5) 통화로

그러면 이 항목은 32차원 배열로 처리되며, 첫 번째 차원에는 0에서 31 사이의 인덱스를 가진 6개의 요소가 포함되고 배열의 두 번째 차원에는 0에서 5까지의 인덱스를 가진 XNUMX개의 요소가 포함됩니다.

동적 배열

위의 예에서 모든 배열은 고정된 수의 차원을 갖습니다. 그러나 많은 경우 배열의 크기를 미리 알지 못합니다. 우리는 거대한 배열을 선언함으로써 상황을 벗어날 수 있습니다. 그 크기는 우리 작업에 필요한 것보다 확실히 더 클 것입니다. 그러나 이러한 솔루션에는 많은 추가 메모리가 필요하고 프로그램 속도가 느려질 수 있습니다. 더 나은 솔루션이 있습니다. 동적 배열을 사용할 수 있습니다. 이것은 매크로를 실행하는 동안 크기를 여러 번 설정하고 변경할 수 있는 배열입니다.

동적 배열은 다음과 같이 빈 괄호로 선언됩니다.

Dim Team_Members() 문자열로

다음으로 표현식을 사용하여 코드를 실행하는 동안 배열의 차원을 선언해야 합니다. 리딤:

레딤팀_멤버(1~20)

코드를 실행하는 동안 배열의 크기를 다시 변경해야 하는 경우 ReDim 표현식을 다시 사용할 수 있습니다.

Team_Size > 20이면 Team_Members(1에서 Team_Size까지)를 다시 딤

이러한 방식으로 동적 배열의 크기를 조정하면 배열에 저장된 모든 값이 손실된다는 점에 유의하십시오. 배열에 이미 데이터를 저장하려면 키워드를 사용해야 합니다. 보존다음과 같이 :

Team_Size > 20이면 ReDim Preserve Team_Members(1에서 Team_Size까지) End If

불행히도 키워드 보존 배열 차원의 상한을 변경하는 데만 사용할 수 있습니다. 배열의 하한은 이러한 방식으로 변경할 수 없습니다. 또한 배열에 여러 차원이 있는 경우 키워드를 사용하여 보존, 배열의 마지막 차원만 크기를 조정할 수 있습니다.

댓글을 남겨주세요.