1

虽然我在写它的时候大致了解了我的编码,但我已经忘记了如何解释它的前几部分(粗体)。

  1. 为什么“长”?我的理解是,当变量只取更大的整数值时使用它。由于份额值包含几个小数,我不知道为什么我选择这个而不是“双倍”。

  2. 为什么/何时我们将变量调暗为“范围”,为什么我们要使用“设置”?我对 set 函数用途的有限理解是将值分配给“对象”变量。为什么“范围”是“对象”?

  3. 我完全忘记了Set stockValue = Range("B5:B" & lastStockprice) 行在做什么,尤其是 & 符号。

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

ReDim stockPrice(stockValue.Count - 1) For Each cell In stockValue stockPrice(cell.Row - 5) = cell.Value Next


子移动平均()

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

结束子


如果有人可以为我解释粗体代码(我对 VBA 有非常基本的了解,可以扩展到矩阵乘法、基本函数和双数组),我将不胜感激。:)

4

1 回答 1

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

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


Why is the 'range' an 'object'?

请参阅此链接。也看到这个


我完全忘记了 Set 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)我建议查看此链接


跟进(来自评论)

除了这一部分,我现在了解所有内容: For Each cell In stockValue stockPrice(cell.Row - 5) = cell.Value Next**

那段代码正在做的是遍历范围内的每个单元格,stockvalue然后将单元格值存储在数组中stockPrice

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

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

于 2013-04-19T08:14:35.300 回答