VBA解析JSON至Excel:仅能写入A1,无法拆分到其他单元格求助
解决VBA解析JSON并拆分到Excel单元格的问题
嗨,我来帮你搞定这个JSON拆分的难题!你已经成功把JSON内容拉到A1单元格了,接下来只需要借助专门的JSON解析工具,就能把嵌套的JSON数据拆分到不同单元格里。下面是具体的步骤和代码示例:
第一步:导入VBA-JSON解析库
原生VBA没有内置JSON解析功能,我们需要用到VBA-JSON这个常用的工具,它能把JSON字符串转换成VBA可操作的字典(Dictionary)和集合(Collection):
- 打开VBA编辑器,点击「插入」→「模块」,把VBA-JSON的代码粘贴进去(你可以直接在网上找到这个开源代码复制过来)
- 然后在「工具」→「引用」里勾选「Microsoft Scripting Runtime」,这是用来支持字典对象的必要引用
第二步:编写解析JSON的VBA代码
下面的代码会读取A1单元格的JSON内容,解析后把顶层字段和list数组里的嵌套数据拆分到不同单元格:
Sub ParseJSONToCells() Dim jsonStr As String Dim jsonObj As Object ' 解析后的JSON对象 Dim listCol As Collection ' 存储list数组的集合 Dim listItem As Object ' list数组里的单个对象 Dim key As Variant Dim rowNum As Integer Dim colNum As Integer ' 1. 读取A1单元格的JSON字符串 jsonStr = ThisWorkbook.Sheets("Sheet1").Range("A1").Value If jsonStr = "" Then MsgBox "A1单元格没有JSON内容!" Exit Sub End If ' 2. 解析JSON字符串 On Error Resume Next Set jsonObj = JsonConverter.ParseJson(jsonStr) On Error GoTo 0 If jsonObj Is Nothing Then MsgBox "JSON解析失败,请检查格式是否正确!" Exit Sub End If ' 3. 写入顶层字段(@type、@self) rowNum = 1 colNum = 2 ' 从B列开始写入 ' 处理@type数组 ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = "顶层@type" colNum = colNum + 1 For Each key In jsonObj("@type") ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = key colNum = colNum + 1 Next key ' 处理@self rowNum = rowNum + 1 colNum = 2 ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = "顶层@self" colNum = colNum + 1 ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = jsonObj("@self") ' 4. 处理list数组里的嵌套对象 rowNum = rowNum + 2 ' 空一行分隔开 colNum = 2 If jsonObj.Exists("list") Then Set listCol = jsonObj("list") ' 先写入list对象的键作为表头 For Each key In listCol(1).Keys ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = key colNum = colNum + 1 Next key rowNum = rowNum + 1 ' 写入list对象的每个值 colNum = 2 For Each key In listCol(1).Keys ThisWorkbook.Sheets("Sheet1").Cells(rowNum, colNum).Value = listCol(1)(key) colNum = colNum + 1 Next key Else MsgBox "JSON中不存在list数组!" End If ' 自动调整列宽,让内容更美观 ThisWorkbook.Sheets("Sheet1").Columns.AutoFit MsgBox "JSON解析完成!" End Sub
代码小说明
JsonConverter.ParseJson是VBA-JSON的核心函数,负责把JSON字符串转成VBA能操作的对象- 顶层的
@type是数组,所以用循环遍历每个元素写入单元格 - 如果你的
list数组里有多个对象,只需要加一个循环遍历listCol里的每个元素,就能把所有对象的数据都拆出来 - 代码里默认用「Sheet1」,如果你的工作表名称不一样,记得把代码里的
Sheet1改成你的工作表名
运行代码
- 确保A1单元格已经有获取到的JSON内容
- 在VBA编辑器里找到这个宏,点击运行按钮,或者在Excel里通过「开发工具」→「宏」选择
ParseJSONToCells运行就行
内容的提问来源于stack exchange,提问作者Kai K




