我获得了一个有效的VBA功能,但我不明白它是如何工作的,并且会感谢你的帮助,因为在编写方式中,微积分非常长(基本算术* 15 000行)
我的问题来自Double变量Qty_Level的定义,定义如下:
Dim Qty_Level(30) As Double
我从来没有见过像这样定义的变量,有一些像函数一样的括号。这是我的代码:
Sub cumul()
Dim i As Long
Dim j As Integer
Dim Qty_level(30) As Double
Dim Col_Niveau As Integer
Dim Col_Quantite As Integer
Dim Col_Resultat As Integer
i = InputBox("Veuillez indiquer le numéro de la première à analyser (numéro de ligne Excel)", "Ligne de départ")
Col_Niveau = InputBox("Veuillez indiquer le numéro de la colonne contenant les niveaux", "Niveaux")
Col_Quantite = InputBox("Veuillez indiquer le numéro de la colonne contenant les quantités", "Quantités")
Col_Resultat = InputBox("Veuillez indiquer le numéro de la colonne contenant les résultats", "Résultats")
Do While IsEmpty(Cells(i, Col_Niveau)) = False
If IsNumeric(Cells(i, Col_Quantite)) = True Then
Qty_level(Cells(i, Col_Niveau).Value) = Cells(i, Col_Quantite).Value
Cells(i, Col_Resultat).Value = 1
For j = 1 To Cells(i, Col_Niveau).Value
Cells(i, Col_Resultat).Value = Cells(i, Col_Resultat).Value * Qty_level(j)
Next j
End If
i = i + 1
Loop
End Sub
我不明白这是如何工作的,特别是For
循环如何与Double(j)
答案 0 :(得分:4)
当您定义带括号的数组及其中的值时,它会创建一个包含许多元素的数组。使用30作为最大元素值来标注它的大小意味着对于0到30之间的变量(因为数组默认以0开头),您可以在数组内部存储多达31个值。将其标注为double(根据MSDN)允许您存储Visual Basic中可用的最大和最小数字。
循环似乎是根据水平列中的数字从数量列中提取数量值,然后将每个存储的数量值相乘,并将其存储到结果单元格中。
因此,如果您的数量为2,4,6,5,当您处于3级时,结果单元格应显示48,级别4应显示240.从1循环到级别值允许它迭代整个双数组中存储的数量,仅包含数字。 levels列应该只包含1到30之间的数字,否则它将从qty_level数组中引出错误。
答案 1 :(得分:3)
使用Dim Qty_Level(30) As Double
,您将声明一个名为Qty_Level
的静态数组,其中包含31个Double(双精度浮点数)元素,下限为0,上限为30.(除非您写的) Option Base 1
位于模块的顶部,在这种情况下,您的下限为1,总共有30个元素,但我对此表示怀疑。)
我在你当前的循环中看到你正在j = 1
开始你的迭代,这意味着你永远不会真正访问元素0
。因此,最好明确指定下限:
Dim QtyLevel(1 To 30) As Double