在两种股票方差公式中是否可以通过for循环来缩短过程?

问题描述 投票:0回答:1

我是VBA的新手,我需要有人帮助我进行for循环,因为我的程序变得过于重复。我写了一个代码,可以计算两只股票的方差。该代码似乎工作正常。我只需要在代码的最后一部分中使用for loop即可计算和执行公式。 M15到M25的范围包含从0到100的百分比,N15到N25的范围包含从100到0的百分比,有时此代码在非英语计算机上不起作用。

这是下面的代码。任何帮助将不胜感激。在此先感谢

    Dim var1 As String
    Dim var2 As String
    Dim covarval As String
    Dim covar1 As Range
    Dim covar2 As Range

    If ComboBox1 = "Royal Dutch Shell" Then var1 = Range("B35")
    If ComboBox1 = "Exxon Mobil Corp" Then var1 = Range("C35")
    If ComboBox2 = "Biogen Inc" Then var2 = Range("F35")
    If ComboBox2 = "Johnson & Johnson" Then var2 = Range("G35")

    If ComboBox1 = "Royal Dutch Shell" Then
    Set covar1 = Range("rds")

    ElseIf ComboBox1 = "Exxon Mobil Corp" Then
    Set covar1 = Range("exon")
End If
    If ComboBox2 = "Biogen Inc" Then
    Set covar2 = Range("bign")

    ElseIf ComboBox2 = "Johnson & Johnson" Then
    Set covar2 = Range("jhnsn")
End If

Range("B39").Formula = "=COVAR(" & covar1.Address & "," & covar2.Address & ")"
covarval = Range("B39").Value

Sheets("EfficientFrontier").Select

   "I need **for loop** for this part"

Range("p15").Formula = "=M15^2*" & var1 & "+N15^2*" & var2 & "+2*M15*N15* " & covarval & ""
Range("p16").Formula = "=M16^2*" & var1 & "+N16^2*" & var2 & "+2*M16*N16* " & covarval & ""
Range("p17").Formula = "=M17^2*" & var1 & "+N17^2*" & var2 & "+2*M17*N17* " & covarval & ""
Range("p18").Formula = "=M18^2*" & var1 & "+N18^2*" & var2 & "+2*M18*N18* " & covarval & ""
Range("p19").Formula = "=M19^2*" & var1 & "+N19^2*" & var2 & "+2*M19*N19* " & covarval & ""
Range("p20").Formula = "=M20^2*" & var1 & "+N20^2*" & var2 & "+2*M20*N20* " & covarval & ""
Range("p21").Formula = "=M21^2*" & var1 & "+N21^2*" & var2 & "+2*M21*N21* " & covarval & ""
Range("p22").Formula = "=M22^2*" & var1 & "+N22^2*" & var2 & "+2*M22*N22* " & covarval & ""
Range("p23").Formula = "=M23^2*" & var1 & "+N23^2*" & var2 & "+2*M23*N23* " & covarval & ""
Range("p24").Formula = "=M24^2*" & var1 & "+N24^2*" & var2 & "+2*M24*N24* " & covarval & ""
Range("p25").Formula = "=M25^2*" & var1 & "+N25^2*" & var2 & "+2*M25*N25* " & covarval & ""
excel vba for-loop
1个回答
1
投票

查看代码的最后一部分,每行的可变部分是一个从15到25的数字。因此,这样的For循环可以减少代码行:

For i = 15 To 25
   Range("P" & i).Formula = "=M" & i & "^2*" & var1 & "+N" & i & "^2*" & var2 & "+2*M" & i & "*N" & i & "* " & covarval & ""
Next

如您所见,数字已被i代替,从15到25。

© www.soinside.com 2019 - 2024. All rights reserved.