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

Excel数组函数提取区域排序销售列表:解决同销售额匹配问题

用纯数组函数解决Excel区域销售报表中并列销售额的员工姓名提取问题

我明白你现在的需求:已经有一份按销售额降序排列的员工销售报表,想要给每个区域单独建工作表,自动提取对应区域的销售数据,尤其是解决同区域内多个员工销售额相同时,姓名匹配出错的问题,而且不想用辅助列,纯靠数组函数实现。

先回顾下你的场景:报表包含Location、Region、Username、Sales列,你已经能用数组函数提取指定区域的销售额,但提取对应姓名时,遇到并列销售额就会重复取第一个匹配项——这确实是MATCH函数的局限,它只会返回第一个符合条件的行号。

解决并列问题的纯数组函数方案

针对提取Username的需求,我们可以用SMALL函数配合行号筛选,再结合COUNTIF统计当前销售额的出现次数,来依次提取所有并列的姓名。假设你的源数据在Sheet1,区域工作表中$X$2是目标区域(比如North1),Y列是已经提取好的对应区域销售额,那么在Z列(提取Username)输入以下数组函数(输入后按Ctrl+Shift+Enter确认,Excel 365/2021可直接回车):

{=INDEX(Sheet1!I:I, SMALL(IF((Sheet1!K:K=$X$2)*(Sheet1!J:J=Y2), ROW(Sheet1!I:I)-ROW(Sheet1!$I$1)+1), COUNTIF($Y$2:Y2, Y2)))}

函数原理拆解:

  1. 条件筛选:(Sheet1!K:K=$X$2)*(Sheet1!J:J=Y2) 生成一个布尔数组,标记出源数据中同时满足「属于目标区域」和「销售额等于当前Y列值」的行。
  2. 行号转换:ROW(Sheet1!I:I)-ROW(Sheet1!$I$1)+1 把绝对行号转换成相对行号(从1开始),避免表头行的干扰。
  3. 提取第N个匹配项:COUNTIF($Y$2:Y2, Y2) 会统计当前销售额在Y列从第2行到当前行的出现次数(比如第一次出现是1,第二次是2),作为SMALL函数的第2参数,这样就能依次提取第1、第2...个符合条件的行号。
  4. 最终提取:用INDEX根据筛选出的行号,从源数据的Username列(I列)提取对应的姓名。

提取Location的类似函数

如果要提取对应的Location,只需要把函数中的Sheet1!I:I换成Sheet1!G:G即可:

{=INDEX(Sheet1!G:G, SMALL(IF((Sheet1!K:K=$X$2)*(Sheet1!J:J=Y2), ROW(Sheet1!G:G)-ROW(Sheet1!$G$1)+1), COUNTIF($Y$2:Y2, Y2)))}

验证你的预期结果

以你给出的North1和South2区域为例:

  • 对于North1区域的Sales=83,第一次出现时COUNTIF返回1,提取第一个匹配的E.Williams;
  • 对于South2区域的Sales=69,三次出现时COUNTIF分别返回1、2、3,依次提取Kay.Smith、Jay.Smith、L.Day,完全符合你的预期结果。

这个方案完全不需要辅助列,纯靠数组函数就解决了并列销售额的匹配问题,适合你每天自动生成区域报表的需求。

内容的提问来源于stack exchange,提问作者Golden Ratio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:42:14