ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA 创建自定义计算公式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-25 22:46 | 显示全部楼层 |阅读模式
想要向大家求助是否能通过function创造自定义公式来解决社保公积金的计算

在SSB表中的雇主缴纳金额列,比如说K列里面写了很长的公式,但其实想要达到的效果很简单,如下:
如果SSB表中员工的社保缴纳地(C列)和社保类型(G列)如果跟SSB Policy表中G列内容一致,就获取对应行的BQ列的计算方式和BR列的计算结果保留位数。如果BQ列为Round,BR列为2,那在SSB表中K列的输出结果就是=round(I列的基数*J列的比例,2)。如果SSB Policy表中BQ列为Ceiling,BR列为2,那那在SSB表中K列的输出结果就是=roundup(rounddown(I列的基数*J列的比例,2+1),2)。剩下的五险一金都是一样的计算逻辑。

因为全国不同城市的社保公积金计算方式和计算结果保留位数不一致,就像通过把基本数据存储到SSB Policy表中,通过公式的计算,以后政策变化或者是新增城市,只要修改数据源表SSB Policy就可以了。但是现在的公式太长,大量使用index计算量太大,原本的计算表(附件只是一部分)已经快要转不动了。所以想求助说是否可以自定义公式来解决,希望大家帮帮忙,谢谢啦!

如果有逻辑相似的自定义公式,也希望能够分享参考,我不太懂怎么把数据源放在Excel表单里再通过VBA调用的部分,谢谢啦!

社保和公积金计算表2019.rar

856.82 KB, 下载次数: 28

头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2019-8-26 07:01 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
提示: 作者被禁止或删除 内容自动屏蔽

TA的精华主题

TA的得分主题

发表于 2019-8-26 12:50 | 显示全部楼层
将社保类型数据移到Payroll表,SSB表的数据可以一键生成,比用函数快。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-26 21:17 | 显示全部楼层
朱荣兴 发表于 2019-8-26 07:01
直接用代码计算不行吗?一定要自定义函数?

用代码生成可以做到时时更新吗?比如说我修改了payroll表里的源数据,SSB表中的计算结果也会自动更新吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-26 21:22 | 显示全部楼层
山菊花 发表于 2019-8-26 12:50
将社保类型数据移到Payroll表,SSB表的数据可以一键生成,比用函数快。

具体是怎么移动呢?能详细说说吗?
我理解的是:payroll表里是存放员工信息的,如果是一个员工存放一个社保类型数据,那1000多名员工就有1000多个社保类型,但实际上,涉及到的城市只有十多个数据量不会太大吗?
之所以放到SSB Policy表里是为了如果一个城市信息有变化,那就只改一行数据就可以了,如果放到payroll表里面,是有多少员工是这个城市的,就要改多少条吗?还是说我的想法不对?

TA的精华主题

TA的得分主题

发表于 2019-8-26 21:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
biancabai 发表于 2019-8-26 21:22
具体是怎么移动呢?能详细说说吗?
我理解的是:payroll表里是存放员工信息的,如果是一个员工存放一个 ...

对应于员工工号,如果社保类型是唯一的一个值,那就可以迁移到Payroll表。也许我理解有误。
TIM截图20190826215006.png
是否可以这样移动:
TIM截图20190826215416.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-26 22:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
山菊花 发表于 2019-8-26 21:51
对应于员工工号,如果社保类型是唯一的一个值,那就可以迁移到Payroll表。也许我理解有误。

是否可以 ...

很清楚,谢谢啦,可以这样移动。社保类型是跟员工一一对应的,一般是本地/外地+城镇/农村4种。
之前没有放到payroll表中,是这个社保类型来源比较杂乱,需要频繁改动,所以就放到了SSB表中,以便查看变动之后计算结果是否和实缴数据一致。
放到payroll表真的可以减少计算时间吗?

TA的精华主题

TA的得分主题

发表于 2019-8-26 22:20 | 显示全部楼层
biancabai 发表于 2019-8-26 22:04
很清楚,谢谢啦,可以这样移动。社保类型是跟员工一一对应的,一般是本地/外地+城镇/农村4种。
之前没有 ...

移动后,SSB表所有列都是引用或计算的结果。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-27 14:32 | 显示全部楼层
山菊花 发表于 2019-8-26 22:20
移动后,SSB表所有列都是引用或计算的结果。

所以是为了达到用宏一键生成SSB表吗?
那是是否payroll表中有任何更新都要手动run一次?

TA的精华主题

TA的得分主题

发表于 2019-8-27 15:05 | 显示全部楼层
biancabai 发表于 2019-8-27 14:32
所以是为了达到用宏一键生成SSB表吗?
那是是否payroll表中有任何更新都要手动run一次?

如果是我用,我会在工作表上放一个按钮,更新完数据后,手动点击一下按钮,刷新SSB表。
如果你总想着自动,可将代码写在SSB工作表的Activate事件中,只要激活SSB工作表,它就自动刷新,不管数据有没有变。
或者把代码写在payroll表的Deactivate事件中,只要一离开数据表,它就自动刷新SSB表。
此外,还有Change事件也可用,方法不少,可根据自己的需要决定。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-28 18:18 , Processed in 0.047146 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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