Вот как я бы переписал ваш код, предполагая, что вам нужны значения (именно это вы указали в вопросе), а не формулы:
Dim temp As Variant
Dim nRows As Long
Dim iRow As Long
Dim sheetname As String
sheetname = "Sheet1" 'or whatever
nRows = 10
With ThisWorkbook.Worksheets(sheetname)
temp = .Range(.Cells(1, 1), .Cells(nRows, 1)) 'Load range to a variant array
For iRow = 1 To nRows 'Loop through array to multiply elements by 2
temp(iRow, 1) = temp(iRow, 1) * 2
Next iRow
.Range(.Cells(1, 2), .Cells(nRows, 2)) = temp 'Write array back to range
End With
Обратите внимание, что вы должны сказать .Range
и .Cells
с точкой .
. Если вы этого не сделаете, вы не квалифицируете свойства правильно; они не будут ссылаться на ThisWorkbook.Worksheets(sheetname)
, но на тот лист, который окажется активным в данный момент.
Второй момент заключается в том, что вы не можете умножить целый массив сразу (или весь диапазон, если на то пошло). Вы должны пройтись по элементам и умножить их индивидуально. Я выбираю загрузку диапазона в массив и перебираю его, потому что выполнение этого на несколько порядков быстрее, чем прохождение через ячейки диапазона. Это может не иметь большого значения, если у вас есть только 10 ячеек, но, безусловно, будет иметь значение, если у вас будет намного больше.