728x90
이전 버전에서 몇 가지 문제가 있어서 함수 구성을 조금 변경하여 JSONPair 함수로 기본 분석을 정리하고나서
이름경로를 셀 하나씩 분리하여 배열을 확장하는 함수로 구성하니다.
결과는 이전 함수와 같으나 효율이 좀 더 좋아 졌습니다.
【 함수 구문 】
= JSONtoArray( JSON , [PAD ] ) |
【 함수 인수 】
인수명 | 옵션 | 기본값 | 설 명 |
JSON | 필수 | 없음 | JSON 텍스트, 배열 또는 범위 |
PAD | 선택 | 빈문자열("") | 빈 셀에 채울 값 |
JSON 구조에 대해서는 JSONPair 함수에서 정리한 결과 배열을 받아서 진행합니다.
따라서 이 함수에서는 매우 간단한 구조로 처리가 진행됩니다.
Function JSONtoArray(JSON, Optional PAD$ = vbNullString)
'======================================================================================================
' Name JSONtoArray
' Version v3r0 2024-03-28 EGTools(egexcelvba@gmail.com)
' Param JSON JSON text, Array or Range
' PAD 배열을 만든 후 빈 셀에 채울 값, 기본값은 빈문자열("")
' Descripton JSON text를 2D 배열로 변환
' "이름 경로"를 각 단계별로 구분하여 기재하고 그 오른쪽에 "값"을 기재
' "이름 경로"에는 쌍따옴표가 없이 이름만 표시됨
' "값"은 숫자/True/False 외의 문자열은 쌍따옴표로 표시됨
' 목록("["과 "]"사용)에는 각 목록을 구분하기 위해 빈 행이 삽입됨
'======================================================================================================
Dim iR&, iC&, iCol&, vD, vItem
vD = JSONpair(JSON, Chr(7)) '// (Bell)을 구분자로 사용함에 주의
If IsError(vD) Then JSONtoArray = vD: Exit Function
If Not IsArray(vD) Then JSONtoArray = CVErr(xlErrValue): Exit Function
For iR = 1 To UBound(vD, 1)
iCol = Application.Max(iCol, Len(vD(iR, 1)) - Len(Replace(vD(iR, 1), Chr(7), "")))
Next iR
ReDim vResult(1 To UBound(vD, 1), 1 To iCol + 2)
For iR = 1 To UBound(vD, 1)
vItem = Split(vD(iR, 1), Chr(7))
For iC = LBound(vItem) To UBound(vItem)
vResult(iR, iC - LBound(vItem) + 1) = vItem(iC)
Next iC
vResult(iR, iC + 1) = IIf(IsEmpty(vD(iR, 2)), PAD, vD(iR, 2))
For iC = iC + 2 To UBound(vResult, 2)
vResult(iR, iC) = PAD
Next iC
Next iR
JSONtoArray = vResult
End Function
다음은 JSON 이름을 검색하여 해당 결과를 표형태로 출력하는 JSONParse 함수를 작성합니다.
728x90
'Excel - VBA' 카테고리의 다른 글
ChromeDriver를 자동으로 업데이트 하기 (1) | 2024.04.26 |
---|---|
[VBA] JSONParse 함수 (1) | 2024.03.28 |
[VBA] JSON 을 이름, 값 배열로 변환하기 (JSONPair) (0) | 2024.03.28 |
Google Calendar를 Excel에 연결하기 (2) | 2024.03.18 |
vWorld.kr의 Open API를 이용한 Geocoding (0) | 2024.02.12 |