【问题标题】:How can i write operation in vba?如何在 vba 中编写操作?
【发布时间】:2020-04-29 08:36:59
【问题描述】:

大家好,我正在用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""]"

感谢您的帮助。

【问题讨论】:

  • 您的操作有自我参考。你不能有 D2 = D2 - D1。您确定这些是您要执行的操作吗?
  • 您有理由先生,我的意思是 D2 = C2 -C1 是一个分两列的操作,我将编辑我的问题,谢谢您让我看到
  • ws.Range("D2:D3").Formula = "=C2-C1"?
  • 不客气。我建议一种解决问题的方法:在应该是的单元格中写下您想要的公式,然后开始录制宏,单击要修改公式的单元格,然后按Enter;停止录制并最终查看它录制的内容。您可以对公式进行逆向工程。这是一种非常好的学习方式。
  • 我觉得更像ws.range("D2:D3").FormulaR1C1 = "=C[-1]-R[-1]C[-1]"

标签: excel vba range operation


【解决方案1】:

有很多选择。请参阅下面的代码示例(假设我正确理解了您的要求)

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

【讨论】:

  • 是的,我用第一个选项做到了,我也认为这是一个快速且非常好的解决方案,谢谢您的回答
猜你喜欢
  • 2017-02-20
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
相关资源
最近更新 更多