둘 이상의 데이터 열을 저장하려면 배열의 다른 차원이 필요합니다. 예:
2차원 배열에 데이터 저장:
'선언 Dim array_example(10, 2) '11 x 3 "정의된" 배열 '배열에 데이터 저장 For i = 0 To 10 array_example(i, 0) = Range("A" & i + 2) array_example(i, 1) = Range("B" & i + 2) array_example(i, 2) = Range("C" & i + 2) Next
다음은 이러한 값을 사용하는 몇 가지 예입니다.
MsgBox array_example(0, 0) '=> 반환 날짜: 2026년 11월 3일 MsgBox array_example(0, 1) '=> 반환: 24 MsgBox array_example(9, 2) '=> 반환: NO MsgBox array_example(10, 2) '=> 반환: YES
정기적으로 배열의 데이터를 업데이트해야 하므로 선언 시 고정된 값을 할당할 수 없다고 잠시 상상해 보겠습니다.
비어 있지 않은 마지막 셀, 즉 데이터베이스의 마지막 행의 행 번호를 찾으려면 다음 공식을 사용합니다.
last_row = Range("A1").End(xlDown).Row
Excel은 선언에 변수를 허용하지 않습니다.
대신 동적 배열(빈 괄호 사용)을 선언한 다음 Redim을 사용하여 크기를 정의하세요.
Dim array_example() ReDim array_example(last_row - 2, 2)
다음 절차를 사용하면 데이터 세트(테이블)의 모든 행을 배열에 저장할 수 있습니다.
Dim array_example() ReDim array_example(last_row - 2, 2)
이전 예에서 배열의 마지막 숫자는 last_row - 2였습니다.
For i = 0 To last_row - 2
배열의 마지막 숫자를 확인하는 또 다른 방법은 Ubound를 사용하는 것입니다.
For i = 0 To UBound(array_example)
이 함수는 선택한 차원(기본값은 첫 번째 차원)에 대해 배열에서 가장 큰 숫자를 반환합니다.
이를 더욱 명확하게 해주는 몇 가지 예는 다음과 같습니다.
Sub example() Dim array_example(10, 2) MsgBox UBound(array_example) '=> 반환 : 10 MsgBox UBound(array_example, 1) '=> 반환 : 10 MsgBox UBound(array_example, 2) '=> 반환 : 2 End Sub
루프를 사용하지 않고도 워크시트의 셀 범위 값으로 배열을 채울 수 있습니다.
'선언 Dim array_example(10, 2) '11 x 3 "정의된" 배열 '배열에 데이터 저장 For i = 0 To 10 array_example(i, 0) = Range("A" & i + 2) array_example(i, 1) = Range("B" & i + 2) array_example(i, 2) = Range("C" & i + 2) Next
앞의 코드는 다음과 같이 효과적으로 대체될 수 있습니다.
'선언 Dim array_example() '배열에 데이터 저장 array_example = Range("A2:C12").Value
두 번째 방법이 첫 번째 방법보다 더 매력적으로 보이지만 대부분의 경우 첫 번째 방법보다 구현하는 데 더 많은 시간이 소요될 수 있습니다.
이런 식으로 배열에 데이터를 저장하면 첫 번째 숫자가 0이 아닌 1이 되어 혼동을 일으킬 수 있습니다.
나중에 코드를 늘리는 과정에서 특정 검색 기준을 충족하는 데이터만 배열에 저장하기로 결정했다면(또는 전혀 다른 작업을 수행하기로 결정했다면) 다른 루프 기능을 사용하여 코드를 완전히 다시 작성해야 하는데...
그러나 이 두 번째 방법은 루프보다 빠르기 때문에 대규모 데이터 세트의 전체 내용을 저장해야 하는 경우 매우 유용합니다(15,000개의 레코드마다 약 0.2초 절약).
그러나 "고정된" 내용이 있는 배열을 생성해야 하는 경우에는 다음과 같습니다.
한 가지 해결책은 테이프별로 값을 기록하는 것입니다.
Dim en(5) en(0) = "IF" en(1) = "VLOOKUP" en(2) = "SUM" en(3) = "COUNT" en(4) = "ISNUMBER" en(5) = "MID"
다행히 배열(Array)을 사용하여 이 코드를 단순화할 수 있습니다.
en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID")
다음은 Replace 함수 사용에 대한 데모입니다(다음 예를 이해하는 데 도움이 됩니다).
Sub replace_example() Dim var_translate As String '이 예의 텍스트 리본 var_translate = "Hello World !" '텍스트 리본에서 "World"를 "you"로 바꿉니다. var_translate = Replace(var_translate, "World", "you") '교체 후 테이프 MsgBox var_translate '=> "안녕하세요!"를 반환합니다. End Sub
이제 일련의 값을 다른 데이터 세트로 바꾸려면 배열과 Array 함수를 사용하는 것이 매우 유용합니다.
Sub translate() '수식을 영어에서 프랑스어로 번역하는 간단한 예 Dim var_translate As String '이 예의 텍스트 리본 var_translate = "Formula to translate : SUM(IF(ISNUMBER(A1:E1),A1:E1,0))" '두 가지 값 세트 en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID") fr = Array("SI", "RECHERCHEV", "SOMME", "NB", "ESTNUM", "STXT") '"SI"를 "IF"로, "RECHERVEV"를 "VLOOKUP"으로 바꾸세요. For i = 0 To UBound(en) var_translate = Replace(var_translate, en(i), fr(i)) Next '교체 후 테이프 MsgBox var_translate '=> "Formula 번역: SOMME(SI(ESTNUM(A1:E1),A1:E1,0))"을 반환합니다. End Sub
Split 함수를 사용하면 문자열을 여러 부분으로 나누고 결과 값을 배열에 쓸 수 있습니다.
리본을 배열로 변환하려면 다음을 수행하십시오.
variable = "IF/VLOOKUP/SUM/COUNT/ISNUMBER/MID"
VBA 함수 Split를 사용하고 구분 기호를 지정합니다.
en = Split(variable, "/")
"en" 배열은 다음 값을 반환합니다.
MsgBox en(0) '=> 반환: IF MsgBox en(1) '=> 반환: VLOOKUP MsgBox en(2) '=> 반환 : SUM MsgBox en(3) '=> 반환: COUNT MsgBox en(4) '=> 반환: ISNUMBER MsgBox en(5) '=> 반환: MID
다음 3개 배열도 동일한 값을 반환합니다.
en = Array("IF", "VLOOKUP", "SUM", "COUNT", "ISNUMBER", "MID") en = Split("IF,VLOOKUP,SUM,COUNT,ISNUMBER,MID", ",") en = Split("IF VLOOKUP SUM COUNT ISNUMBER MID", " ")
다음 예에서는 문자열의 세 번째 값을 반환합니다.
MsgBox Split("IF,VLOOKUP,SUM,COUNT,ISNUMBER,MID", ",")(2) '=> 반환 : SUM
이 함수는 배열의 값을 문자열로 수집합니다.
MsgBox Join(Array(1, 2, 3, 4, 5), "") '=> 반환 : 12345