|
楼主 |
发表于 2024-6-22 01:22
|
显示全部楼层
聊一下规则问题:
第1条可以不用管。
第10条可以不用管。(这一条,建议用菜单的形式,而不是用按钮,用按钮,需要1-31工作表各加一个按钮,还是有些麻烦的。我看了下各个工作表中的代码,一旦要改就要改31次。对于多个工作表中执行的代码,用菜单的形式更好。工作表激活事件中也有代码,需要先了解这些代码是什么意思。解决此类实际问题的代码是最麻烦的,一个沟通不到位,就不能达到要求。)-所言极是!
第3条规则,需要干脆一点,要么有,要么没有。建议就是保存现状。-能不要是最好,越简单越好。
第7规则的优先级最高,工作内容指的是例如D13?-是的,也就是对应工序工价表中款号对应的工序名称。
7、如果工作内容为空,则表示没有上班,上述核算结果均为0-对
第8/9条规则规范产值的计算,可以和第2条合并。
8、如果工作内容除了添加了“计时/”的外,不在“工序工价表”明细内的,在对应的产值单元格显示“工序错"
9、如果姓名不在”人事总表“中,则在对应的产值单元格显示”人事错“
-其实第8-9条可以不用管了,因为都是通过combobox来选择的。但提出来也是防止人为在表格中修改可能导致出问题。
第8/9条判断完毕,且都没有错误,则执行第2条规则,但该条规则产值的描述和公式不一致。
-终极目标就是放弃公式计算,因为采用公式来计算时,一是容易人为出现单元格被误改或误删从而出错,另外整个文件在打开时,很慢。所以才会到坛子里来请大师们帮忙改为代码解决。
=IF(LEFT(D10,2)="计时",IF(OR(B10="",D10="",G10=""),0,G10*_xlfn.XLOOKUP(B10&D10,工时工价表!A:A&工时工价表!B:B,工时工价表!D:D)/I10))
按照公式描述:如果是计时工序,则:产值=“人事总表”中的时薪*工时;否则:
如果款号、工序、产量三项任意一项为空,则:产值=空;否则:产值=产量*工价。
-否则:产值=产量*每个人工作内容对应的工价/人数(有些产值会是多人小组式完成,产值是大家平均分的)
2、产值=“工时工价表“中工序名称对应的工价*产量*人数,其中如果产量是多单元格合并的,则表示是多人以工作组的方式完成,则需要先核算出总产值:工作小组中每个人对应的工序的工价*总产量之总和。个人产值就等于总产值/工作小组人数
第4条规则:存在的问题和第2条规则类似。
=IF(LEFT(D13,2)="计时",VLOOKUP(C13,人事总表!B:C,2,FALSE)*F13,IF(OR(C13="",F13=""),"",IF(IFNA(VLOOKUP(C13,人事总表!B:C,2,FALSE),"错误")="错误","人事错",IF(IFNA(_xlfn.XLOOKUP(B13&D13,工时工价表!A:A&工时工价表!B:B,工时工价表!D:D),"错误")="错误","工序错",VLOOKUP(C13,人事总表!B:C,2,FALSE)*F13))))
4、工资:等于人事总表中该员工对应的时薪*工时
而且:第8-9条规则是在产值列中显示人事错、工序错,看公式,是在工资列中?
-我的第一个版本是写在了工资列中,觉得改为写在产值中合适些。
第5条规则:存在的问题和第2条规则类似。
=IF(OR(H14="",J14=""),"",MAX($H14:$J14))
产值列和工资列有一项为空,则为空,否则,取其最大值。
5、实发:如果工作内容前面有“计时/”字样,工资就等于“人事总表”中该员工对应的时薪*工时;
否则表示该员工是计件,工资就等于产值
-工资都等于“人事总表”中该员工对应的时薪*工时
第6条规则:存在的问题和第2条规则类似。
=IF(OR(H14="",J14=""),"",$H14-$J14)
6、绩效:绩效=实发-工资
计时工序没有绩效?
-计时工序没有绩效
另外,请假病假的实发列数据是怎么计算的?那个求和公式,是认真的吗?
-每张表都是日报表,请假了,则当天是没有工资的,所以请假人员实发列数据肯定是为0的
现在的问题是:以公式为准,还是你描述的10条规则为准?
-描述的10条规则为准,公式是我做的第一个版本,实际应用中还是存在很多问题,所以新版本就不存在公式了。
题外话:为什么用那么多的数组公式?
-水平有限呗,没学会更好的处理方式
感谢老师这么细致的分析与帮助!
|
|