Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

Working With Strings For Arrays
|Array()|Split()|Join()|Variant|For|Each|In|Next|

징그럽게 배열이야기를 또하는군?!!
배열은 컴퓨터프로그래밍의 핵심이니..자꾸 이야기하여야 하여
몸과 머리에 배열의 프레임이 그려져야 한다

프로그래밍을 자~알 하고 싶다면 배열과 친해져야 한다
엑셀프로그래밍에서 엑셀시트자체가 배열이기 때문에
워크시트를 그냥 활용하게 되는 습관이 있어서
배열을 잘 활용하지 않게 된다
배열을 능숙하게 잘 활용한다고 하는것은 메모리상에
자기만의 워크시트같이 생긴 방을 만들어서 활용한다는 이야기니까
훨씬 효율적인 것이다
아래와 같이 문자열정보에서도 좀더 효율적으로 활용하기 위하여
배열을 사용하게 된다

배열을 문자열로 전달받아서 다시 배열로/Split(),Join()

"Excel Is Very Interesting And Powerful"이라는 문자열정보를
받았을때 이것을 문장의 띄어쓴 부분으로 하나..하나 토막을 내어
배열에 담고 싶다면

Dim sX(1 To 6) As String
sX(1)="Excel"
sX(2)="Is"
sX(3)="Very"
sX(4)="Interesting"
sX(5)="And"
sX(6)="Powerful"

이라고 배열에 일일이 담아서 사용하나??
이런 작업이 필요할까??
필요하다는 생각이 있어서 VBA함수중에서 Split함수라는 것이 있다
Split!!단어의 의미 그대로 문자열을 토막을 치고 배열로 만들어주는 함수다

Dim sArray As Variant
sArray=Split("Excel Is Very Interesting And Powerful"," ")

라고 하면 Split함수의 첫째인수를 두번째인수 " " 즉 빈문자로
토막을 쳐서 배열을 만들고 이것을 sArray에 전달하였으니
sArray라는 변수에 문자열정보가 배열로 변환되어 담기게 되는 것이다
이때 배열을 받는 변수는 Variant타입이여야 한다는 점!!
앞에서 설명했을것이다


위와 같은것이 도대체 뭣에 써먹겠다는것이냐??
아래에 문장이 있다
Run 버튼 크릭!!

Excel Is Very Interesting And Powerful

Sub splitToArray()
Dim sX As String, arrX As Variant
Dim iX As Integer, varX As Variant
sX = Range("A5")
arrX = Split(sX, " ")
For Each varX In arrX
    iX = iX + 1
    'MsgBox "배열의 " & iX & "번째 요소는 " & varX
   어딘가에 varX값을 표현하면 된다 
   위의 표현은 웹상에서는 웹의 오브젝트를 활용한것이고..
   앞으로 나올 엑셀오브젝트에 varX값을 옮겨주면 되는것이다
Next
End Sub

위와 같은 작업이 왜 필요할까?/배열을 문자열로 바꿔주는 함수

프로그래밍이 처음이신 분들은 왜 위와 같이 쓸데없는 작업이
필요할까..왜 멀쩡한 문장을 배열에 넣었다..빼었다 하는가??
의문이 들것이다

프로그래밍은 정보를 자기가 원하는 대로 가공하여 새로운 정보를
만들기도 하여야 한다

예를 들어서 퀴즈를 내기 위하여 아래의 문장을 골고루 섞어야 
할 경우도 있을것이다
앞의 단어가 뒤로 가기도 하고 뒤의 단어가 중간에 오기도 하고
카드를 골고루 섞듯이(shuffling) 문장의 단어를 골고루 섞고 싶어야 할
경우가 필요하다면
어떻게 하겠는가??
이때 배열이 필요한 것이고 그러려면 문장을 배열로 바꿀줄 알아야하고
배열을 적절히 활용할줄 알아야 문제를 풀수있다
문장을 배열로 바꾸는것은 위에서 보았듯이
Split(문장,"단어와 단어사이를 구분하는 표시")로서 처리가 되는것이다
아래의 문장을 골고루 섞어보자(직접 다른 문장으로 수정하고 해도 좋다)

Excel,Access,PowerPoint,OutLook,VBA,Word



Sub splitToArray_Suffle()
Dim sX As String, arrX As Variant, iX As Integer
Dim sTemp As String, rngArray As Range
Dim iTemp As Integer
sX = Range("A5")
arrX=split(sX,",")
For iX = LBound(arrX) To UBound(arrX)
        iTemp = Int(Rnd() * UBound(arrX)) + 1
        sTemp = arrX(iTemp)
        arrX(iTemp) = arrX(iX)
        arrX(iX) = sTemp
Next
Range("A6")=Join(arrX,",")
End Sub

위의 구문에서 새로운 유용한 배열처리함수가
나타났다
Join(배열,',')
를 하면 배열이 콤마(,)로 구분된 문자열이 다시 되는것이다
편리한 배열을 문자열정보로 바꿔주는 함수이다

배열을 만들어주는 편리한 함수

문자열정보와는 관계가 없지만 위에 배열을 위한 함수들을
이야기하다 보니..Array함수를 이야기해야겠다
배열의 각각의 요소에 값을 전달할때 Array함수를 사용하면
편리하다

sX(1 To 5) As String
sX(1)="꼴뚜기"
sX(2)="오징어"
sX(3)="낙지"
sX(4)="문어"
sX(5)="쭈꾸미"

과 같이 지루하게 값을 넣는다(Assign)고 하면
피곤한 일이다
Array함수를 사용하면 아래와 같이 간단하게 해결된다

Dim sX As Variant
sX=Array("꼴뚜기","오징어","낙지","문어","쭈꾸미")

위에서 한것과 같은 결과를 얻는것이다
Array함수를 사용하여 변수에 배열을 담을때는 반드시
변수타입을 Variant로 하여야 한다는 점을 잊지 마시고

예를 하나 들어야 유용성을 알게 될것이다
예를 들어서 아래의 워크시트 A열의 각셀에
꼴뚜기,오징어,낙지,문어,쭈꾸미등을 일일이 입력하려면
Range("A1")="꼴뚜기"
Range("A2")="오징어"
...
...
와 같이 입력하여야 할것이다
아래와 같이 활용하면 편리하다

ABC
1
2
3
4
5

Dim arrX As Variant,iNum As Integer
Dim rngData As Range
arrX=Array("꼴뚜기","오징어","문어","낙지","쭈꾸미")
iNum=UBound(arrX)
Set rngData=Range("A1")
Set rngData=Range(rngData,rngData.Offset(iNum,0)
rngData=Application.Transpose(arrX)