VBAによるJSONファイル生成
UTF8によるデータ出力
Sub Create_JSON()
Dim FileName As String
Dim isFirstRow As Boolean
Dim row, col As Integer
'シート名としてdataを指定...
Sheets("data").Select
'A1セルのチェック...
If WorksheetFunction.CountA(Cells(1, 1)) = 0 Then
MsgBox "A1セルにデータがありません。中止します。", vbCritical
Exit Sub
End If
'行数と列数を得る...
row = Range("A1").EntireColumn.SpecialCells(xlCellTypeConstants).Count
col = Range("A1").EntireRow.SpecialCells(xlCellTypeConstants).Count
' 保存先を指定する
FileName = Application.GetSaveAsFilename
If Dir(FileName) <> "" Then
rc = MsgBox("既にファイルがあります。既にあるファイルを削除して新たに作成しますか?", vbYesNo + vbQuestion)
If rc = vbNo Then
MsgBox "処理を中止します", vbCritical
Exit Sub
Else
'ファイルを削除する...
Kill FileName
End If
End If
'ここからUTF-8で保存する...
Dim txt As Object
Set txt = CreateObject("ADODB.Stream")
'オブジェクトに保存するデータの種類を文字列型に指定する
'txt.Type = adTypeText
'文字列型のオブジェクトの文字コードを指定する
txt.Charset = "UTF-8"
'オブジェクトのインスタンスを作成
txt.Open
' 1行目のフラグを設定する
isFirstRow = True
'はじめの[を記載する...
txt.WriteText "[" & vbCrLf, adWriteLine
'配列をオブジェクトに書き込む
For rc = 2 To row
' 1行目か確認する.1行目の場合だけは行頭に","を入力しない
If isFirstRow = True Then
' 1行目フラグをFalseし,以降行頭に","を入力するようにする
isFirstRow = False
Else
txt.WriteText vbTab & "," & vbCrLf, adWriteLine
End If
' データ要素の開始記号を入力
txt.WriteText vbTab & "{" & vbCrLf, adWriteLine
'' 列の繰り返し.データは必ず3列目から入力されている想定
For cc = 1 To col
' 最後のデータであるか確認する
If cc = col Then
' 最後のデータである場合には","不要
txt.WriteText vbTab & vbTab & """" & Cells(1, cc).Value & """:" & vbTab & """" & Cells(rc, cc).Value & """" & vbCrLf, adWriteLine
Else
' 次に入力するデータがある場合には","を入力する
txt.WriteText vbTab & vbTab & """" & Cells(1, cc).Value & """:" & vbTab & """" & Cells(rc, cc).Value & """" & "," & vbCrLf, adWriteLine
End If
Next
' データ要素終了記号を入力
txt.WriteText vbTab & "}", adWriteLine
Next
txt.WriteText "]" & vbCrLf, adWriteLine
'オブジェクトの内容をファイルに保存
txt.SaveToFile FileName
'オブジェクトを閉じる
txt.Close
MsgBox ("出力完了")
'保存したフォルダを開く...
Dim PathName As String, pos As Long
pos = InStrRev(FileName, "\")
PathName = Left(FileName, pos)
Shell "C:\Windows\Explorer.exe " & PathName, vbNormalFocus
End Sub