얼마 전에, 이름정의에 배열로 참조표(테이블)을 넣어서, 사용하는 방법에 대한 글을 적은 적이 있다. 한번 해놓으면 편하게 사용할 수 있지만, 단점은 아무래도, 따옴표와 컴마, 그리고 세미콜론까지 입력이 용이하지 않은 창에 수기로 타자를 치기가 어렵다는 점이겠다.
VBA로 간단하게 테이블을 배열 텍스트로 변환하는 코드이다.
테이블 영역을 선택하면 txt파일이 생기고, 이를 클립보드에 복사하는 과정까지이다. 구지 txt파일을 생성하지 않아도 되지만, 변환과정에서 생기는 오류 등을 확인하기 위한 LOG라고 보면 되겠다. 문제가 없다면 구지 파일을 켜지 않아도 되고, 기본적으로 "문서" 폴더에 저장된다.
* 아래 코드에 고정으로 적힌 문서폴더 경로는 각자에 맞춰 수정해야한다.
클립보드로 복사하는 방법으로 변경하였다. 파일이 생성되지 않아, 훨씬 수월해졌다.
또한 찾는 값이 위치하는 맨 좌측 컬럼의 값이 숫자인 경우, 텍스트로 처리되지 않도록 변경하였다.
Private Sub tableToArray()
Dim myTableRng As Range
On Error Resume Next
Application.DisplayAlerts = False
Set myTableRng = Application.InputBox("변환할 테이블을 선택하세요, 레이블행은 제외하세요", , , , , , , 8)
Application.DisplayAlerts = True
On Error GoTo 0
If myTableRng Is Nothing Then
MsgBox "범위를 선택하지 않아, 종료합니다"
GoTo dd
End If
txt = ""
For r = 1 To myTableRng.Rows.Count
If r = 1 Then
txt = "={"
End If
For c = 1 To myTableRng.Columns.Count
If IsNumeric(myTableRng(r, c)) And c = 1 Then
txt = txt & myTableRng(r, c)
Else: txt = txt & """" & myTableRng(r, c) & """"
End If
If c = myTableRng.Columns.Count Then
If r <> myTableRng.Rows.Count Then
txt = txt & ";"
End If
Else
txt = txt & ","
End If
Next c
If r = myTableRng.Rows.Count Then
txt = txt & "}"
End If
Next r
copyVariable (txt)
dd:
End Sub
Public Function copyVariable(Optional s$) As Boolean
Dim v: v = s 'Cast to variant for 64-bit VBA support
With CreateObject("htmlfile")
With .parentWindow.clipboardData
Select Case True
Case Len(s): .setData "text", v
Case Else: copyVariable = .GetData("text")
End Select
End With
End With
End Function
끝.