【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

}

以下是运行效果:

点赞评论,可领取源码素材。

贵州省
浏览 4680
4
63
分享
63 +1
40
4 +1
全部评论 40
 
男人&迷茫
666
· 四川省
回复
 
徐露露
求源码素材
· 浙江省
回复
 
Li@刚
跟着老师学宏代码,都是日常需要的,很受益,感谢老师!
· 广东省
回复
 
黄金刚
跟着大佬学习宏代码,工作都简单了很多
· 江苏省
回复
 
dent
跟着大佬学习宏代码,工作都简单了很多
· 重庆
回复
 
周雪平
666
· 江西省
回复
 
西米露
666
· 山东省
回复
 
          .
· 山东省
回复
 
向晚
1
· 广东省
回复
 
tony
666
· 北京
回复
 
风云
感谢大佬
· 广东省
回复
 
WPS_1661656964
虽然有点看不懂,但是收藏了,慢慢嚼,慢慢消化。
· 广东省
回复
 
平凡
跟着大佬学习宏使用技巧,方便快捷
· 湖北省
回复
 
学会快乐
素材中入库必须用正数,出库必须用负数,这样这个宏才能得出想要的结果。
· 山东省
回复
 
Duan
不错不错,学习了
· 河南省
回复
 
鹏程万里
66666666666
· 广东省
回复
 
悠扬的旋律
字典累加
· 浙江省
回复
 
为雪白头!
谢谢大侠, 哪里可以领取源码素材?
· 浙江省
回复
 
Luke
Z 哥,教教我,我要学。
· 贵州省
回复
 
李辉斌
跟着老师学宏代码,很受益,感谢老师!
· 山西省
回复