ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 490|回复: 0

根据指定列在组内的占比将某数分配到各行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-11-5 09:41 | 显示全部楼层 |阅读模式
例题描述
Excel文件book1.xlsx中有下图所示数据:
工作表“水费支出(3)”中有每年的漏水损失数量,现在想要把这个损失量分配到工作表“水费支出明细”中的漏水损失列中,分配原则是=漏水损失*月北控水表水量/全年月北控水表水量总和。
此题涉及读取Excel工作表数据、按条件变化分组、组内运算、Excel单元格填数等知识。
实现步骤
1、 编写脚本:
A
1=file("E:/work/book1.xlsx").xlsopen()
2=A1.xlsimport@t(;"水费支出明细")
3=A2.group@i(年度!=null)
4=A1.xlsimport@t(;"水费支出 (3)",2:7)
5=A3.run(y=~.年度/"年",a=A4.select@1(年度==y).'漏水损失(吨)',s=~.sum('月北控水表水量(吨)'),~.run('漏水损失(吨)'=string('月北控水表水量(吨)'*a/s,"#.00")))
6=A1.xlscell("F2","水费支出明细";A2.('漏水损失(吨)').concat("\n"))
7=file("E:/work/book2.xlsx").xlswrite(A1)
A1 打开book1.xlsx文件为Excel对象
A2 读出A1中工作表“水费支出明细”的数据,选项@t表示首行是列标题
A3 对A2中的数据按照年度不为空时分为一个新组,选项@i表示当条件参数为真时分一个新组,结果是每年的数据分在同一组
A4 读出A1中工作表“水费支出(3)”的第2-7行数据,选项@t表示首行是列标题
A5 循环A3中的各年份分组,变量y是本组所在年份,变量a是从A4中选出对应年份的漏水损失,变量s是本年度总的月北控水表水量,然后循环本年度所有记录,给漏水损失列赋值为:月北控水表水量*a/s,计算结果保留2位小数。
A6 把A2中的漏水损失列数据用\n连接成串,然后设置到A1的Excel对象的工作表“水费支出明细”的F2单元格。
A7 把A1的Excel对象保存到文件book2.xlsx
2、 运行程序,结束后就可以看到work目录中生成的book2.xlsx文件,打开后的结果如下图。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 16:00 , Processed in 0.037223 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表