지난 번에 배열을 다룬 적이 있는데(어쩌다보니 배열 성애자가 된 느낌!), 배열의 차원을 줄이거나 배열의 일부를 떼어 내는 걸 ([참고]배열 슬라이싱#1, 배열 슬라이싱#2, 배열 슬라이싱#3, 뱁새가 황새 따라하다 가랑이 찢어지다)다루었다. 그런데 다시 합치는 짓을 하고 싶었다. 단순히 합치는 걸 하라면 Array()함수를 사용하면 될 듯하다.
![]()
그런데 1차원 배열을 나란히 세워 두는 것 말고 길게 AA건전지 두 개를 직렬로 연결하듯이 하려면? 완벽한 방법은 아니지만 다음과 같은 방법이 있다.
Join()함수로 배열의 각 항목으로 연결하고([참고]VBA 배열에 대한 몇 가지 (3)) 다시 Split()함수로 합치는 것이다. 단점은 Split(), Join()함수가 문자열 함수라서 결과값을 문자로 돌려준다는 점이다. 에이, 다시 숫자로 변환하면 되지 뭐~
Dim s As Worksheet1차원 배열 두 개를 Array()로 합치고 다시 방향을 바꿔 버리면(Transpose) 만족스럽게도 1차원 배열이 생긴다. 이건 AA건전지를 병렬로 연결한 모양새이다.
Dim arr1(), arr2
Set s = Sheet1
arr1 = s.Range("A1:A15").Value
arr1 = WorksheetFunction.Transpose(arr1)
arr2 = s.[B1:B15]
arr2 = WorksheetFunction.Transpose(arr2)
Dim arr3
arr3 = Array(arr1, arr2)
arr3 = WorksheetFunction.Transpose(arr3)

그런데 1차원 배열을 나란히 세워 두는 것 말고 길게 AA건전지 두 개를 직렬로 연결하듯이 하려면? 완벽한 방법은 아니지만 다음과 같은 방법이 있다.
arr3 = Split(Join(arr1, ",") & "," & Join(arr2, ","), ",")
Join()함수로 배열의 각 항목으로 연결하고([참고]VBA 배열에 대한 몇 가지 (3)) 다시 Split()함수로 합치는 것이다. 단점은 Split(), Join()함수가 문자열 함수라서 결과값을 문자로 돌려준다는 점이다. 에이, 다시 숫자로 변환하면 되지 뭐~