VBA Excel - 作为函数的变量“Double”

时间:2013-10-14 12:41:09

标签: excel vba variables excel-vba double

我获得了一个有效的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)

一起使用

2 个答案:

答案 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