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

求助:如何在Excel宏中实现带动态范围的COUNTIFS公式

Excel宏实现动态范围的COUNTIFS公式

先简化你的原公式

你当前的公式重复了多次$E$2:$E$97,J2,这是冗余的——COUNTIFS的所有条件是同时满足,所以E列等于J2只需要写一次即可,简化后逻辑不变:

=COUNTIFS($C$2:$C$97,"<>33",$C$2:$C$97,"<>55",$C$2:$C$97,"<>10",$C$2:$C$97,"<>76",$E$2:$E$97,J2)

方法1:用VBA宏实现动态范围

以下是直接可用的VBA代码,会自动识别C列最后一行有数据的位置,生成动态范围的公式:

Sub AddDynamicCountIFS()
    Dim lastRow As Long
    Dim ws As Worksheet
    Dim formulaText As String
    
    ' 替换成你的报表工作表名称,比如"销售报表"
    Set ws = ThisWorkbook.Worksheets("报表")
    
    ' 获取C列最后一行有数据的行号(自动适配新增数据)
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
    
    ' 构建动态范围的公式
    formulaText = "=COUNTIFS($C$2:$C$" & lastRow & ",""<>33""," & _
                  "$C$2:$C$" & lastRow & ",""<>55""," & _
                  "$C$2:$C$" & lastRow & ",""<>10""," & _
                  "$C$2:$C$" & lastRow & ",""<>76""," & _
                  "$E$2:$E$" & lastRow & ",J2)"
    
    ' 将公式写入目标单元格,比如K2,可自行修改
    ws.Range("K2").Formula = formulaText
End Sub

使用步骤:

  1. 打开你的Excel文件,按Alt+F11打开VBA编辑器
  2. 右键左侧的工作簿名称,选择插入→模块
  3. 将上面的代码粘贴到模块窗口中
  4. 修改代码中的工作表名称("报表")和目标单元格("K2")为你实际需要的内容
  5. 回到Excel界面,按Alt+F8,选择AddDynamicCountIFS,点击运行即可

方法2:无需VBA的动态范围方案(更简单)

如果不想用宏,可将数据转为Excel表格,实现自动动态范围:

  1. 选中你的数据区域(包含表头),按Ctrl+T创建表格
  2. 假设表格名称为Table1,C列表头为状态,E列表头为类别,公式可写成:
=COUNTIFS(Table1[状态],"<>33",Table1[状态],"<>55",Table1[状态],"<>10",Table1[状态],"<>76",Table1[类别],J2)

后续新增数据行时,表格会自动扩展范围,公式无需手动修改。

内容的提问来源于stack exchange,提问作者Josh Camacho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:07:27