Excel 循环以计算范围内每个单元格的核心
得到了一列2年历史波动率值(B),其长度每天都在变化。我正在导入过去2年的工作日,以便范围可以从一天更改到另一天。 我想计算每个单元格的zscore,并将其写入相关的C单元格(B7 vol、C7 zscore、B8 vol、C8 zscore等) 我在上一卷上写了代码,在最后一个C单元上写了代码,这很酷,但我现在尝试写一个循环,用每个zscore填充我的整个C列。 我在VBA方面的水平不是很高(我找到了代码,基本上对它进行了修改),找到了股票回报的循环,但我很难诚实地说 知道我需要循环最后一个vol选择和zscore写入,最容易使用的循环是什么,整个范围的选择不会改变 以下是我目前的代码:Excel 循环以计算范围内每个单元格的核心,excel,vba,loops,statistics,Excel,Vba,Loops,Statistics,得到了一列2年历史波动率值(B),其长度每天都在变化。我正在导入过去2年的工作日,以便范围可以从一天更改到另一天。 我想计算每个单元格的zscore,并将其写入相关的C单元格(B7 vol、C7 zscore、B8 vol、C8 zscore等) 我在上一卷上写了代码,在最后一个C单元上写了代码,这很酷,但我现在尝试写一个循环,用每个zscore填充我的整个C列。 我在VBA方面的水平不是很高(我找到了代码,基本上对它进行了修改),找到了股票回报的循环,但我很难诚实地说 知道我需要循环最后一个v
Private Sub Zscore1()
Dim sht As Worksheet
Dim Zscore As Double
Dim Lastvol As Double
Dim Vols As Range
Set sht = Worksheets("2Y Data Import")
Set StartCell = sht.Range("B7")
'Select Vols
sht.Range(StartCell, StartCell.End(xlDown)).Select
Set Vols = Selection
'Select Lastvol
sht.Range("B7").Select
Selection.End(xlDown).Select
Lastvol = Selection.Value
'Calculate Zscore & Write Result
sht.Range("B7").Select
Selection.End(xlDown).Offset(0, 1).Value = (Lastvol -
Application.WorksheetFunction.Average(Vols)) /
Application.WorksheetFunction.StDev_S(Vols)
End Sub
下面是一个仅包含一列VOL的示例的屏幕截图
A列日期,B列卷,C列我想用vba计算我的zscore,d列zscore用以下公式计算:
Function Zscore(Lastvol As Double, Vols As Range) As Double
Zscore = (Lastvol - Application.WorksheetFunction.Average(Vols)) /
Application.WorksheetFunction.StDev_S(Vols)
End Function
下一步将在294列上执行此操作。(日期在A中,294卷从B到KI,对应的zscores从KJ到VQ),但我想我能做到
非常感谢您的帮助我想您可能需要附加一个屏幕截图。我认为您不需要VBA。你应该能够做到这一点,只是公式。也就是说,如果你能提供你的工作表的屏幕截图(正如@SJR所提到的),这将有助于使事情变得更清晰。公平地说,我得到了200多列的vol,下一步将是在所有列上做一个循环,这就是我使用vba的原因。让我试着上传一张截图,我还是不太明白。在C语言中你需要做什么,而在D语言中你还没有做什么?如果你已经有了一个公式,为什么你需要VBA?很抱歉没有提供所有信息,我只导入工作日,否则我的平均值将与周天数不符(值将被结转,并且将存在两次)。因此,基本上,我在A(日期)和B(卷)中的数据范围每天都会不同,因此可能会出现.End(xlDown),因此我的zscore范围也会不同,然后列的数量会固定,这样就可以了,但问题是导入的日期和值的动态范围