在google docs中,我看到有人编写了一个脚本,编写了一个类似于:
的函数function createChargeList () {
return [['No.', 'Name', 'Cooldown', 'Power', 'Energy Loss', 'Type', 'Damage Window Start'],
[1.0, 'AerialAce', 240.0, 55.0, 33.0, 3.0, 190.0], [2.0, 'AirCutter', 270.0, 60.0, 50.0, 3.0, 180.0], [3.0, 'AncientPower', 350.0, 70.0, 33.0, 6.0, 285.0], [4.0, 'AquaJet', 260.0, 45.0, 33.0, 11.0, 170.0], [5.0, 'AquaTail', 190.0, 50.0, 33.0, 11.0, 120.0]
}
我正在尝试使用VBA自学编码,而且我无法理解上述代码之类的内容将如何转换为Excel的vba脚本。
答案 0 :(得分:2)
VBA没有你在javascript中找到的相同类型的数组文字构造
如果您想要单行分配,这就是您所拥有的:
Dim a
a = Array("a", "b", "c") '>>0-based 1-d array
a = ["a", "b"] '>> *1*-based 1-d array
a = [{"a", "b";"c","d"}] '>> *1*-based 2-d array
请注意,最后一个与您的示例不同(即不是数组数组)
答案 1 :(得分:2)
Google Apps脚本基于javascript。 VBA基于Visual Basic。硬编码是一种可能性,但你最终会得到一些时髦阵列,而你只限于VBA的笨重阵列方法(或缺乏阵列方法)。
Function createChargeList()
Dim var(5)
var(0) = [{"No.", "Name", "Cooldown", "Power", "Energy Loss", "Type", "Damage Window Start"}]
var(1) = [{1.0, "AerialAce", 240.0, 55.0, 33.0, 3.0, 190.0}]
var(2) = [{2.0, "AirCutter", 270.0, 60.0, 50.0, 3.0, 180.0}]
var(3) = [{3.0, "AncientPower", 350.0, 70.0, 33.0, 6.0, 285.0}]
var(4) = [{4.0, "AquaJet", 260.0, 45.0, 33.0, 11.0, 170.0}]
var(5) = [{5.0, "AquaTail", 190.0, 50.0, 33.0, 11.0, 120.0}]
createChargeList = var
End Function
或者你可以"硬编码"它是Dictionary
或Collection
或ArrayList
(ArrayList
s)。使用Dict或ArrayList会有一些好处,因为它们可以使用其他方法。字典示例,这不是我如何构建它,但它显示了如何做到这一点:
Function createChargeDict()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
d("No.") = Array(1#, 2#, 3#, 4#, 5#)
d("Name") = Split("AerialAce,AirCutter,AncientPower,AquaJet,AquaTail", ",")
'etc...
Set createChargeDict = d
End Function
但是,它很难被硬编码"如果它不仅仅是一个非常少量的数据,例如每个Tim的答案(或者同样通过我上面所做的事情),当然如果有任何更改你需要去编辑代码。
另一种选择是将数据保存为CSV或其他分隔文件,并在运行时将其读入array / dict / list / collection。
另一种更常见的方法 - 正如您在评论中所询问的那样 - 只需在工作表上创建一个表格(可选:隐藏工作表,以便用户不会搞砸它),指定一个Name
来表示表格的范围,然后您可以参考范围的.Value
属性,该属性将返回一个数组。
这样做的另一个好处是,您可以对单元格范围使用所有Worksheet
方法和函数(或作为工作表上的表/ ListObject
),然后您可以执行此操作在过滤,切片,查找元素,匹配/索引等方面更多,它也更容易更新。