이 페이지에서
구문
ArrayToRng 시작셀, 배열, [열번호], [하이퍼링크열번호]
인수구분
형식 설명
시작셀
필수
Range
배열을 출력할 범위의 시작 셀입니다.
배열
필수
Variant
시트 위로 반환할 배열입니다.
열번호
선택
String
배열에서 출력할 특정 열 번호를 쉼표로 구분하여 입력합니다.
값으로 공란을 입력하면 해당 열을 건너뜁니다.
하이퍼링크열번호
선택
String
하이퍼링크로 연결할 열 번호를 쉼표로 구분하여 입력합니다.
마스터 코드
복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요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
활용 예제
배열 전체를 시작 셀 기준으로 출력
ArrayToRng Range("A1"), 배열
'// 배열의 모든 값을 A1셀 위로 출력합니다.
지정한 열만 골라서 출력
ArrayToRng Range("A1"), 배열, "2,4"
'// 배열의 두번째, 네번째 열만 A1셀 위로 출력합니다.
ArrayToRng Range("A1"), 배열, "1,,2,,3,,4,,5,,6,,7"
'// 배열의 모든 열 중간에 공백을 추가하여 A1셀 위로 출력합니다.
안내사항
시트는 2차원이므로 최대 2차원 배열까지만 출력할 수 있습니다.
Extract_Column 보조 함수가 함께 사용되며 위 전체 코드에 포함되어 있습니다.
요런 코드를 이해하고 활용할 수 있다면 원이 없겠다는 생각이 드네요.
빨리 댓글 5회 채우고 싶은 맘도 있고 해서...
글쓰고 나니 글 평가하라고.. 제가 어떻게 이런 글을 평가하나요?