Excel·VBA江西省预算一体化工资表一键处理

每月制作工资表导出为Excel后都需要调整格式,删除0数据的列、对工资表项目进行排序、打印设置等等,有些单位还分有“行政”、“事业”2个工资表就需要操作2次。显然,这种重复操作的问题,可以使用VBA代码解决

目录

    • 代码使用说明
    • 1,工资表格式处理
      • 涉及功能
      • 举例
    • 2,工资表数据统计
      • 举例

代码使用说明

  • 代码作用范围:以下代码作用于活动工作簿/工作表,无需将待处理的工资表保存在启用宏的工作簿中(xlsm格式),只要待处理的工资表处于活动状态即可运行代码。同时,也不建议把数据保存在xlsm文件中,vba代码运行结果是无法撤销的
    活动工作簿:如果打开多个工作簿,显示在最前面的就是活动工作簿
    活动工作表:活动工作簿当前显示的工作表

1,工资表格式处理

涉及功能

  • 数据调整:工资表各项目按指定顺序排序,添加合计数行,删除合计数为0的列,删除无意义项目列(应发合计、扣款合计),添加工资表所属月份,添加个税所属月份,添加制表人及时间
    参数bt可指定工资表各项目的顺序,如果工资表中存在某项不在参数bt内,且合计数不为0的,则该列排序在最后一列
  • 格式设置:行高、自适应列宽、文字居中、自动换行、隐藏指定列、所有框线
    存在部分列设置自适应列宽,但效果不佳的,可以在代码运行后手工调整
  • 打印设置:横向打印、页边距、打印标题、打印页脚、冻结表格
Sub 工资表格式处理()'将每月2张工资表放在同一工作簿中,分别命名“行政、事业”,运行本代码Dim title_row, title_h, row_h, bt, brr, ws, start_col&, b, i&, j&, gs&title_row = 3: title_h = 13.2: row_h = 24  '表头行数,前2行行高,其他行高zbr_name = "制表人:薛定谔  " & Format(Date, "yyyy.mm.dd")bt = "职务工资,级别工资,岗位工资,薪级(技术)工资,教师(10%)," _& "绩效奖金,生活补助,工作津贴,岗位津贴,降温取暖费,公车改革补贴," _& "补发工资(停发),应发工资,养老保险,职业年金,医疗保险,失业保险," _& "住房公积金,代扣个税,单位代扣小计,代扣其它,实发合计"  '表头及顺序brr = Split(bt, ",")For Each ws In ActiveWorkbook.WorksheetsWith ws'格式设置:行高、居中、自动换行、合并单元格、隐藏D-E列.Rows.RowHeight = row_h: .Rows("1:2").RowHeight = title_h.Rows(3).RowHeight = 25.2    '第3行行高.Cells.HorizontalAlignment = xlCenter  '全表居中.Cells.VerticalAlignment = xlCenter.Rows(3).WrapText = True     '第3行自动换行.Columns(2).WrapText = True  '第2列自动换行,单位名称.Cells(1, 1).UnMerge    '取消合并单元格,方便调整列排序.Columns("d:e").Hidden = True'添加合计行,删除合计数为零的列,删除“应发合计,扣款合计”列hb_row = .UsedRange.Rows.count + 1: .Cells(hb_row, 3) = "合计"For j = 6 To .UsedRange.Columns.count.Cells(hb_row, j).FormulaR1C1 = "=SUM(R[" & 4 - hb_row & "]C[0]:R[-1]C[0])"NextFor j = .UsedRange.Columns.count To 6 Step -1If .Cells(hb_row, j) = 0 Or .Cells(3, j) = "应发合计" _Or .Cells(3, j) = "扣款合计" Then .Columns(j).DeleteNext'调整列排序,剪切列、插入列start_col = 6  '开始列号For Each b In brrFor j = 6 To .UsedRange.Columns.countIf .Cells(3, j) = b ThenIf j <> start_col Then.Columns(j).Cut.Columns(start_col).InsertEnd Ifstart_col = start_col + 1: Exit For  '递增、跳出End IfNextNextIf Month(Date) = 1 Then gs = 12 Else gs = Month(Date) - 1  '个税所属月份For j = .UsedRange.Columns.count To 6 Step -1If .Cells(3, j) = "代扣个税" Then .Cells(3, j) = "代扣" & gs & "月个税": Exit ForNext'增加第1列序号列,表头合并单元格,所有框线,列宽自适应.Columns(1).Insert: .Cells(3, 1) = "序号"For i = 4 To .UsedRange.Rows.count - 1.Cells(i, 1) = i - 3Next.Cells(1, 2) = Replace(.Cells(1, 2).Value, "局", "局" & Month(Date) & "月").Cells(1, 1).Resize(2, .UsedRange.Columns.count).Merge.UsedRange.Borders.LineStyle = xlContinuousRange(.Columns(7), .Columns(.UsedRange.Columns.count)).ColumnWidth = 4Range(.Columns(7), .Columns(.UsedRange.Columns.count)).AutoFitRange(.Columns(1), .Columns(2)).AutoFit: .Columns(4).AutoFit.Cells(.UsedRange.Rows.count + 1, .UsedRange.Columns.count - 2) = zbr_name'设置工作表横向打印、页边距、打印标题、打印页脚、冻结表格With .PageSetup.Orientation = xlLandscape  '横向打印.PrintTitleRows = "$1:$3"   '打印标题.TopMargin = Application.InchesToPoints(0.787)     '上边距2厘米.BottomMargin = Application.InchesToPoints(0.787)  '下边距2厘米.CenterFooter = "第 &P 页,共 &N 页"  '打印页脚End WithEnd WithNext
End Sub

举例

系统导出工资表,保存至同一个工作簿的不同工作表(部分截图)
在这里插入图片描述
代码处理后工资表
在这里插入图片描述
在这里插入图片描述

2,工资表数据统计

为便于账务处理以及数据核对,对以上经过代码处理的工资表进行数据统计
工资收入部分分别计入:基本工资、津贴补贴、绩效奖金

Sub 工资表数据统计()'仅适用于统计经过以上代码处理的工资表Dim dict1 As Object, dict2 As Object, jb$, jbt$, arr, brr, ws, res, i&, j&, gzxm$jb = "职务工资,级别工资,岗位工资,薪级(技术)工资,教师(10%)"  '基本工资jbt = "生活补助,工作津贴,岗位津贴,降温取暖费,公车改革补贴"      '津贴补贴title_row = 3: start_col = 7  '表头行号,开始列号Set dict1 = CreateObject("scripting.dictionary")brr = Split(jb, ",")For Each b In brrdict1(b) = "基本工资"Nextbrr = Split(jbt, ",")For Each b In brrdict1(b) = "津贴补贴"NextSet dict2 = CreateObject("scripting.dictionary")Set dict2("基本工资") = CreateObject("scripting.dictionary")  '字典嵌套Set dict2("津贴补贴") = CreateObject("scripting.dictionary")For Each ws In ActiveWorkbook.Worksheetsarr = ws.UsedRange.Value: ws_name = ws.Name: s = s + "," + ws_nametotal_row = ws.UsedRange.Rows.count - 1  '合计行号For j = start_col To UBound(arr, 2)gzxm = arr(title_row, j)  '工资项目If Not dict1.Exists(gzxm) And Not dict2.Exists(gzxm) Then  '不属于基本工资、津贴补贴Set dict2(gzxm) = CreateObject("scripting.dictionary")ElseIf dict1.Exists(gzxm) Thengzxm = dict1(gzxm)    '属于基本工资、津贴补贴,则转换End Ifdict2(gzxm)(ws_name) = dict2(gzxm)(ws_name) + arr(total_row, j)NextNextk2 = dict2.keys: brr = Split(s, ",")  '字典dict2所有键转为数组,拆分字符串sReDim res(1 To dict2.count + 1, 1 To UBound(brr) + 2)  '统计结果数组'横纵条件赋值到数组For i = 2 To UBound(res)  '纵向res(i, 1) = k2(i - 2)NextFor j = 1 To UBound(brr)  '横向res(1, j + 1) = brr(j)Nextres(1, UBound(res, 2)) = "合计"'数组结果赋值到res数组For i = 2 To UBound(res)  '纵向For j = 2 To UBound(res, 2) - 1  '横向If dict2(res(i, 1)).Exists(res(1, j)) Thenres(i, j) = dict2(res(i, 1))(res(1, j))res(i, UBound(res, 2)) = res(i, UBound(res, 2)) + res(i, j)End IfNextNextWorksheets.Add(After:=Sheets(Sheets.count)).Name = "统计"  '添加工作表并命名Worksheets("统计").[a1].Resize(UBound(res), UBound(res, 2)) = resWith Worksheets("统计")  '格式设置.Cells.Font.Name = "宋体": .Cells.Font.Size = 12: .Rows.RowHeight = 20.Cells.HorizontalAlignment = xlCenter  '全表居中.Cells.VerticalAlignment = xlCenterRange(.Columns(1), .Columns(.UsedRange.Columns.count)).AutoFitEnd With
End Sub

举例

对1-举例处理结果进行统计:
部分统计结果的顺序可能需要手工调整,如失业保险
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/72802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习驱动的跨行业智能化革命:技术突破与实践创新

第一章 深度学习的技术范式演进与核心架构 1.1 从传统机器学习到深度神经网络的跨越 深度学习的核心在于通过多层次非线性变换自动提取数据特征,其发展历程可划分为三个阶段:符号主义时代的规则驱动(1950s-1980s)、连接主义时代的浅层网络(1990s-2000s)以及深度学习时代…

嵌入式学习笔记-卡尔曼滤波,PID,MicroPython

文章目录 卡尔曼滤波卡尔曼滤波的核心思想卡尔曼滤波的数学模型1. 状态转移模型&#xff08;预测系统状态&#xff09;2. 观测模型&#xff08;预测测量值&#xff09; 卡尔曼滤波的五个关键步骤1. 预测状态2. 预测误差协方差3. 计算卡尔曼增益4. 更新状态5. 更新误差协方差 卡…

一周热点-文本生成中的扩散模型- Mercury Coder

一、背景知识 在人工智能领域&#xff0c;文本生成模型一直是研究的热点。传统的大型语言模型多采用自回归架构&#xff0c;从左到右逐个预测下一个标记。这种模型虽然在生成连贯文本方面表现出色&#xff0c;但在速度上存在一定的局限性&#xff0c;因为它需要按顺序生成每个标…

Qt调试功能使用方法

QT编程环境 QT在Windows操作系统下的三种编程环境搭建。 方案编程环境编译器调试器1Qt CreatorMinGW GCCGDB2Qt CreatorMicrosoft Visual C CompilerDebugging Tools for Widows3Microsoft Visual Studio VS自带VS自带 方案提及的QT安装程序及压缩包均能在官网Index of /off…

vulnhub靶场之【digitalworld.local系列】的mercy靶机

前言 靶机&#xff1a;digitalworld.local-mercy&#xff0c;IP地址为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 kali采用VMware虚拟机&#xff0c;靶机选择使用VMware打开文件&#xff0c;都选择桥接网络 这里官方给的有两种方式&#xff0c;一…

Fiddler抓取App接口-Andriod/IOS配置方法

Andriod配置方法&#xff1a; 1&#xff09;确保手机和Fiddler所在主机在同一个局域网中 2&#xff09;获取Fiddler所在主机的ip地址&#xff0c;通过cmd命令进入命令编辑器&#xff0c;输入ipconfig -all&#xff0c;找到IPv4地址&#xff0c;记下该地址 3&#xff09;对手机…

步进电机软件细分算法解析与实践指南

1. 步进电机细分技术概述 步进电机是一种将电脉冲信号转换为角位移的执行机构&#xff0c;其基本运动单位为步距角。传统步进电机的步距角通常为 1.8&#xff08;对应 200 步 / 转&#xff09;&#xff0c;但在高精度定位场景下&#xff0c;这种分辨率已无法满足需求。细分技术…

C语言_数据结构总结2:动态分配方式的顺序表

0——静态分配内存的顺序表和动态分配内存的顺序表的相同之处和不同之处 相同之处 基本操作逻辑相同&#xff1a;无论是静态分配还是动态分配的顺序表&#xff0c;其核心的操作逻辑是一致的。例如插入操作都需要将插入位置之后的元素依次后移&#xff0c;删除操作都需要将删除…

Vue 与 Element UI 深度探秘:从 Array.isArray 到动态绑定的技术之旅!✨

以下是一篇深入的技术博客&#xff0c;基于我们对 compare-form.vue 和 <w-form-select.vue> 的所有讨论&#xff0c;涵盖 Array.isArray、option-label/option-value、:list 动态绑定、: 语法以及 Vue 2/3 兼容性等问题。博客风格轻松有趣&#xff0c;加入 SVG 图解和实…

计算机视觉|3D卷积网络VoxelNet:点云检测的革新力量

一、引言 在科技快速发展的背景下&#xff0c;3D 目标检测技术在自动驾驶和机器人领域中具有重要作用。 在自动驾驶领域&#xff0c;车辆需实时、准确感知周围环境中的目标物体&#xff0c;如行人、车辆、交通标志和障碍物等。只有精确检测这些目标的位置、姿态和类别&#x…

前端打包优化相关 Webpack

前端打包优化相关 Webpack 打包时间的优化&#xff08;基于 Vue CLI 4 Webpack 5&#xff09; 1. Webpack 配置减少打包时间 1.1 对 JS 配置&#xff1a;排除 node_modules 和 src 中的打包内容 在开发环境下&#xff0c;修改 Webpack 的 JS 规则&#xff0c;排除 /node_m…

leetcode69.x 的平方根

题目&#xff1a; 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。…

Docker 部署 MongoDB 并持久化数据

Docker 部署 MongoDB 并持久化数据 在现代开发中&#xff0c;MongoDB 作为 NoSQL 数据库广泛应用&#xff0c;而 Docker 则提供了高效的容器化方案。本教程将介绍如何使用 Docker 快速部署 MongoDB&#xff0c;并实现数据持久化&#xff0c;确保数据不会因容器重启或删除而丢失…

信奥赛CSP-J复赛集训(模拟算法专题)(3):P1089 [NOIP 2004 提高组] 津津的储蓄计划

信奥赛CSP-J复赛集训&#xff08;模拟算法专题&#xff09;&#xff08;3&#xff09;&#xff1a;P1089 [NOIP 2004 提高组] 津津的储蓄计划 题目描述 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300 300 300 元钱&#xff0c;津津会预算这个月的花销&#xff0…

日新F1、瑞研F600P 干线光纤熔接(熔接损耗最大0.03DB)

Ⅰ. 设备特性对比与实测验证 1. 日新F1&#xff08;两马达&#xff09;极限参数 切割角度&#xff1a;必须≤0.3&#xff08;双边累计误差&#xff1c;0.6&#xff09; ▶ 实测案例&#xff1a;切割0.35时&#xff0c;损耗波动达0.05-0.08dB&#xff08;超干线标准&#xff09…

【量化科普】Sharpe Ratio,夏普比率

【量化科普】Sharpe Ratio&#xff0c;夏普比率 &#x1f680;量化软件开通 &#x1f680;量化实战教程 在量化投资领域&#xff0c;夏普比率&#xff08;Sharpe Ratio&#xff09;是一个非常重要的风险调整后收益指标。它由诺贝尔经济学奖得主威廉F夏普&#xff08;William…

数据结构--【顺序表与链表】笔记

顺序表 template <class T> class arrList :public List<T> //表示 arrList 类以公有继承的方式继承自 List<T> 类 //公有继承意味着 List<T> 类的公共成员在 arrList 类中仍然是公共成员&#xff0c;受保护成员在 arrList 类中仍然是受保护成员。 { …

idea中隐藏目录

可能的解决步骤&#xff1a; 排除目录的方法是否在2021版本中有变化&#xff1f;应该没有&#xff0c;还是通过右键标记为排除。 用户可能想完全隐藏目录&#xff0c;比如在项目视图中不显示&#xff0c;这可能需要调整项目视图的设置&#xff0c;比如取消勾选“显示排除的文件…

AWS 如何导入内部SSL 证书

SSL 证书的很重要的功能就是 HTTP- > HTTPS, 下面就说明一下怎么导入ssl 证书,然后绑定证书到ALB. 以下示例说明如何使用 AWS Management Console 导入证书。 从以下位置打开 ACM 控制台:https://console.aws.amazon.com/acm/home。如果您是首次使用 ACM,请查找 AWS Cer…

2025最新群智能优化算法:基于RRT的优化器(RRT-based Optimizer,RRTO)求解23个经典函数测试集,MATLAB

一、基于RRT的优化器 基于RRT的优化器&#xff08;RRT-based Optimizer&#xff0c;RRTO&#xff09;是2025年提出的一种新型元启发式算法。其受常用于机器人路径规划的快速探索随机树&#xff08;RRT&#xff09;算法的搜索机制启发&#xff0c;首次将RRT算法的概念与元启发式…