Excel 2010 VBA ячейка математика - PullRequest
1 голос
/ 30 марта 2012

Я хочу присвоить любое значение диапазону, который по существу был бы эквивалентен мне, набрав
"=A1*2" в ячейке B1 в главном окне листа и затем перетаскиваем эту функцию вниз 10 раз (так B2=A2*2
B3=A3*2
, ...,
Bn=An*2

With ThisWorkbook.Worksheets(sheetname)
  Dim temp As Range, temp2 As Range
  Set temp = Range(Cells(1, 1), Cells(10, 1))
  Set temp2 = Range(Cells(1, 2), Cells(10, 2))
  temp2.Value = temp.Value * 2
End With

Выдается ошибка, когда я пытаюсь присвоить значение переменной temp. У меня есть подозрение, что мой метод неверен, но я не могу его исправить.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

В одну строку просто

ThisWorkbook.Worksheets(sheetname).Range("B1:B10").FormulaR1C1 = "=RC[-1]*2"

1 голос
/ 30 марта 2012

Вот как я бы переписал ваш код, предполагая, что вам нужны значения (именно это вы указали в вопросе), а не формулы:

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 ячеек, но, безусловно, будет иметь значение, если у вас будет намного больше.

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