INDEX+MATCH动态统计案例
📊 案例背景
-
数据源表:
销售数据
- 字段列可能会变动(增加/删除/移动列) -
统计表:
统计报表
- 需要动态适应数据源结构变化
📁 数据准备
销售数据表 (A1:D6)
日期 | 销售员 | 产品类别 | 销售额 |
---|---|---|---|
2024-01-01 | 张三 | 手机 | 5000 |
2024-01-01 | 李四 | 电脑 | 8000 |
2024-01-02 | 张三 | 平板 | 3000 |
2024-01-02 | 王五 | 手机 | 4500 |
2024-01-03 | 李四 | 电脑 | 7500 |
统计报表 (F1:G6)
统计项目 | 结果 |
---|---|
总销售额 | |
张三销售额 | |
手机类总额 | |
平均销售额 | |
最大销售额 |
📝 动态公式实现
在统计报表
的G列输入以下公式:
1. 总销售额
=SUM(INDEX(销售数据!A:D,0,MATCH("销售额",销售数据!1:1,0)))
2. 张三销售额
=SUMIFS(
INDEX(销售数据!A:D,0,MATCH("销售额",销售数据!1:1,0)),
INDEX(销售数据!A:D,0,MATCH("销售员",销售数据!1:1,0)),
"张三"
)
3. 手机类总额
=SUMIFS(
INDEX(销售数据!A:D,0,MATCH("销售额",销售数据!1:1,0)),
INDEX(销售数据!A:D,0,MATCH("产品类别",销售数据!1:1,0)),
"手机"
)
4. 平均销售额
=AVERAGE(INDEX(销售数据!A:D,0,MATCH("销售额",销售数据!1:1,0)))
5. 最大销售额
=MAX(INDEX(销售数据!A:D,0,MATCH("销售额",销售数据!1:1,0)))
🔧 进阶:完全动态范围
如果数据行数也不固定,可以这样写:
=SUM(INDEX(销售数据!A:Z,0,MATCH("销售额",销售数据!1:1,0)))
或者定义名称DataRange
:
=销售数据!$A$1:INDEX(销售数据!$Z:$Z,COUNTA(销售数据!$A:$A),26)
然后使用:
=SUM(INDEX(DataRange,0,MATCH("销售额",销售数据!1:1,0)))
🧪 测试动态性
现在尝试以下操作,观察统计结果是否自动更新:
- 移动列:把"销售额"列从D列移动到E列
- 增加列:在"产品类别"后插入新列"数量"
- 删除列:删除"日期"列
- 增加数据:在最后添加新行数据
💡 公式解释
- MATCH("销售额",销售数据!1:1,0):找到"销售额"在第几列
- INDEX(销售数据!A:D,0,列号):返回整列数据
- SUM/SUMIFS/AVERAGE:对动态获取的列进行统计
🎯 最终效果
无论数据源的列如何变动,只要字段名称不变,统计公式都能自动找到正确的列并计算结果。