【WPS应用案例】JS宏对明细数据分类汇总,统计库存
创作者俱乐部成员
案例:以下是一张出入库记录表,现在需统计每个物品的库存,并显示在G4单元格开始的区域。
通常这样的问题,我们一般是将名称粘贴到G列,去重,再在H列设置SUMIF函数,对数量进行条件求和,从而得到库存。
但现在需要将这个表做成一个模板,拿给小白使用,他不会去重,也不会设置公式,只会简单的数据录入,那就需要用到JS宏来解决了。
在WPS宏编辑器中输入以下代码:
以下是源代码:
function 分类汇总(){
dic={}
ar=Range("a3").CurrentRegion.Value2
for(i=1;i<=ar.length-1;i++){
t=ar[i][0]
dic[t]=dic[t] ? dic[t]+ar[i][2] : ar[i][2]
}
k = Object.entries(dic)
Range('g4').Resize(k.length,2).Value2=k
}
以下是逐行注释:
// 定义一个名为“分类汇总”的函数
function 分类汇总(){
// 创建一个空字典(也称为对象),命名为“dic”
dic={}
// 从“A3”单元格开始,获取其所在的连续区域的所有值(这将是一个二维数组),并赋值给数组“ar”
ar=Range("a3").CurrentRegion.Value2
// 开始一个for循环,从索引1开始,到数组“ar”的长度减1结束
for(i=1;i<=ar.length-1;i++){
// 从当前行的第一个单元格获取值,赋值给变量“t”
t=ar[i][0]
// 检查“dic”字典是否包含键“t”,如果包含,则将“ar[i][2]”的值加到已有的值上,如果不包含,则直接将“ar[i][2]”的值作为新的值存入字典
dic[t]=dic[t] ? dic[t]+ar[i][2] : ar[i][2]
}
// 使用Object.entries方法将字典“dic”转化为一个二维数组,每个元素是一个包含两个元素的数组(键和值),赋值给数组“k”
k = Object.entries(dic)
// 将数组“k”的值赋给从“G4”单元格开始扩展“k”行2列的区域
Range('g4').Resize(k.length,2).Value2=k
}
以下是运行效果:
点赞评论,可领取源码素材。