|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
代码修改一下——
- function 计算社保公积金缴费明细() {
- const awf = Application.WorksheetFunction;
- const SIHF = Range('G1').CurrentRegion().slice(1).reduce((a, c) => { //循环读取各险种费率及基数上下限存入对象SIHF
- a[c[1] + '单位'] = [c[3], c[4], c[5]].map(v => Number(v) || 0);
- a[c[1] + '个人'] = [c[2], c[4], c[5]].map(v => Number(v) || 0);
- return a;
- }, {});
- const MONTH = Number(String(Range('G2')()).replace('月', '')); //定义计算月份
- const res = [['月份', '姓名', ...Object.keys(SIHF), '单位合计', '个人合计', '总合计']]; //定义结果存储数组
- Range('A1').CurrentRegion().filter(r => MONTH >= r[3] && MONTH <= r[4]).forEach(v => {
- let arr = Object.keys(SIHF).map(k => {
- if (k.includes('大额医保')) return MONTH == 1 ? 6 : 4; //大额医保,1月份金额为6元,其余为4元
- //根据基数上下限和费率,计算缴费金额,社保费四舍五入保留2位小数(分),公积金四舍五入到整数(元)
- return awf.Round(Math.min(Math.max(v[k.includes('基本医保') ? 2 : 1], SIHF[k][1]), SIHF[k][2]) * SIHF[k][0], k.includes('公积金') ? 0 : 2);
- });
- const SUM_COMPANY = `=SUMPRODUCT((RIGHT(R1C[-${arr.length}]:R1C[-1],2)="单位")*RC[-${arr.length}]:RC[-1])`; //单位合计
- const SUM_STAFF = `=SUMPRODUCT((RIGHT(R1C[-${arr.length + 1}]:R1C[-2],2)="个人")*RC[-${arr.length + 1}]:RC[-2])`; //个人合计
- const SUM_TOTAL = `=RC[-1]+RC[-2]`; //总合计
- res.push([MONTH + '月', v[0], ...arr, SUM_COMPANY, SUM_STAFF, SUM_TOTAL]);
- });
- //添加末行汇总
- res.push([, `${res.length - 1}人`, ...Array(Object.keys(SIHF).length + 3).fill('').map(v => `=SUM(R[-${res.length - 1}]C:R[-1]C)`)]);
- with (Range('Q1').Resize(res.length, res[0].length)) {
- CurrentRegion.Clear(); //清空结果区域
- Value2 = res; //输出结果
- Borders.LineStyle = xlContinuous; //添加边框线
- HorizontalAlignment = xlHAlignCenter; //单元格内容水平居中
- VerticalAlignment = xlHAlignCenter; //单元格内容垂直居中
- NumberFormat = `_ * #,##0.00_ ;;_ * "-"??_ ;@`; //设置单元格格式
- Rows(1).Font.Bold = true;
- Rows(1).WrapText = true;
- }
- }
复制代码 |
|