不知大家有没有遇到过这样的需求,有些表格数据计算,如果使用纯vba计算会导致程序运行效率很低,不能动态更新;
为此我想了一个办法,将表格函数藏在字段名处,然后通过vba填充需要计算的单元格(利用函数的相对引用);
那怎么将函数藏在标题列呢?
利用row函数加if判断即可实现
=IF(ROW()=1,"开票金额¥**",IF(B1="","",SUMIFS(开票明细!M:M,开票明细!B:B,XL!$E$3,开票明细!C:C,B1,开票明细!N:N,"已开票")))
在利用vba程序实现
Sub test00003()
Dim qh_i01 As Long
Application.ScreenUpdating = False
qh_sheet_array = Array("自渠宝_SaaS软件上线", _
"自渠宝_SaaS软件租赁服务", _
"自渠宝_营销推广包", _
"全网宝_智投CRM", _
"全网宝_智投包", _
"全网宝_官网增值品牌广告")
qh_sheet_array_l = qh_len_arr(qh_sheet_array)
For qh_i = 0 To qh_sheet_array_l - 1
'获取表名
qh_sheet_name = qh_sheet_array(qh_i)
With Sheets(qh_sheet_name)
qh_last_row = .Range("B" & 1000000).End(xlUp).Row
qh_column_last = .Range("A1").End(xlToRight).Column
For qh_i01 = 1 To qh_column_last
'利用这个数据判断单元格是否有函数HasFormula,有函数则将单元格填充藏在字段名的函数
If .Cells(1, qh_i01).HasFormula Then
qh_colunm_A = GetColumnLetter(qh_i01)
.Range(qh_colunm_A & "1").Copy
.Range(qh_colunm_A & "2:" & qh_colunm_A & qh_last_row).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If
Next
End With
Next
Application.ScreenUpdating = True
End Sub