ExcelVBA结合表格函数计算数据

不知大家有没有遇到过这样的需求,有些表格数据计算,如果使用纯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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值