Arrays 使用VBA将Excel数据导出到Json动态数组
我在excel中有一些数据,我正在使用VBA循环使用这些数据,以便创建一个嵌套的JSON字符串 第F列在第1、2和3行中分别包含值a、b和c 我正在使用以下代码:Arrays 使用VBA将Excel数据导出到Json动态数组,arrays,json,excel,vba,dynamic,Arrays,Json,Excel,Vba,Dynamic,我在excel中有一些数据,我正在使用VBA循环使用这些数据,以便创建一个嵌套的JSON字符串 第F列在第1、2和3行中分别包含值a、b和c 我正在使用以下代码: Public Sub Excel_to_json() Dim mainContainer As New Dictionary, rulesArray As New Collection, rulesContainer As New Dictionary Dim excelRange As Range Set excelRang
Public Sub Excel_to_json()
Dim mainContainer As New Dictionary, rulesArray As New Collection, rulesContainer As New Dictionary
Dim excelRange As Range
Set excelRange = Cells(1, 1).CurrentRegion
mainContainer("ColumnA") = Cells(1, 1)
mainContainer("ColumnB") = Cells(1, 2)
mainContainer("ColumnC") = Cells(1, 3)
mainContainer("ColumnD") = Cells(1, 4)
rulesContainer("ColumnE") = Cells(1, 5)
rulesContainer("ColumnF") = Array(Cells(1, 6), Cells(2, 6), Cells(3, 6))
rulesContainer("ColumnG") = Cells(1, 7)
rulesContainer("ColumnH") = Cells(1, 8)
rulesContainer("ColumnI") = Cells(1, 9)
rulesContainer("ColumnJ") = Cells(1, 10)
rulesContainer("ColumnK") = Cells(1, 11)
rulesContainer("ColumnL") = Cells(1, 12)
rulesContainer("ColumnM") = Cells(1, 13)
rulesContainer("ColumnN") = Cells(1, 14)
rulesArray.Add rulesContainer
mainContainer.Add "rules", rulesArray
Debug.Print ConvertToJson(mainContainer, Whitespace:=2)
End Sub
我得到了我想要的结果,即:
{
"ColumnA": 1,
"ColumnB": 2,
"ColumnC": 3,
"ColumnD": 4,
"rules": [
{
"ColumnE": 5,
"ColumnF": [
"a",
"b",
"c"
],
"ColumnG": 7,
"ColumnH": 8,
"ColumnI": 9,
"ColumnJ": 10,
"ColumnK": 11,
"ColumnL": 12,
"ColumnM": 13,
"ColumnN": 14
}
]
}
我的问题是如何替换以下代码:
rulescocontainer(“ColumnF”)=数组(单元格(1,6)、单元格(2,6)、单元格(3,6))
以便加载一个动态数组,该数组中可能包含不同数量的对象?换句话说,由于数组中可能有数量可变的对象(不仅仅是[“a”、“b”、“c”),是否可以加载数组,使其成为动态的[“?”、“?”、“?”、“?”、“?”、“?”、“?”?”?如何使用VBA加载这样的数组?感谢您的帮助。诀窍是使用工作表函数.Transpose()
将范围值从只有一列的二维数组转换为一维数组
数组(单元格(1,6)、单元格(2,6)、单元格(3,6))
转换为范围(“f1:f3”)。值
因此您可以根据数据查看使用调整大小
,因此规则容器(“ColumnF”)=范围(“f1:f”和lngrowth)。值可能是一个非常理想的值!非常有效的解决方案。
rulesContainer("ColumnF") = WorksheetFunction.Transpose(Range("F1", Cells(Rows.Count, "F").End(xlUp)).Value)