实例需求:现有如下审计数据,有些项目为汇总费用,现在需要填充如下公式,由于分项的个数不确定,因此无法使用固定模板,也就是说每月报表的公式都不相同,只能使用VBA动态填充。
单元格 | 公式 | 费用汇总 |
---|---|---|
C6 | =C7+C8+C9 | 过路停车费+维修费+保险费 |
C12 | =C13 | 其他 |
示例代码如下。
Sub Demo()
Dim rng As Range, r, lst
lst = Cells(ActiveSheet.Rows.Count, 1).End(xlDown).Row
For r = 4 To lst
If r < lst Then
sum_row = r
Set rng = Nothing
Do While Left(Trim(Cells(r + 1, 1)), 1) = "-"
If rng Is Nothing Then
Set rng = Cells(r + 1, 3)
Else
Set rng = Union(rng, Cells(r + 1, 3))
End If
r = r + 1
Loop
If Not rng Is Nothing Then Cells(sum_row, 3).Formula = "=sum(" & rng.Address & ")"
End If
Next
Set rng = Nothing
End Sub
【代码解析】
第3行代码获取数据表的最大行号。
第4行代码循环处理每行数据。
第8行代码判断项目名称是否开头符号为减号。如果满足条件,则说明是子费用项目,第9~13行代码将其合并保存在Range变量rng中。
第16行代码判断变量rng是否为空,如果不为空,则说明找到了相关的子费用项目,然后使用Formula属性为单元格设置公式,其中的rng.Address
用于获取子费用项目区域的单元格引用地址。
运行代码,结果如下图所示。