You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Excel ListObject中使用VBA WorksheetFunction SumIfs返回0的问题

解决Excel ListObjects中SumIfs返回0的问题

核心问题出在DataBodyRange的行索引使用错误:VBA里ListObject的DataBodyRange单元格索引是从1开始的,你代码里写的DataBodyRange(0, 列号)会指向无效区域,导致SumIfs根本找不到匹配的数据源,自然返回0。

修正后的代码如下:

Sub example()
    Set Tabela = ActiveSheet.ListObjects("Tb_ConsolidaPeriodo")
    TabLin = Tabela.ListRows.Count
    Dim var As Variant

    For Lin = 1 To TabLin
        ' 把所有DataBodyRange的行索引从0改成1
        var = Application.WorksheetFunction.SumIfs( _
              Tabela.DataBodyRange(1, 15), _
              Tabela.DataBodyRange(1, 2), Tabela.DataBodyRange(Lin, 2), _
              Tabela.DataBodyRange(1, 11), Tabela.DataBodyRange(Lin, 11))
        ' 直接赋值Value,比FormulaR1C1更合适
        Tabela.DataBodyRange(Lin, 16).Value = var
    Next Lin
End Sub

额外优化建议:

  • 用ListColumns的名称代替硬编码的列号,比如Tabela.ListColumns("你的列名").DataBodyRange,这样代码可读性更高,后续表格列顺序变动也不会出错
  • 如果担心没有匹配项导致SumIfs报错,可以改用Application.SumIfs(去掉WorksheetFunction),这样没有匹配时会返回错误值,你可以用IsError判断后处理

内容的提问来源于stack exchange,提问作者Andrea Caixeta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:08:12