Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 循环以计算范围内每个单元格的核心_Excel_Vba_Loops_Statistics - Fatal编程技术网

Excel 循环以计算范围内每个单元格的核心

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

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

知道我需要循环最后一个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
下面是一个仅包含一列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范围也会不同,然后列的数量会固定,这样就可以了,但问题是导入的日期和值的动态范围