Есть ли способ сократить процесс с помощью a для l oop в формуле двух дисперсии? - PullRequest
0 голосов
/ 25 апреля 2020

Я новичок в VBA, и мне нужен кто-то, кто поможет мне с l oop, потому что моя программа становится слишком повторяющейся. Я написал код, который будет рассчитывать дисперсию двух акций. Кажется, код работает нормально. Мне просто нужно для l oop для последней части кода, где формула будет вычислена и выполнена. Диапазон от M15 до M25 содержит проценты от 0 до 100, а диапазон от N15 до N25 содержит проценты от 100 до 0, и иногда этот код не работает на компьютерах, отличных от Engli sh.

Это мой код ниже. Любая помощь будет оценена. Заранее спасибо

    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 & ""

1 Ответ

1 голос
/ 25 апреля 2020

Глядя на последнюю часть вашего кода, переменная часть каждой строки - это число, которое идет от 15 до 25. Следовательно, для l oop, например, это может уменьшить ваши строки кода:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...