참고: 지식인 질문글
화면 및 주요 코드:
실행 결과:
질문자가 원하는 결과 문자열이 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/
'XLS+VBA' 카테고리의 다른 글
PPT파일 순서를 확인/정렬해서 합치기 (0) | 2023.02.11 |
---|---|
구글 이미지 검색 결과 가져오기 (0) | 2023.02.01 |
JsonBag 클래스를 이용한 Json데이터 파싱 (0) | 2023.01.01 |
연결 끊어진 차트의 엑셀 데이터 복구 (0) | 2022.07.26 |
Alt+F11 및 VBE창 금지/ 활성화 (0) | 2022.01.02 |
고프로(Gopro) 촬영한 동영상 MP4 파일명을 촬영날짜로 일괄 변경 (9) | 2021.04.17 |
엑셀 각 시트를 10행씩 끊어서 파워포인트 각 슬라이드에 붙여넣기 (0) | 2021.02.16 |
네이버카페 최신글 가져오기 (37) | 2020.11.19 |
최근댓글