ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 自动生成陪餐费统计表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-15 15:48 | 显示全部楼层 |阅读模式
我这里有一个朋友帮忙用vba写的自动生成陪餐费统计表,要求是根据表头年月自动生成工作日时间填充到第三行,第四行是依据第三行计数出星期几,每天都有早中晚三餐,早3元,午餐、晚餐都是5元,绿色区域每周两个陪餐教师,因此同一周的陪餐费计算填到同周下面,蓝色区域是师傅就餐,赵1到赵4只吃早餐午餐,钱1到钱7吃三餐,填充数据后汇总一下,想看看各位能否帮忙用js实现一下,谢谢!

陪餐费统计表.rar (32.85 KB, 下载次数: 20)

TA的精华主题

TA的得分主题

发表于 2024-3-16 12:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. function run(){
  2.         const [arr1, arr2] = ['B6:BR17','B19:BR29'].map(addr => Range(addr).Value2)
  3.         const sums = Array(arr1[0].length + 4).fill(0), res = []
  4.         const f = v => {                        // forEach回调
  5.                 let nums = Array(3).fill(0)
  6.                 v.forEach((n, i) => n !== undefined && (nums[i % 3] += v[i], sums[i] += v[i]))
  7.                 nums.concat(eval(nums.join('+'))).forEach((n, i) => sums[sums.length - 4 + i] += n)
  8.                 res.push(nums)
  9.         }
  10.         // 单纯是图省事,直接在字符串原型上扩充
  11.         String.prototype.writeDatas = function(x) { Range(this).Resize(x.length, x[0].length).Value2 = x }
  12.         arr1.forEach(f)
  13.         'BS6'.writeDatas(res)                // [BS6:BV17]
  14.         'B18'.writeDatas([sums])        // 陪餐费合计
  15.         const prevSums = sums.map((n, i , a) => (a[i] = 0, n))        // 保存到其它数组对象上,sums中的元素归零
  16.         res.length = 0
  17.         arr2.forEach(f)
  18.         'BS19'.writeDatas(res)                // [BS19:BV29]
  19.         'B30'.writeDatas([sums])        // 师傅就餐合计
  20.         sums.map((n, i) => n + prevSums[i])
  21.         'B31'.writeDatas([sums])        // 同餐同费合计
  22. }
复制代码

陪餐费统计表.zip

32.5 KB, 下载次数: 19

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-16 14:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 学习js宏 于 2024-3-16 15:37 编辑

只实现了填充日期和星期,求和我没看懂
  1. function getday() {
  2.         let p = /\d+/g
  3.         let title = Range("a1").Value2.match(p) //用正则匹配第一个单元格的数字
  4.         let t = new Date(String(title[0])+"/"+String(title[1])+"/"+"1") //这年的这个月的第一天变成日期格式
  5.         let arr = [[],[]]
  6.         while (true){
  7.                 if ((t.getMonth()+1)==title[1]) {       //月份相同则执行代码否则日期到了下个月就跳出循环
  8.                         if (t.getDay()!=0 && t.getDay()!=6) {  //判断这天是否是周一到周五
  9.                                 arr[0].push((t.getMonth()+1)+"月"+t.getDate()+"日") //把日期放入数组
  10.                                 let day = t.getDay()
  11.                                 if (day==1) {            //判断这天是星期几并放入数组
  12.                                         arr[1].push("星期一")
  13.                                 }else if(day==2) {
  14.                                         arr[1].push("星期二")
  15.                                 }else if(day==3) {
  16.                                         arr[1].push("星期三")
  17.                                 }else if(day==4) {
  18.                                         arr[1].push("星期四")
  19.                                 }else if(day==5) {
  20.                                         arr[1].push("星期五")
  21.                                 }
  22.                                 
  23.                         }
  24.                 }
  25.                 else {
  26.                         break
  27.                 }
  28.                 t = new Date(t.getTime()+24*3600*1000)  //天数加1
  29.         }
  30.         return arr
  31. }
  32. function test() {
  33.         a = getday()
  34.         for (let i=0;i<a[0].length;i++) {
  35.                 Cells(3,2+i*3).Value2 = a[0][i]
  36.                 Cells(4,2+i*3).Value2 = a[1][i]
  37.         }

  38. }
  39.         
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-16 16:07 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-16 16:10 | 显示全部楼层
学习js宏 发表于 2024-3-16 14:12
只实现了填充日期和星期,求和我没看懂

我这里粘贴代码填充日期和星期也不行,应该是那个变量t存在问题,感谢!

TA的精华主题

TA的得分主题

发表于 2024-3-16 19:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yangqianming 发表于 2024-3-16 16:10
我这里粘贴代码填充日期和星期也不行,应该是那个变量t存在问题,感谢!

要运行test那个函数

TA的精华主题

TA的得分主题

发表于 2024-3-16 21:01 | 显示全部楼层
我理解为,楼主的问题是,要生成一张完整的表,且统计结果?

TA的精华主题

TA的得分主题

发表于 2024-3-16 21:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-3-16 21:10 | 显示全部楼层
个人认为,这个要先给一个标准模板,然后再写代码填充数据。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-17 07:14 来自手机 | 显示全部楼层
LIUZHU 发表于 2024-3-16 21:01
我理解为,楼主的问题是,要生成一张完整的表,且统计结果?

是的,能帮我实现一下吗?谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 15:19 , Processed in 0.047443 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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