Если ячейки строки 33 содержат проценты, то полученное значение является десятичным (25% -> 0,25). Поэтому, когда вы объединяете это значение для построения формулы, у вас возникает проблема с десятичным разделителем, равным .
или ,
. ,
является ключевым символом в формулах Excel. Таким образом, это нарушает формулу
Попробуйте решить ее, приведя ваши переменные mean1
и mean2
к строкам и заменив ,
на .
. Затем используйте эти строки для построения формулы
Dim sMean1, sMean2 as String
sMean1 = Replace(CStr(mean1), ",", ".")
sMean2 = Replace(CStr(mean2), ",", ".")
Range("o15").Formula = "=M15 * " & sMean1 & " + N15 * " & sMean2
Другие советы:
- Завершите формулу конкатенацией пустой строки
& ""
бесполезно - Вы можете использовать
For
l oop для написания формулы вместо Range("o15")
, Range("o16")
, ...
For i = 15 To 20
' Column "O" is the 15th column
Cells(i, 15).Formula = "=M" & i & " * " & sMean1 & " + N" & i & " * " & sMean2
Next i
-
Sheets(...).Select
позволяет пользователю увидеть изменения, которые вносит макрос, и это замедляет вашу программу. Вы должны предпочесть синтаксис With
Dim sMean1, sMean2 as String
sMean1 = Replace(CStr(mean1), ",", ".")
sMean2 = Replace(CStr(mean2), ",", ".")
With Sheets("EfficientFrontier")
For i = 15 To 20
' Column "O" is the 15th column
' Note the "." at the beginning of the line below so that the line means Sheets("EfficientFrontier").Cells(i, 15).Formula ...
.Cells(i, 15).Formula = "=M" & i & " * " & sMean1 & " + N" & i & " * " & sMean2
Next i
' ... other code related to this worksheet
End With