VBscript에서 배열을 선언하는 방식은 아래와 같다.
'Method 1 : 동적 배열 선언 (사이즈를 한정하지 않음)
Dim arr1() 'Without Size
'Method 2 : 정적 배열 선언 (사이즈를 한정함 5칸)
Dim arr2(5) 'Declared with size of 5
'Method 3 : 정확한 parameter 를 넣어 선언
Dim arr3
arr3 = Array("apple","Orange","Grapes")
for i = 0 to 2 step 1
msgbox "num of " & arr3(i),, ""
next
(결과)
for문으로 3번 반복하게 했으며, 그때마다 출력이 달라진다.
Array에 정해진 크기를 할당한 후, 각 array 칸당 하나씩 값을 입력하기
출력할 수 있는 타입들. (문자열, 숫자(정수/소수) , 날짜, 시간
' array를 5칸 지정(assign)하고,
' 그러면 0부터 5까지 총 6개의 array가 할당된다.
' 아래와 같이 각 array에 값을 하나씩 넣을 수 있다.
Dim arr(5)
arr(0) = "1" 'Number as String
arr(1) = "VBScript" 'String
arr(2) = 100 'Number
arr(3) = 2.45 'Decimal Number
arr(4) = #10/07/2013# 'Date
arr(5) = #12.45 PM# 'Time
for i = 0 to 5 step 1
msgbox "num of " & arr(i),, ""
next
(결과) 아래와 같이 msgbox가 연달아 실행된다.
ReDim a() : 이미 정의되어있는 배열크기 재정의
ReDim Preserve a() : 기존의 배열값을 유지한 채 array 크기를 다시 정의
ubound(a) : 배열의 사이즈 (크기)를 담음
' array의 크기를 한정하지 않고, dynamic하게 조절
' ReDim은 다시 정의 한다는 뜻으로 안에 내용물을 싹 지우고 새롭게 할당.
' REDIM PRESERVE 는 기존 내용물은 그데로 두고 수정 및 추가에 사용.
' a()는 dynamic 사이즈의 array로 들어오는 array따라 유동적으로 크기 변경
DIM a()
i = 0
' REDIM 으로 선언하여 기존의 a()를 새롭게 5칸 크기로 재정의
REDIM a(5)
a(0) = "XYZ"
a(1) = 41.25
a(2) = 22
'위에서 선언된 a(5) 까지 모든 항목은 그대로 유지한체, 사이즈를 a(7)까지 늘림
'즉 a(0),a(1),a(2) 값은 그대로 유지
REDIM PRESERVE a(7)
For i = 3 to 7
a(i) = i
Next
'for문의 루프수를 a배열의 갯수만큼 돌림
For i = 0 to ubound(a)
Msgbox a(i)
Next
for i = 0 to 5 step 1
msgbox "num of " & arr(i),, ""
next
(결과)
배열의 갯수 만큼 a(0) 값부터 쭉 출력됨
그밖에 배열 관련 함수
FunctionDescription
LBound | A Function, which returns an integer that corresponds to the smallest subscript of the given arrays. |
UBound | A Function, which returns an integer that corresponds to the Largest subscript of the given arrays. |
Split | A Function, which returns an array that contains a specified number of values. Splitted based on a Delimiter. |
Join | A Function, which returns a String that contains a specified number of substrings in an array. This is an exact opposite function of Split Method. |
Filter | A Function, which returns a zero based array that contains a subset of a string array based on a specific filter criteria. |
IsArray | A Function, which returns a boolean value that indicates whether or not the input variable is an array. |
Erase | A Function, which recovers the allocated memory for the array variables. |
<배열의 차원 및 갯수 구할때 사용 LBound , UBound>
* LBound
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/lbound-function
* UBound
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/ubound-function
<문자열을 특정 Delimete으로 자르기 Split>
https://www.w3schools.com/asp/func_split.asp
<문자열을 특정 Delimete으로 붙이기 Join>
https://www.w3schools.com/asp/func_join.asp
<문자열 내 특정 단어를 검색하여 내부 값을 찾아냄 Filter>
https://www.w3schools.com/asp/func_filter.asp
아래 간단한 코드를 돌려보면서 이해
' 변수 정의하기
Dim temparr
' 이미 정의된 변수 재정의하며 동시에 크기까지 지정 (여기서 크기 1은, 0과 1까지 총 2칸이다)
Redim temparr(1)
' 0번칸에 값 넣기
temparr(0) = "hi"
' array는 0부터시작
msgbox temparr(0)
Redim Preserve temparr(3)
msgbox temparr(0)
txt = "a,b,c,e"
temparr = split(txt, ",")
' 0,1,2,3 숫자세서 마지막 숫자를 셈
msgbox Ubound(temparr)
' Ubound는 temparr의 크기값이 들어감
for i = 0 to Ubound(temparr)
msgbox temparr(i)
Next
2차원 배열에 대해서는 아래를 참고.
https://ansan-survivor.tistory.com/1939
* 매우 유용. (생성한 List (Array)에 대해서 Append 시키거나 하는 방법), Collection을 사용하여 List와 같이 활용
https://ansan-survivor.tistory.com/1945