【问题标题】:Interpreting VBA code for moving averages解释移动平均线的 VBA 代码
【发布时间】:2013-04-19 08:03:17
【问题描述】:

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

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

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

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

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

重新调整 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

结束子


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

【问题讨论】:

  • 这就是为什么你应该总是在你的代码中添加描述性 cmets :)

标签: vba object set average


【解决方案1】:
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


我完全忘记了 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) 我会推荐看看这个link


跟进(来自 cmets)

我现在明白了,除了这部分:For Each cell In stockValue stockPrice(cell.Row - 5) = cell.Value Next**

这段代码的作用是遍历stockvalue范围内的每个单元格,然后将单元格值存储在数组stockPrice

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

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

【讨论】:

  • 感谢您的帮助。除了这一部分,我现在都明白了:--- For Each cell In stockValue stockPrice(cell.Row - 5) = cell.Value Next
  • 'stockPrice(cell.Row - 5) = cell.Value' 是什么意思 - 这是否表示它正在将存在于每个 stockValue 'cell' 中的 'value' 放入每个行股票价格? “-5”是什么意思?由于只有一列,cell.Value 和 cell.row 不会返回相同的内容吗?谢谢。
  • stockPrice(cell.Row - 5) = cell.Value 表示来自cell 的值将保存在数组stockPrice 中。 cell.Row - 5 表示如果 cell.row 为 15,则将值存储在 stockPrice(15-5) 中,即 stockPrice(10) 将数组视为具有不同部分的橱柜来存放您的衣服。我会认真建议您通过link
  • 现在一切都说得通了。非常感谢!
猜你喜欢
  • 2017-09-01
  • 2013-12-22
  • 2022-01-26
  • 2011-06-29
  • 2019-04-24
  • 2012-05-24
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多