出入库统计还在手动算?这个WPS宏让你一键搞定!
出入库统计还在手动算?这个WPS宏让你一键搞定!
是不是也经历过这样的场景:面对一整年的出入库记录,需要按产品名称汇总入库、出库,最后算出库存。手动筛选、复制、写公式、下拉填充,忙活半小时,结果发现漏了一行数据,又要重来一遍……
为什么传统方法又慢又容易出错?
我们常见的数据表长这样:A列是产品名称,B列是出入库类型,C列是数量。目标是要生成每个产品的入库合计、出库合计和最终库存。
大多数人会这么做:复制A列到新位置→删除重复项→用SUMIFS分别统计入库和出库→再用公式算库存→最后复制粘贴成数值。步骤多不说,一旦数据量上千,Excel公式卡顿,表格半天没响应。
这种低效操作,不仅浪费时间,还容易在复制粘贴中引入错误。
WPS JS宏代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 function 删除重复项分类汇总() { // 获取 A 列数据最后行号(从第4行开始) var lastRow = Cells(Rows.Count, 'a').End(3).Row; // 读取原始数据到数组 var names = []; var types = []; var quantities = []; for (var i = 4; i <= lastRow; i++) { names.push(Range("A" + i).Value2); types.push(Range("B" + i).Value2); quantities.push(Range("C" + i).Value2); } // 获取去重后的名称列表 var uniqueNames = []; var nameMap = {}; for (var j = 0; j < names.length; j++) { var name = names[j]; if (!nameMap[name]) { nameMap[name] = true; uniqueNames.push(name); } } // 计算每个名称的入库合计、出库合计(出库取负,保持与原公式一致) var results = []; for (var k = 0; k < uniqueNames.length; k++) { var currentName = uniqueNames[k]; var inSum = 0; var outSum = 0; for (var m = 0; m < names.length; m++) { if (names[m] === currentName) { if (types[m] === "入库") { inSum += quantities[m]; } else if (types[m] === "出库") { outSum += quantities[m]; // 出库数量可能为负数 } } } var outPositive = -outSum; // 转换为正数(与原公式 -SUMIFS 一致) var stock = inSum - outPositive; // 库存 = 入库 - 出库(正数) results.push({ name: currentName, in: inSum, out: outPositive, stock: stock }); } // 将结果写入 G 列开始的单元格 var startRow = 4; for (var n = 0; n < results.length; n++) { Range("G" + (startRow + n)).Value2 = results[n].name; Range("H" + (startRow + n)).Value2 = results[n].in; Range("I" + (startRow + n)).Value2 = results[n].out; Range("J" + (startRow + n)).Value2 = results[n].stock; }}
这个宏如何帮你解放双手?
这段WPS JS宏的核心逻辑很巧妙:它直接在内存里遍历原始数据,用JavaScript的对象特性累加每个产品的入库和出库,最后把计算结果一次性写入单元格。

整个过程完全绕开了Excel公式,这意味着:
-
• 速度飞快:上千行数据5秒内完成 -
• 不卡顿:没有公式堆积,文件大小不变 -
• 结果直接是数值:无需二次粘贴,即算即用
运行后,G列自动生成去重后的产品名称,H列是入库总数,I列是出库总数(显示为正数),J列是最终库存。从原始数据到汇总结果,一键到位。
本文示例文件已上传云盘,关注公众号后私信“出入库汇总”即可下载,包含完整代码和测试数据,拿回去改改就能用。
由于公众号平台更改了推送规则,为确保您能及时收到Excel每日一学的原创分享,请记得关注公众号并设为星标⭐,也欢迎您转发给身边需要的朋友,或者顺手点个在看。您的每一次互动,都是我们持续创作的动力。
你工作中最头疼的Excel重复操作是什么?留言区告诉我,下期可能就是你需要的解决方案。
本公众号 JS宏文章合集链接:WPS JS宏
夜雨聆风
