虽然我在写一段时间后粗略地理解了我的编码,但我已经忘记了如何解释它的前几部分(粗体)。
为什么'长期'?我的理解是,当变量只取较大的整数值时使用。由于共享值包含几个小数,我不确定为什么我选择了这个超过' double'
为什么/什么时候我们将变量调暗为'范围',为什么我们使用' set'什么?我对set函数目的的有限理解是将值赋给' object'变量。为什么'范围'一个'对象'
我已经完全忘记设置stockValue =范围(" B5:B"& lastStockprice)正在做什么,特别是&符号。
我不知道这里发生了什么:
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的基本知识延伸到矩阵乘法,基本函数和双数组),我们将不胜感激。 :)
答案 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'?
我已经完全忘记了设置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")
时,我们告诉代码循环遍历该范围内的每个单元格(A1
,A2
,B1
,B2
)