Как я могу написать операцию в VBA? - PullRequest
0 голосов
/ 28 апреля 2020

Привет всем, я делаю код макроса с помощью vba, и я хотел бы спросить кое-что, как я могу написать следующую операцию с помощью макроса vba.

Предположим, у вас есть лист с двумя столбцами, один из которых называется " C "и другие" D "и каждая ячейка из этого столбца имеет следующую операцию:

ws.Range("D1") = 0
ws.Range("D2") = ws.Range(C2)- ws.Range(C1)
ws.Range("D3") = ws.Range(C3)- ws.Range(C2)
... 
ws.Range(Di+1) = ws.Range(Ci+1) -ws.Range(Ci)

Как мне написать в синтаксисе vba такую ​​операцию, как:

ws.Range("D:D").FormulaR1C1 = "= R[i+1]C[""C""] - R[i]C[""C""]"

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 29 апреля 2020

Есть много вариантов. Смотрите пример кода ниже (если я правильно понял, что вы после)

Sub FillCells()

Dim RangeToFill As Range
Dim CurCell As Range
Dim wks As Worksheet

Set wks = ActiveSheet
Set RangeToFill = wks.Range("D2:D8") ''' define the range as required or even better - use named ranges in the so

'''' Option 1  
''' youcan use R1C1 reference style for the whole range - very fast and nice solution
RangeToFill.FormulaR1C1 = "=RC[1]-R[-1]C[1]"

'''' Option 2    
''' or you can use .Offset property of the range object. Note that .Address(0,0) has two zeros for the cell address not to be frozen,
''' i.e. not =$E$2 - $E$1 but =E2-E1
''' This also works but could be slower on big ranges and formula looks pretty ugly to my taste
For Each CurCell In RangeToFill.Cells
    CurCell.Formula = "=" & CurCell.Offset(0, 1).Address(0, 0) & "-" & CurCell.Offset(-1, 1).Address(0, 0)
Next CurCell

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