XLS+VBA
엑셀 데이터를 JSON형식으로 변환
쵸코난
2022. 1. 13. 18:56
참고: 지식인 질문글
화면 및 주요 코드:
![](https://blog.kakaocdn.net/dn/D8muO/btrqAVG7V2L/jfWQqZK2W1w3nCvdNAe8b1/img.png)
실행 결과:
![](https://blog.kakaocdn.net/dn/bOSd5p/btrqAVNUmP7/BshS2uyzWh4cDHeQAsUQp1/img.png)
질문자가 원하는 결과 문자열이 JSON 문자열과 거의 흡사하기 때문에
VBAJSON 라이브러리를 활용하였습니다.
엑셀 데이터의 첫번째 행은 카테고리로 읽어들이고
나머지 행은 Dictionary 구조를 이용해서 데이터 구조를 만들어서
최종적으로 ConvertToJson 함수를 이용해서 items 배열(컬렉션)을 Json 문자열로 변환합니다.
원래 JSON데이터는 카테고리명의 양쪽에 따옴표가 있는데 삭제시켰습니다.
따옴표를 원래대로 놔두려면 해당 부분(따옴표를 제거하는 for 문 부분)을 주석처리하면 됩니다.
더보기
'Add Reference to Microsoft Scripting Runtime Library
Sub Convert()
Dim sht As Worksheet
Dim rng As Range
Dim items As New Collection
Dim item As New Dictionary
Dim r As Long, c As Integer
Dim cat() As Variant
Dim fname As String
Dim handle As Integer
Dim Json As String
'Set sht = ThisWorkbook.ActiveSheet
Set sht = ThisWorkbook.Worksheets("info")
'//첫 행(카테고리)
cat = sht.UsedRange.Rows(1).Value
'//1열 셀 순환
For Each rng In sht.UsedRange.Columns(1).Cells
If rng.Row > 1 Then '2행부터
r = r + 1
For c = 1 To UBound(cat, 2)
'//각 행을 item Dictionary에 추가
item(cat(1, c)) = rng.Offset(, c - 1).Value
Next c
'//각 행Dictionary 를 items Collection에 추가
items.Add item
Set item = Nothing 'Collection 초기화
End If
Next rng
'//Items를 Json 문자열로 변환
Json = JsonConverter.ConvertToJson(items, Whitespace:=4)
'카테고리 이름에 따옴표 제거
For c = 1 To UBound(cat, 2)
Json = Replace(Json, """" & cat(1, c) & """:", cat(1, c) & ":")
Next c
'//텍스트 파일에 저장
fname = Application.GetSaveAsFilename(InitialFileName:= _
ThisWorkbook.Path & Application.PathSeparator & "Json.txt", FileFilter:="Text file,*.txt")
If fname = "" Then Exit Sub
handle = FreeFile
Open fname For Output As #handle
Print #handle, Json
Close #handle
End Sub
샘플파일 첨부합니다.
참고: https://codingislove.com/excel-json/