ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 绩效量化计算

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-16 23:38 | 显示全部楼层
shiruiqiang 发表于 2024-10-16 13:42
4、”表2劳动工作量得分“表中A列至G列均为跨表使用公式提取数据,人员多了也影响运行速度,希望也能改为VB ...

这部分功能主要是人员名单提取要从表3提取,表格的格式确实也不太好,因表3是从单位考勤系统导出的,无法修改导出的格式,而且每月的人数也可能是不一样的,不知道能不能做成通用,不然每次都要修改参数也不太实际,如果这个问题能解决后面的功能对于懂VABA的老师们应该就相对容易,表2的B到E列就是VLOOUP的功能,从表7进行匹配即可;F和G列就是从表3做些统计次数的问题(F列统计“工伤,产假,年休,丧假,婚假,流产,看护,住院护理”,G列统计“探亲,病假,孕假,事假,非住院护理,育儿),两列分别对个人进行月度累加次数计算。如果老师方便的也请帮忙看看,目前是使公式完成,确实有被误删除公式的风险存在,而且最终也要让领导的,用密码保护也不太好。

TA的精华主题

TA的得分主题

发表于 2024-10-17 07:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 shiruiqiang 于 2024-10-17 08:31 编辑

利用空闲时间搞了一下,表2根据表3和表7自动生成,里面细节完善(或判断)计数一下即可。

绩效量化计算.rar

168.54 KB, 下载次数: 7

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-17 10:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shiruiqiang 发表于 2024-10-17 07:47
利用空闲时间搞了一下,表2根据表3和表7自动生成,里面细节完善(或判断)计数一下即可。

太感谢老师的帮忙了,表3前半部分的一些重要数据都能实现相应功能了,有几个问题还想请教一下,
1、表3F、G列想让没数据的显示“0”,我尝试添加了两个语句(标红的),但即没报错,也没有实现想想的结果
If InStr("工伤|产假|年休|丧假|婚假|流产|看护|住院护理", br(i)) Then
            crr(dic(brr(m, 1) & "|" & brr(m, 2)), 6) = crr(dic(brr(m, 1) & "|" & brr(m, 2)), 6) + 1
            Else
             crr(dic(brr(m, 1) & "|" & brr(m, 2)), 10) = 0

2、因为还有很多单元格是有公式存在的,我把清理语句的范围改为“Sheets(2).[a3:g10000].ClearContents“,但H列还是被清理了,H列有一个判定公式需保留的,就是当每位员工F+G=G1(当月的天数)时,就显示“不参评”,否则显示“参评”,或者这个能否也加入VBA功能当中。
3、“Dim arr, brr, crr(1 To 10000, 1 To 30), drr”这个语句是否用来定义月度的天数,是否每月要对这个参数进行一次调整才可以进行正确的运算

TA的精华主题

TA的得分主题

发表于 2024-10-17 14:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
里面有说明,可以根据说明自己更新一下

绩效量化计算.zip

178.24 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2024-10-17 16:43 | 显示全部楼层
divineson 发表于 2024-10-17 10:04
太感谢老师的帮忙了,表3前半部分的一些重要数据都能实现相应功能了,有几个问题还想请教一下,
1、表3F ...

1\2都完成了,3无所谓,不用管。
后面的很多就按着写

绩效量化计算10.17.rar

177.04 KB, 下载次数: 4

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-18 01:02 | 显示全部楼层
感谢!感谢!感谢!重要的事情说三遍!老师能否指导一下写入数据时,表2清理表格的是哪一行代码,我更改了这里“Sheets(2).[a3:g10000].ClearContents”,改为G列后运行程序仍然是整个表格被清理了,表2H列往后有很多公式,几乎每一格都是公式,凭我的水平实在无法将之全部转化为VBA,我按老师的代码尝试编写判断语句,但没有一个是成功的,请老师指导一下是哪里写错了。
另外,发现如表3考勤下方“班表说明”有内容的导入时也会一并录入表2中,因该位置原本确是有比较多内容的,能否将边界定在“班表说明”上,麻烦老师再帮忙看看,万分感谢!
1.png
2.png

绩效量化计算10.17.zip

179.44 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2024-10-18 10:57 | 显示全部楼层
divineson 发表于 2024-10-18 01:02
感谢!感谢!感谢!重要的事情说三遍!老师能否指导一下写入数据时,表2清理表格的是哪一行代码,我更改了 ...

说实话,目前稍微修改了一下。
但是表2和表5相互影响,可能会出错。
建议都是vba处理,但是各种公式需要花点时间。
思路这样不出错,建议tb定制一下。


绩效量化计算10.18.rar

177.93 KB, 下载次数: 2

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-18 17:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
shiruiqiang 发表于 2024-10-18 10:57
说实话,目前稍微修改了一下。
但是表2和表5相互影响,可能会出错。
建议都是vba处理,但是各种公式需 ...

那就跟着老师你好好学习,我按老师的代码自己在慢慢摸索改编着公式,做到除法部分一直卡着报错,麻烦老师指导一下,看哪里写错了或语句逻辑上有没有问题,有优化的空间否:
L列公式"=IFERROR(J3/K3,"")"转化:
If crr(dic(drr(i, 1) & "|" & drr(i, 2)), 10) & crr(dic(drr(i, 1) & "|" & drr(i, 2)), 11) <> "" Then
'判定J、K列非空
            crr(dic(drr(i, 1) & "|" & drr(i, 2)), 12) = crr(dic(drr(i, 1) & "|" & drr(i, 2)), 10) / crr(dic(drr(i, 1) & "|" & drr(i, 2)), 11)
‘除法计算,显示类型不配,是否也要像天数一样赋值才能运算
            End If
M列公式“=IFERROR(J3/(K3/($G$1)*($G$1-F3-G3)),"")”转化:
If crr(dic(drr(i, 1) & "|" & drr(i, 2)), 10) & crr(dic(drr(i, 1) & "|" & drr(i, 2)), 11) <> "" Then
'判定J、K列非空
crr(dic(drr(i, 1) & "|" & drr(i, 2)), 13) = tianshu * 1 - crr(dic(drr(i, 1) & "|" & drr(i, 2)), 6) - crr(dic(drr(i, 1) & "|" & drr(i, 2)), 7)
这里只写出了后面括号减法部分,写入除法时也是一直提示出错,所以尝试只写减法部分,测试一下是否赋值问题,貌似减法好像是成功了。
End If

TA的精华主题

TA的得分主题

发表于 2024-10-18 17:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
divineson 发表于 2024-10-18 17:19
那就跟着老师你好好学习,我按老师的代码自己在慢慢摸索改编着公式,做到除法部分一直卡着报错,麻烦老师 ...

按照这样写吧,要判断非空,同时0不能作为被除数

绩效量化计算10.18.rar

180.58 KB, 下载次数: 4

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-19 13:42 | 显示全部楼层
shiruiqiang 发表于 2024-10-18 17:49
按照这样写吧,要判断非空,同时0不能作为被除数

老师你好,按照你提供的思路已完成了大部分的代码编写,还有4列无法编写或代码不生效,麻烦你看看,指导一下:

N列公式:=IF(H3="不参评","不参评",SUMPRODUCT((E:E=E3)*(H:H=H3)*(J:J>J3))+1)转化
If crr(dic(drr(i, 1) & "|" & drr(i, 2)), 8) = "不参评" Then
crr(dic(drr(i, 1) & "|" & drr(i, 2)), 14) = "不参评"
ElseIf crr(dic(drr(i, 1) & "|" & drr(i, 2)), 5) = crr(dic(drr(i, 1) & "|" & drr(i, 2)), 5) And crr(dic(drr(i, 1) & "|" & drr(i, 2)), 8) = "参评" And crr(dic(drr(i, 1) & "|" & drr(i, 2)), 10) > crr(dic(drr(i, 1) & "|" & drr(i, 2)), 10) Then
crr(dic(drr(i, 1) & "|" & drr(i, 2)), 14) = n + 1
End If

O列公式:=IFERROR(IF(M3<0.3,-7.5,IF(M3<0.4,-6,IF(M3<0.5,-5,IF(M3<0.6,-4,IF(M3<0.7,-3,IF(M3<0.8,-2,IF(M3<0.9,-1,IF(L3>=1,VLOOKUP(N3,表5分值分布!J:M,IF(E3="值班站长",2,IF(E3="值班员",3,IF(E3="站务员",4,""))),0),0)))))))),"")转化
drr = Sheets(5).UsedRange
For i = 2 To UBound(drr)
If dic.exists(drr(i, 1) & "|" & drr(i, 2)) Then
crr(dic(drr(i, 1) & "|" & drr(i, 2)), 14) = drr(i, 10)
    If crr(dic(drr(i, 1) & "|" & drr(i, 2)), 13) < 0.3 Then
    crr(dic(drr(i, 1) & "|" & drr(i, 2)), 15) = -7.5
    ElseIf crr(dic(drr(i, 1) & "|" & drr(i, 2)), 13) < 0.4 Then
    crr(dic(drr(i, 1) & "|" & drr(i, 2)), 15) = -6
    ElseIf crr(dic(drr(i, 1) & "|" & drr(i, 2)), 13) < 0.5 Then
    crr(dic(drr(i, 1) & "|" & drr(i, 2)), 15) = -5
    ElseIf crr(dic(drr(i, 1) & "|" & drr(i, 2)), 13) < 0.6 Then
    crr(dic(drr(i, 1) & "|" & drr(i, 2)), 15) = -4
    ElseIf crr(dic(drr(i, 1) & "|" & drr(i, 2)), 13) < 0.7 Then
    crr(dic(drr(i, 1) & "|" & drr(i, 2)), 15) = -3
    ElseIf crr(dic(drr(i, 1) & "|" & drr(i, 2)), 13) < 0.8 Then
    crr(dic(drr(i, 1) & "|" & drr(i, 2)), 15) = -2
    ElseIf crr(dic(drr(i, 1) & "|" & drr(i, 2)), 13) < 0.9 Then
    crr(dic(drr(i, 1) & "|" & drr(i, 2)), 15) = -1
           ElseIf crr(dic(drr(i, 1) & "|" & drr(i, 2)), 12) >= 1 And crr(dic(drr(i, 1) & "|" & drr(i, 2)), 5) = "值班站长" Then
           crr(dic(drr(i, 1) & "|" & drr(i, 2)), 15) = drr(i, 11)
           ElseIf crr(dic(drr(i, 1) & "|" & drr(i, 2)), 12) >= 1 And crr(dic(drr(i, 1) & "|" & drr(i, 2)), 5) = "值班员" Then
           crr(dic(drr(i, 1) & "|" & drr(i, 2)), 15) = drr(i, 12)
           ElseIf crr(dic(drr(i, 1) & "|" & drr(i, 2)), 12) >= 1 And crr(dic(drr(i, 1) & "|" & drr(i, 2)), 5) = "站务员" Then
           crr(dic(drr(i, 1) & "|" & drr(i, 2)), 15) = drr(i, 13)
            End If
    End If
    Next

以上两列运行时没有报错但也没有成功显示数据,我无法找出原因所在。

U列公式:{=SUMPRODUCT((E:E=E3)*(T:T>T3))+1}
数组公式不清楚如何转换

V列公式:=IFERROR(IF(H4="不参评","不参评",IF(M4<0.7,"D",IF(F4>5,"C",VLOOKUP(U4,表6分配AB档指标!$R:$U,IF(E4="值班站长",2,IF(E4="值班员",3,IF(E4="站务员",4,0))),0)))),"")

这个与O列有些类似,不懂得VBA要如何表达。

绩效量化计算10.18.zip

189.42 KB, 下载次数: 1

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

本版积分规则

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

GMT+8, 2024-11-21 17:06 , Processed in 0.046970 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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