ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 我又来提出新的要求了!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-21 14:38 | 显示全部楼层
建议:手工在“1”工作表中制作一份正确的数据,感觉用公式计算的数据有问题。

TA的精华主题

TA的得分主题

发表于 2024-6-21 16:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
研究了一下Workbook_SheetActivate事件的代码,是更新工作表中的两个组合框的下拉选项的,根据自己的理解修改了一下,但没看出起什么作用。

  1. Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  2.     If Not IsNumeric(ActiveSheet.Name) Then Exit Sub
  3.     On Error Resume Next
  4.     Dim Arrb, kc, I%, aa
  5.     With ActiveSheet
  6.         Arrb = .Range("$B$3:$B$7")
  7.     End With
  8.     For I = 1 To UBound(Arrb)
  9.         aa = aa & Arrb(I, 1) & ","
  10.     Next I
  11.     aa = Left(aa, Len(aa) - 1)
  12.     kc = Split(aa, ",")
  13.     ActiveSheet.款号.Clear
  14.     For I = 0 To UBound(kc)
  15.         If kc(I) <> "" Then ActiveSheet.款号.AddItem kc(I)
  16.     Next
  17.     Dim Arrb1, Myrb1%, kc1, i1%, aa1
  18.     With Sheet33
  19.         Myrb1 = .[B65536].End(xlUp).Row
  20.         Arrb1 = .Range("$B$2:B" & Myrb1)
  21.     End With
  22.     For I = 1 To UBound(Arrb1)
  23.         aa1 = aa1 & Arrb1(I, 1) & ","
  24.     Next I
  25.     aa1 = Left(aa1, Len(aa1) - 1)
  26.     kc1 = Split(aa1, ",")
  27.     ActiveSheet.姓名.Clear
  28.     For I = 0 To UBound(kc1)
  29.         ActiveSheet.姓名.AddItem kc1(I)
  30.     Next
  31. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-6-21 17:35 | 显示全部楼层
各个代码都看了一下,大体明白是什么思路和具体作用了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-22 00:54 | 显示全部楼层
边缘码农 发表于 2024-6-21 17:35
各个代码都看了一下,大体明白是什么思路和具体作用了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-22 01:01 | 显示全部楼层
边缘码农 发表于 2024-6-21 16:02
研究了一下Workbook_SheetActivate事件的代码,是更新工作表中的两个组合框的下拉选项的,根据自己的理解修 ...

原来都是文员手动输入,实际应用中发现核算老是出错,检查后才发现是文员对于工序名称输入与工时工价表中的工作内容名称不完全一致,这样就会导致对应的工价读不到正确的。所以我改为用combobox来选择,只能选择,这样就不会出问题了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-22 01:22 | 显示全部楼层
边缘码农 发表于 2024-6-21 12:44
聊一下规则问题:

第1条可以不用管。

聊一下规则问题:

第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条规则为准,公式是我做的第一个版本,实际应用中还是存在很多问题,所以新版本就不存在公式了。


题外话:为什么用那么多的数组公式?
-水平有限呗没学会更好的处理方式


感谢老师这么细致的分析与帮助!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-22 01:25 | 显示全部楼层
边缘码农 发表于 2024-6-21 12:44
聊一下规则问题:

第1条可以不用管。

那个求和公式是不要的,忘了删除了

TA的精华主题

TA的得分主题

发表于 2024-6-24 08:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png

数组公式是高级内容,一般人很少接触到。

TA的精华主题

TA的得分主题

发表于 2024-6-24 08:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
danhanqing 发表于 2024-6-22 01:25
那个求和公式是不要的,忘了删除了

手工在“1”工作表中制作一份正确的数据。

TA的精华主题

TA的得分主题

发表于 2024-6-24 08:42 | 显示全部楼层
在Excel工作簿中增加菜单项,一般有两种方法,一种是用代码,网上一搜一大把,大多是增加一个名称为“加载项”的顶级菜单,在这个菜单下增加菜单项。一种是使用CustomUIEditor在工作簿中增加xml代码,可以任意使用,比如在开始菜单的剪切板选项组后增加一个新的选项组。这种方法还需要自己设置一个32*32的图标类图片。

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

本版积分规则

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

GMT+8, 2024-9-29 07:31 , Processed in 0.047366 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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