自定义函数

CKLARGEGROUPBY · 大范围分组汇总

更新于 1 小时前 · 阅读 1

CKLARGEGROUPBY · 大范围分组汇总


CKLARGEGROUPBY · 大范围分组汇总

【模块定位】CKLARGEGROUPBY 先按维度聚合求和、再按大小排名,返回指定名次的数据 —— 相当于「带条件的 SUMIFS + 排名」。
功能路径:【报表管理】-【报表平台】- 工作表展示区(单元格公式栏输入)
界面类型:单元格级公式(聚合 + 排名)
前置条件:① 已明确维度列与求和列;② 数据范围已确定;③ 知道要取第几名。

一、公式长什么样

公式就是「函数名 + 括号里的一串位置」,从左到右依次是:

=CKLARGEGROUPBY(维度区域, 求和区域, 第几大, 返回类型, [条件区域1, 条件1, 条件2, …])

括号里每个位置分别管什么,先看一眼:

位置叫什么这一格放什么
第 1 个维度区域用来分组的那一列(例:客商)
第 2 个求和区域要加总的那一列(例:余额)
第 3 个第几大要第几名;写 1 就是第 1 名
第 4 个返回类型0=返回金额、1=返回名称
第 5 个起条件区域 / 条件可选,成对出现;加了就只统计命中的那些行

一句话理解整条公式:拿第 1 列分组 → 对第 2 列求和 → 排好名次 → 按第 3 个位置取第几名 → 按第 4 个位置决定给你名字还是金额。

图 1 示例表长这样:左边是维度列(客商)、右边是求和列(余额),公式写在结果区

图 1 示例表长这样:左边是维度列(客商)、右边是求和列(余额),公式写在结果区

二、每个位置怎么填

位置含义填什么示例取数范围
维度区域按谁来分组那一列的单元格区域$D$9:$D$29取 D 列第 9~29 行(客商)
求和区域加总哪一个数那一列的单元格区域$E$9:$E$29取 E 列第 9~29 行(余额)
第几大要第几名数字;做整列前 N 名用 ROW(A1) 下拉1 → 第 1 名—(决定取第几名)
返回类型给你名字还是金额0 或 11 → 返回客商名—
条件区域 / 条件只统计其中的一部分条件列的区域 + 条件值,成对出现$F$9:$F$29, "单项计提"F 列第 9~29 行等于「单项计提」的行

⚠️ 两个区域的行号要对齐:维度、求和、条件三段的起止行必须落在同一批数据上(示例都是第 9~29 行),否则结果会整体错位。

💡 先聚合、后排名:同一个客商出现多次会先相加(A 公司 100 + A 公司 80 = 180),再拿这个合计数去和别的客商比大小。

三、注意事项

  • 返回类型最容易填错:0 是金额、1 是名称,不填默认 0 —— 想显示客商名却出来一串数字,多半是这里。
  • 按「求和后」的大小排序:源数据一改,名次和结果都会跟着变。
  • 维度列 / 求和列一旦选错,排名会整体偏移,先确认口径再写公式。
  • 条件区域与条件必须成对,缺一不可;不加条件就按全部数据聚合。
  • 行号不要写死:数据增加时把区域一起放大($D$9:$D$29 → $D$9:$D$40),否则新增行不进统计。

四、场景实操

场景:想知道「单项计提」口径下,前 5 大客商是谁、各多少钱。

步做什么公式 / 取值
1先确认三列的位置:维度列=D 列客商、求和列=E 列余额、条件列=F 列计提方式—
2在结果区第一格取名称(返回类型 1)=CKLARGEGROUPBY($D$9:$D$29, $E$9:$E$29, ROW(A1), 1)
3旁边一格取金额(返回类型 0)=CKLARGEGROUPBY($D$9:$D$29, $E$9:$E$29, ROW(A1), 0)
4两列一起向下填充 5 行自动变成第 1~5 名
5只想看「单项计提」,把条件接在最后,两列都加上…, ROW(A1), 1, $F$9:$F$29, "单项计提")

这条公式的取数范围:把 D 列第 9~29 行(客商)和 E 列第 9~29 行(余额)成组读进来,只保留 F 列第 9~29 行等于「单项计提」的行;按客商汇总余额、降序排名,返回第 N 名的名称与金额。

图 2 实操结果:左侧是维度/求和/条件三列,右侧用 ROW(A1) 做序号,向下填充即得 1、2、3…

图 2 实操结果:左侧是维度/求和/条件三列,右侧用 ROW(A1) 做序号,向下填充即得 1、2、3…


💬 评论(0)
还没有评论,来抢沙发~