【问题标题】:Extending a Worksheetformula through VBA without writing only the value通过 VBA 扩展工作表公式而不只写入值
【发布时间】:2014-11-20 12:17:27
【问题描述】:

我的问题如下: 我有一个使用 VBA 填充的模板。我输入员工来去时的时间价值。在表格的底部,模板中有一个公式,用于总结工作时间。

一个典型的集合看起来像这样......

A1: 08:00
A2: 12:00
A3: 13:00
A4: 17:00
A5: =(A1-A2)+(A3-A4)

如果员工工作了一个额外的时间段,比如说从 18:00 到 22:00,那么我需要将其添加到模板中。我通过在 A4 下面插入两行并从上面的行复制格式来做到这一点。所有这些我都是用 VBA 完成的。所以工作表现在看起来像这样:

A1: 08:00
A2: 12:00
A3: 13:00
A4: 17:00
A5: 18:00
A6: 22:00
A7: =(A1-A2)+(A3-A4)

我的问题是我需要调整 A7 中的公式,它绝对需要是一个公式,因为在我创建它之后,员工应该能够在预填充的模板中输入值。

我不知道该怎么做。

非常感谢任何建议!谢谢!

【问题讨论】:

  • 我认为如果您使用两列作为输入,第三列作为公式,会容易得多 - 然后您可以在第三列中汇总公式。
  • 嗨,Rory,如果我能够更改格式,那会更容易,但格式是给定的,我无法更改任何内容。

标签: excel excel-formula vba


【解决方案1】:

因为您的数据在单个列中以对值的形式出现,您可以简单地创建适当的公式并将其放在列的底部:

Sub FormulaMaker()
    Dim N As Long, sForm As String, sLittle As String
    N = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 1 To N - 1 Step 2
        sLittle = "(A" & i & "-A" & i + 1 & ")"
        If sForm = "" Then
            sForm = "=" & sLittle
        Else
            sForm = sForm & "+" & sLittle
        End If
    Next i
    Cells(N + 1, "A").Formula = sForm
End Sub

您可能还想使用 (A2-A1) 而不是 (A1-A2)

【讨论】:

  • 当我开始考虑类似的解决方案时,我正在研究另一个主题。我什至开始实现它,但你的是一个更优雅的版本!非常感谢!
  • 这个答案还告诉我,我可以在使用 Cells() 时将列引用为“A”。酷!
猜你喜欢
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多