ic


배열=배열+배열 EXCEL/VBA

지난 번에 배열을 다룬 적이 있는데(어쩌다보니 배열 성애자가 된 느낌!), 배열의 차원을 줄이거나 배열의 일부를 떼어 내는 걸 ([참고]배열 슬라이싱#1, 배열 슬라이싱#2, 배열 슬라이싱#3, 뱁새가 황새 따라하다 가랑이 찢어지다)다루었다. 그런데 다시 합치는 짓을 하고 싶었다. 단순히 합치는 걸 하라면 Array()함수를 사용하면 될 듯하다.
    Dim s As Worksheet
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차원 배열 두 개를 Array()로 합치고 다시 방향을 바꿔 버리면(Transpose) 만족스럽게도 1차원 배열이 생긴다. 이건 AA건전지를 병렬로 연결한 모양새이다.

그런데 1차원 배열을 나란히 세워 두는 것 말고 길게 AA건전지 두 개를 직렬로 연결하듯이 하려면? 완벽한 방법은 아니지만 다음과 같은 방법이 있다.
arr3 = Split(Join(arr1, ",") & "," & Join(arr2, ","), ",")

Join()함수로 배열의 각 항목으로 연결하고([참고]VBA 배열에 대한 몇 가지 (3)) 다시 Split()함수로 합치는 것이다. 단점은 Split(), Join()함수가 문자열 함수라서 결과값을 문자로 돌려준다는 점이다. 에이, 다시 숫자로 변환하면 되지 뭐~

덧글

댓글 입력 영역