当前位置: 首页 > article >正文

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

相关文章:

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

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

【A2DP】SBC 编解码器互操作性要求详解

目录 一、SBC编解码器互操作性概述 二、编解码器特定信息元素(Codec Specific Information Elements) 2.1 采样频率(Sampling Frequency) 2.2 声道模式(Channel Mode) 2.3 块长度(Block Length) 2.4 子带数量(Subbands) 2.5 分配方法(Allocation Method) 2…...

redis数据类型以及底层数据结构

redis数据类型以及底层数据结构 String&#xff1a;字符串类型&#xff0c;底层就是动态字符串&#xff0c;使用sds数据结构 Map:有两种数据结构&#xff1a;1.压缩列表&#xff1a;当hash结构中存储的元素个数小于了512个。并且元 …...

R软件线性模型与lmer混合效应模型对生态学龙类智力测试数据层级结构应用

全文链接&#xff1a;https://tecdat.cn/?p40925 在生态与生物学研究中&#xff0c;数据常呈现复杂结构特征。例如不同种群、采样点或时间序列的观测数据间往往存在相关性&#xff08;点击文末“阅读原文”获取完整代码、数据、文档&#xff09;。 传统线性模型在处理这类非独…...

打造智能聊天体验:前端集成 DeepSeek AI 助你快速上手

DeepSeek AI 聊天助手集成指南 先看完整效果&#xff1a; PixPin_2025-02-19_09-15-59 效果图&#xff1a; 目录 项目概述功能特点环境准备项目结构组件详解 ChatContainerChatInputMessageBubbleTypeWriter 核心代码示例使用指南常见问题 项目概述 基于 Vue 3 TypeScrip…...

C语言-语法

数据类型 字符串 C中字符串拼接不用+号,直接使用空格。 char* str = "hello" "world"; 换行链接,加上\就不会报错 char* longStr = "00000000000000000000000000000\ 00000000000000000000000000000"; typedef C 语言提供了 typedef …...

Unity组件TrailRenderer屏幕滑动拖尾

Unity组件TrailRenderer屏幕滑动拖尾 介绍制作总结 介绍 今天要做一个拖动效果&#xff0c;正好用到了TrailRenderer这个组件&#xff0c;正好分享一下 效果参考如下&#xff1a; 制作 1.创建空物体TrailObject添加组件TrailRenderer 下面的材质可以根据自己想要制作的效果去…...

基于昇腾MindIE与GPUStack的大模型容器化部署从入门到入土

引言 昇腾MindIE作为华为面向大模型推理的高性能引擎&#xff0c;结合GPUStack的集群管理能力&#xff0c;能够实现多机多卡的高效资源调度与模型服务化部署。本文将以DeepSeek R1-32B模型为例&#xff0c;详细解析从环境准备到服务验证的全流程实践&#xff0c;涵盖昇腾NPU驱…...

大模型信息整理

1. Benchmarks Reasoning, conversation, Q&A benchmarks HellaSwagBIG-Bench HardSQuADIFEvalMuSRMMLU-PROMT-BenchDomain-specific benchmarks GPQAMedQAPubMedQAMath benchmarks GSM8KMATHMathEvalSecurity-related benchmarks PyRITPurple Llama CyberSecEval2. 国内外…...

【Tools】Windows下Git 2.48安装教程详解

00. 目录 文章目录 00. 目录01. Git简介02. Git参考资料03. Git安装04. Git测试05. 附录 01. Git简介 Git(读音为/gɪt/。)是一个开源的分布式版本控制系统&#xff0c;可以有效、高速的处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核…...

【linux网络编程】套接字编程API详细介绍

在C语言中&#xff0c;套接字&#xff08;Socket&#xff09;编程主要用于网络通信&#xff0c;尤其是在基于TCP/IP协议的应用程序开发中。常用的套接字编程API主要基于Berkeley Sockets&#xff08;伯克利套接字&#xff09;接口&#xff0c;这些函数通常在<sys/socket.h&g…...

护网中shiro常问的问题

1. 漏洞原理 Apache Shiro 是一个强大的 Java 安全框架&#xff0c;提供身份验证、授权、加密及会话管理功能。Shiro 使用 rememberMe 机制来存储用户会话信息&#xff0c;该机制依赖于加密后的 Cookie。当攻击者能够控制 Cookie 并且服务器使用了不安全的反序列化机制时&…...

fastapi房产销售系统

说明&#xff1a; 我希望用fastapi写几个接口&#xff0c;查询房产交易系统的几条数据&#xff0c;然后在postman里面测试 查询客户所有预约记录&#xff08;含房源信息&#xff09;需要对应销售经理查询客户所有订单&#xff08;含房源信息&#xff09;统计销售经理名下所有房…...

swift -(5) 汇编分析结构体、类的内存布局

一、结构体 在 Swift 标准库中&#xff0c;绝大多数的公开类型都是结构体&#xff0c;而枚举和类只占很小一部分 比如Bool、 Int、 Double、 String、 Array、 Dictionary等常见类型都是结构体 ① struct Date { ② var year: Int ③ var month: Int ④ …...

软件工程笔记下

从程序到软件☆ 章节 知识点 概论☆ 软件的定义&#xff0c;特点&#xff0c;生存周期。软件工程的概论。软件危机。 1.☆软件&#xff1a;软件程序数据文档 &#xff08;1&#xff09;软件&#xff1a;是指在计算机系统的支持下&#xff0c;能够完成特定功能与性能的包括…...

ElementUI 级联选择器el-cascader启用选择任意一级选项,选中后关闭下拉框

1、启用选择任意一级选项 在 el-cascader 标签上加上配置项&#xff1a; :props"{ checkStrictly: true }"例如&#xff1a; <el-cascaderref"selectedArrRef"v-model"selectedArr":options"optionsList":props"{ checkStri…...

【项目日记(九)】细节优化与对比测试

前言 上面我们对申请和释放的过程都已写完&#xff0c;并进行了单线程的联调。本期我们来对一些细节进行优化以及与malloc 进行对比测试。 目录 前言 一、大于256KB的内存申请问题 • 申请过程 • 释放过程 • 简单测试 二、使用定长内存池脱离使用new 三、优化释放对…...

PyTorch系列教程:编写高效模型训练流程

当使用PyTorch开发机器学习模型时&#xff0c;建立一个有效的训练循环是至关重要的。这个过程包括组织和执行对数据、参数和计算资源的操作序列。让我们深入了解关键组件&#xff0c;并演示如何构建一个精细的训练循环流程&#xff0c;有效地处理数据处理&#xff0c;向前和向后…...

10 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar头像组件开发教程(一)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 目录 第一篇&#xff1a;Avatar 组件基础概念与设计1. 组件概述2. 接口设计2.1 形状类型定义2.2 尺寸类型定义2.3 组件属性接口 3. 设计原则4. 使用…...

C++编程指南24 - 避免线程频繁的创建和销毁

一&#xff1a;概述 线程的创建和销毁是昂贵的操作&#xff0c;尤其在多线程程序中频繁创建和销毁线程时&#xff0c;可能会导致性能问题。 二&#xff1a;示例 这段代码中&#xff0c;dispatcher 每收到一个 Message 就创建一个新的线程来处理这个消息。这种方式虽然简单&…...

C语言——【全局变量和局部变量】

&#x1f680;个人主页&#xff1a;fasdfdaslsfadasdadf &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 1.&#x1f680; 全局变量2.&#x1f680; 局部变量3.&#x1f680; 局部和全局变量&#xff0c;名字相同呢? 1.&#x1f680; 全局变量 全局变量&…...

浅谈 DeepSeek 对 DBA 的影响

引言&#xff1a; 在人工智能技术飞速发展的背景下&#xff0c;DeepSeek 作为一款基于混合专家模型&#xff08;MoE&#xff09;和强化学习技术的大语言模型&#xff0c;正在重塑传统数据库管理&#xff08;DBA&#xff09;的工作模式。通过结合其强大的自然语言处理能力、推理…...

Web服务器配置

配置虚拟主机&#xff1a;启动XAMPP的Apache&#xff0c;在htdocs目录中创建www.php.test目录 创建index.html&#xff0c;内容为“Welcome www.php.test”&#xff0c;访问两个虚拟主机 访问权限控制 在Apache的主配置文件httpd.conf中&#xff0c;默认已经添加了一些目录的…...

DeepSeek-R1本地化部署(Mac)

一、下载 Ollama 本地化部署需要用到 Ollama&#xff0c;它能支持很多大模型。官方网站&#xff1a;https://ollama.com/ 点击 Download 即可&#xff0c;支持macOS,Linux 和 Windows&#xff1b;我下载的是 mac 版本&#xff0c;要求macOS 11 Big Sur or later&#xff0c;Ol…...

Java面试第九山!《SpringBoot框架》

引言 你是否经历过这样的场景&#xff1f;想快速开发一个Java Web应用&#xff0c;却被XML配置、依赖冲突、服务器部署搞得焦头烂额。Spring Boot的诞生&#xff0c;正是为了解决这些"配置地狱"问题。 对比项Spring Boot传统 Spring配置复杂度自动配置&#xff0c;…...

Java 中数据脱敏的实现

数据脱敏 首先&#xff0c;要思考一个问题&#xff0c;SpringBoot 查询到的一条数据是一个 Java 对象&#xff0c;为什么返回给前端时候&#xff0c;前端拿到的却是 JSON 格式的数据呢&#xff1f; 是因为 SpringBoot 默认采用了 Jackson 作为序列化器&#xff0c;而 Jackson…...

PyQt组件间的通信方式

PyQt组件间的通信方式 PyQt组件间的通信方式 1. 组件介绍 1.1 组件的定义1.2 组件的分类 2. 组件的通信方式 2.1 信号与槽&#xff08;Signal & Slot&#xff09; 1. 组件介绍 在 Qt 框架中&#xff0c;‌组件‌&#xff08;Component&#xff09;是构建图形用户界面&am…...

视频理解开山之作 “双流网络”

1 论文核心信息 1.1核心问题 任务&#xff1a;如何利用深度学习方法进行视频中的动作识别&#xff08;Action Recognition&#xff09;。挑战&#xff1a; 视频包含时空信息&#xff0c;既需要捕捉静态外观特征&#xff08;Spatial Information&#xff09;&#xff0c;也需要…...

基于Matlab的人脸识别的二维PCA

一、基本原理 传统 PCA 在处理图像数据时&#xff0c;需将二维图像矩阵拉伸为一维向量&#xff0c;这使得数据维度剧增&#xff0c;引发高计算成本与存储压力。与之不同&#xff0c;2DPCA 直接基于二维图像矩阵展开运算。 它着眼于图像矩阵的列向量&#xff0c;构建协方差矩阵…...

Java直通车系列15【Spring MVC】(ModelAndView 使用)

目录 1. ModelAndView 概述 2. ModelAndView 的主要属性和方法 主要属性 主要方法 3. 场景示例 示例 1&#xff1a;简单的 ModelAndView 使用 示例 2&#xff1a;使用 ModelAndView 处理列表数据 示例 3&#xff1a;使用 ModelAndView 处理异常情况 1. ModelAndView 概…...