엑셀 배열을 범위로 변환 :: ArrayToRng 명령문 사용법

배열 전체 또는 열 번호를 지정하여 시트 위 범위로 출력하는 ArrayToRng 함수의 사용법 및 동작원리를 살펴봅니다.

홈페이지 » 엑셀 배열을 범위로 변환 :: ArrayToRng 함수 사용법

엑셀 배열을 범위로 변환 :: ArrayToRng 명령문 사용법 총정리

엑셀 ArrayToRng 명령문 목차 바로가기
요약

엑셀 ArrayToRng 함수는 배열 전체 또는 열 번호를 지정하여 시트 위 범위로 출력하는 함수입니다. 배열의 특정 열 번호를 지정하여 범위로 출력할 수 있습니다.

명령문 구문
ArrayToRng 시작셀, 배열, [열번호]
사용된 인수 및 변수 알아보기
인수 설명
시작셀
[Range]
배열을 출력할 범위의 시작셀입니다.
배열
[Variant]
반환할 배열입니다.
열번호
[String, 선택인수]
배열의 특정 열 번호를 쉼표로 구분하여 입력합니다. 열 번호로 공란을 입력할 수도 있습니다.

예제파일 다운로드

상세 설명

엑셀 ArrayToRng 함수는 배열 전체 또는 열 번호를 지정하여 범위로 출력하는 사용자 지정함수입니다. 최대 2차원 배열까지 사용가능합니다. (시트는 2차원이므로 3차원 이상의 배열은 표시할 수 없습니다.)

본 명령문에는 Extract_Column 보조함수가 사용됩니다.

모든 배열을 한번에 출력하거나 배열의 특정 열 번호를 지정하여 범위로 출력할 수도 있습니다.

ArrayToRng Sheet1.Range("A1"), 배열

을 입력하면 Sheet1의 A1셀을 기준으로 배열이 출력됩니다.

ArrayToRng Sheet1.Range("A1"), 배열, "3,5,6"

을 입력하면 Sheet1의 A1셀을 기준으로 배열의 3번째, 5번째, 6번째 열이 출력됩니다.

실전 사용 예제

배열 예제 ( 7 x 7 배열)

a 1
b 2
c 3
d 4
e 5
f 6
g 7
  1. 배열의 모든 값을 A1셀 위로 출력하기
    ArrayToRng Range("A1"), 배열
  2. 배열의 두번째, 네번째 열만 A1셀 위로 출력하기
    ArrayToRng Range("A1"), 배열, "2,4"
  3. 배열의 모든 열 중간에 공백을 추가하여 A1셀 위로 출력하기
    ArrayToRng Range("A1"), 배열, "1,,2,,3,,4,,5,,6,,7"

엑셀 배열을 범위로 변환, ArrayToRng 명령문 동작원리

ArrayToRng 명령문 전체 코드
Sub ArrayToRng(startRng As Range, Arr As Variant, Optional ColumnNo As String = "")
 
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ ArrayToRng 함수
'▶ 배열을 범위 위로 반환합니다.
'▶ 인수 설명
'_____________startRng      : 배열을 반환할 기준 범위(셀) 입니다.
'_____________Arr               : 반환할 배열입니다.
'_____________ColumnNo   : [선택인수] 배열의 특정 열을 선택하여 범위로 반환합니다. 여러개 열을 반환할 경우 열 번호를 쉼표로 구분하여 입력합니다.
'                                               값으로 공란을 입력하면 열을 건너뜁니다.
'▶ 사용 예제
'Dim v As Variant
'ReDim v(0 to 1)
''v(0) = "a" : v(1) = "b"
'ArrayToRng Sheet1.Range("A1"), v
'▶ 사용된 보조 명령문
'Extract_Column 함수
'##############################################################
 
On Error GoTo SingleDimension:
 
Dim Cols As Variant: Dim Col As Variant
Dim X As Long: X = 1
If ColumnNo = "" Then
    startRng.Cells(1, 1).Resize(UBound(Arr, 1) - LBound(Arr, 1) + 1, UBound(Arr, 2) - LBound(Arr, 2) + 1) = Arr
Else
    Cols = Split(ColumnNo, ",")
    For Each Col In Cols
        If Trim(Col) <> "" Then
            startRng.Cells(1, X).Resize(UBound(Arr, 1) - LBound(Arr, 1) + 1) = Extract_Column(Arr, CLng(Trim(Col)))
        End If
        X = X + 1
    Next
End If
Exit Sub
 
SingleDimension:
Dim tempArr As Variant: Dim i As Long
ReDim tempArr(LBound(Arr, 1) To UBound(Arr, 1), 1 To 1)
For i = LBound(Arr, 1) To UBound(Arr, 1)
    tempArr(i, 1) = Arr(i)
Next
startRng.Cells(1, 1).Resize(UBound(Arr, 1) - LBound(Arr, 1) + 1, 1) = tempArr
 
End Sub
 
'########################
' 배열에서 특정 열 데이터만 추출합니다.
' Array = Extract_Column(Array, 1)
'########################
 
Function Extract_Column(DB As Variant, Col As Long) As Variant
 
Dim i As Long
Dim vArr As Variant
 
ReDim vArr(LBound(DB) To UBound(DB), 1 To 1)
For i = LBound(DB) To UBound(DB)
        vArr(i, 1) = DB(i, Col)
Next
 
Extract_Column = vArr
 
End Function
명령문 동작원리 단계별 알아보기
  1. 배열 처리 중 오류가 발생하면 1차원 배열인 상황이므로 SingleDimension 레이블로 이동합니다.
    On Error GoTo SingleDimension:
  2. 변수를 선언합니다.
    Dim Cols As Variant: Dim Col As Variant
    Dim X As Long: X = 1
  3. ColumnNo 인수가 비어있을 경우, 전체 배열을 범위 위로 출력합니다.
    If ColumnNo = "" Then
    startRng.Cells(1, 1).Resize(UBound(Arr, 1) - LBound(Arr, 1) + 1, UBound(Arr, 2) - LBound(Arr, 2) + 1) =