首页 > 解决方案 > 循环计算范围内每个单元格的 Zscore

问题描述

得到一列 2 年历史波动率值 (B),其长度每天都在变化。我正在导入过去 2 年的工作日,以便范围可以从一天更改为另一天。我想计算每个单元格的 zscore 并将其写入相关的 C 单元格(B7 vol、C7 zscore、B8 vol、C8 zscore 等)我在最后一个 vol 上编写了代码并将其写入最后一个 C 单元很酷,但我现在正在尝试编写一个循环并用每个 zscore 填充我的整个 C 列。我在 VBA 中的水平不是很高(我基本上找到了代码并对其进行了修改),找到了股票 LN 返回的循环,但我很难说实话。

什么是最容易使用的循环,知道我需要循环最后一个 vol 选择和 zscore 写入,整个范围的选择不会改变。

到目前为止,这是我的代码:

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

这是一个示例的屏幕截图,其中只有一列 vols。

截屏

A列日期,B列vols,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 中的日期,从 B 到 KI 的 294 卷,从 KJ 到 VQ 的相应 zscores)但我想我可以做到。

非常感谢您的帮助

标签: excelvbaloopsstatistics

解决方案


推荐阅读