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

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

작성자 :
오빠두엑셀
최종 수정일 : 2022. 05. 03. 00:39
URL 복사
메모 남기기 : (6)

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

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

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

명령문 구문
ArrayToRng 시작셀, 배열, [열번호], [하이퍼링크열번호]
패치안내
  • 2022.05.01
    : 하이퍼링크로 연결할 열 번호 인수를 추가하였습니다.
사용된 인수 및 변수 알아보기
인수 설명
시작셀
[Range]
배열을 출력할 범위의 시작셀입니다.
배열
[Variant]
반환할 배열입니다.
열번호
[String, 선택인수]
배열의 특정 열 번호를 쉼표로 구분하여 입력합니다. 열 번호로 공란을 입력할 수도 있습니다.
하이퍼링크열번호
[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 = "", Optional LinkColumnNo As String = "")
 
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ ArrayToRng 함수
'▶ 배열을 범위 위로 반환합니다.
'▶ 인수 설명
'_____________startRng      : 배열을 반환할 기준 범위(셀) 입니다.
'_____________Arr               : 반환할 배열입니다.
'_____________ColumnNo   : [선택인수] 배열의 특정 열을 선택하여 범위로 반환합니다. 여러개 열을 반환할 경우 열 번호를 쉼표로 구분하여 입력합니다.
'                                               값으로 공란을 입력하면 열을 건너뜁니다.
'_____________LinkColumNo   : [선택인수] 하이퍼링크로 출력할 열 번호입니다. 쉼표로 구분하여 입력합니다.
'▶ 사용 예제
'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 LinkCols As Variant: Dim LinkCol As Variant
Dim i As Long: Dim X As Long: X = 1
Dim colNo As Long
If ColumnNo = "" Then
    startRng.Cells(1, 1).Resize(UBound(Arr, 1) - LBound(Arr, 1) + 1, UBound(Arr, 2) - LBound(Arr, 2) + 1) = Arr
    If LinkColumnNo <> "" Then
        LinkCols = Split(LinkColumnNo, ",")
        For Each LinkCol In LinkCols
            For i = 1 To UBound(Arr, 1) - LBound(Arr, 1) + 1
                colNo = CLng(Trim(LinkCol))
                startRng.Parent.Hyperlinks.Add startRng.Cells(i, colNo), startRng.Cells(i, colNo).Value
            Next
        Next
    End If
Else
    Cols = Split(ColumnNo, ",")
    LinkCols = Split(LinkColumnNo, ",")
    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)))
            For Each LinkCol In LinkCols
                If Trim(LinkCol) = Trim(Col) Then
                    For i = 1 To UBound(Arr, 1) - LBound(Arr, 1) + 1
                        startRng.Parent.Hyperlinks.Add startRng.Cells(i, X), startRng.Cells(i, X).Value
                    Next
                End If
            Next
        End If
        X = X + 1
    Next
End If
 
Exit Sub
 
SingleDimension:
Dim tempArr As Variant
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) = Arr
  4. ColumnNo 인수가 비어있지 않을 경우, 각 ColumnNo를 하나씩 돌아가며 배열의 특정 열 값을 범위로 출력합니다.
    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
  5. 1차원 배열일 경우, 시트 위 범위 (2차원) 으로 출력하기 위하여 임시배열로 변환해야 합니다.
    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
  6. 변환된 임시 배열을 시트 위로 출력하고 명령문을 종료합니다.
    startRng.Cells(1, 1).Resize(UBound(Arr, 1) - LBound(Arr, 1) + 1, 1) = tempArr
5 6 투표
게시글평점
6 댓글
Inline Feedbacks
모든 댓글 보기
6
0
여러분의 생각을 댓글로 남겨주세요.x