解释移动平均线的VBA代码

时间:2013-04-19 08:03:18

标签: vba object set average

虽然我在写一段时间后粗略地理解了我的编码,但我已经忘记了如何解释它的前几部分(粗体)。

  1. 为什么'长期'?我的理解是,当变量只取较大的整数值时使用。由于共享值包含几个小数,我不确定为什么我选择了这个超过' double'

  2. 为什么/什么时候我们将变量调暗为'范围',为什么我们使用' set'什么?我对set函数目的的有限理解是将值赋给' object'变量。为什么'范围'一个'对象'

  3. 我已经完全忘记设置stockValue =范围(" B5:B"& lastStockprice)正在做什么,特别是&符号。

  4. 我不知道这里发生了什么:

  5. ReDim stockPrice(stockValue.Count - 1)     对于每个单元格in StockValue     stockPrice(cell.Row - 5)= cell.Value     下一步


    Sub MovingAverage()

    Dim CumulSum() As Double
    Dim MovingAv() As Double
    
    RowCountA = Range("StockPrice").Rows.Count
    RowCountB = Range("MovingAv").Rows.Count
    
    
    ReDim CumulSum(RowCountB)
    
    
    Dim stockPrice As Variant
    Dim lastStockprice **As Long**
        lastStockprice = Cells(Rows.Count, "B").End(xlUp).Row
    Dim stockValue **As Range**
        **Set stockValue = Range("B5:B" & lastStockprice)**
    
    **ReDim stockPrice(stockValue.Count - 1)
    For Each cell In stockValue
    stockPrice(cell.Row - 5) = cell.Value
    Next**
    
    
        For i = 0 To RowCountB - 1
            For k = 0 To 9
                CumulSum(i) = CumulSum(i) + stockPrice(i + k)
            Next k
        Next i
    
        For i = 1 To RowCountB
            Range("MovingAv").Cells(i) = CumulSum(i - 1) / 10
        Next i
    

    End Sub


    如果有人能为我解释粗体代码(我对VBA的基本知识延伸到矩阵乘法,基本函数和双数组),我们将不胜感激。 :)

1 个答案:

答案 0 :(得分:0)

Dim lastStockprice **As Long**
lastStockprice = Cells(Rows.Count, "B").End(xlUp).Row

这必须很长,因为我们正在尝试找到Col B中的最后一行。这是为了使代码与xl2007 +(有1048576行)兼容。关于如何获取最后一行,您可以看到link


Why is the 'range' an 'object'?

link。另请参阅this


  

我已经完全忘记了设置stockValue = Range(“B5:B”& lastStockprice)的行,特别是&符号。

如前所述,lastStockprice是最后一行,&用于连接,以便我们可以设置范围。假设最后一行是20,那么上面的代码可以写成

Set stockValue = Range("B5:B" & 20)
'OR
Set stockValue = Range("B5:B20")

  

我不知道这里发生了什么:ReDim stockPrice(stockValue.Count - 1)

代码尝试做的是动态增加数组的大小,以便它可以存储更多的值。 REDIM (Re-Dimension)我建议您看一下link


关注(来自评论)

  

我现在了解除了这一部分以外的全部内容:For EachValue stockPrice(cell.Row - 5)= cell.Value Next **

这段代码正在循环遍历范围stockvalue中的每个单元格,然后将单元格值存储在数组stockPrice

:假设我们有一个范围A1:B2

当我们说For each cell in Range("A1:B2")时,我们告诉代码循环遍历该范围内的每个单元格(A1A2B1B2