참고: 지식인 질문글

화면 및 주요 코드:

실행 결과:

질문자가 원하는 결과 문자열이 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
샘플파일 첨부합니다.
Excel2Json1.xlsm
0.08MB
참고: 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 |
네이버카페 최신글 가져오기 (39) | 2020.11.19 |
최근댓글