VBA初学:机加车间个人绩效汇总(主要是涉及引用,还有计算)

news2024/11/27 10:37:30

几年前做的用EXCEL公式进行汇总,在最后汇总的时候,又要复制粘贴,又要要改公式中的单元格,有时会出错,所以干脆另外做个汇总的表格,当然,不是完全汇总,而是半汇总,源数据还是要从各个地方导出,然后将数据复制要各个工作表中去的

这个是数据源。这里已是将好几个地方的数据汇总在此了,界面上是个人绩效,是通过公式引用的,每个月都要新增、修改,挺烦的。挺想有个系统点一下就汇总,但小企业嘛,没办法,钉钉和ERP没打通,而且有很多因素在里面,很多数据要整理和调整一下才能用。
在这里插入图片描述
员工工时
在这里插入图片描述
出勤工时
在这里插入图片描述

标准工时差
在这里插入图片描述
数控提成
在这里插入图片描述

这个是做的汇总表,数据还是引用上面的已经汇总好的数据,做个引用和计算
在这里插入图片描述

Sub GETDATA()
 Dim SEARCHFILE As String, f As String
 Dim monthnum As Integer
 Dim targetbook As Workbook
 Dim sourceWorksheet As Worksheet, targetWorksheet As Worksheet
 Dim rng As Range, rngnew As Range
 Dim rowcount As Long, colcount As Long, i As Long, j As Long, k As Long, srowcount As Long, scolcount As Long
 Dim rownum As Integer, colnum As Integer
 Dim arr, sarr, tarr
 Dim GW As Integer, DJ As Integer
 Dim response As VbMsgBoxResult
 
 Set targetbook = ThisWorkbook
 Set targetWorksheet = ActiveSheet
 
 
Application.ScreenUpdating = False  '关闭屏幕更新,加快程序运行
Application.DisplayAlerts = False   '不显示警告信息
 
 
 ''''获取当前表格的月份,月份放在A1上
monthnum = targetWorksheet.Range("A1")

response = MsgBox("当前统计的是" & monthnum & "月份的数据吗?", vbYesNo)

If response = vbYes Then

'''''打开源文件

 SEARCHFILE = "机加车间产出量*.xlsx"

 f = Dir(ThisWorkbook.Path & "\" & SEARCHFILE)
    If f = "" Then
        MsgBox "源文件不存,请查看"
        Exit Sub
    Else
        Set sourceWorkbook = Workbooks.Open(ThisWorkbook.Path & "\" & f, Password:="chr", ReadOnly:=True)
    End If

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'''''''激活“员工工时表”,用以获取员工及工时信息
  Worksheets("员工工时").Activate

  Set sourceWorksheet = sourceWorkbook.Worksheets("员工工时")
  
''''对工时源数据进行相关处理
  With sourceWorksheet
    rowcount = .Range("A2").End(xlDown).Row
    colcount = .Range("A2").End(xlToRight).Column
    
'   获取月份的工时所在的列号
    For i = 1 To colcount
      If .Cells(2, i) = monthnum & "月" Or .Cells(2, i) = "0" & monthnum & "月" Then
      colnum = i
      End If
    Next
    
    '''''将数据复制
    Set rng = .Range(.Cells(2, 1), .Cells(rowcount - 1, 1))
    Set rng = Union(rng, .Range(.Cells(2, colnum), .Cells(rowcount - 1, colnum)))

  End With
   Set arr = rng


''复制数据
targetWorksheet.Activate
 With targetWorksheet
   .Range("A2").Select
    arr.Copy .Range("A2")
 End With
 
 
'判断工时是否为空,为空删除
rowcount = 0
rowcount = targetWorksheet.Range("B" & Rows.Count).End(xlUp).Row '获取目标表总行数
For j = rowcount To 2 Step -1
   If Range("B" & j).Value = "" Or IsEmpty(Range("B" & j).Value) Then
     Rows(j).Delete Shift:=xlUp
   End If
Next j


Set tarr = targetWorksheet.Range("A1:Z" & rowcount) '目标表范围

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''获取出勤工时

sourceWorksheet.Activate
Worksheets("出勤时间").Activate

'   获取月份的工时所在的列号
    For i = 1 To 24
      If Cells(3, i) = monthnum & "月" Or Cells(3, i) = "0" & monthnum & "月" Then
      scolnum = i
      End If
    Next

   srowcount = Cells(Rows.Count, 1).End(xlUp).Row '获取源表行数
'
ReDim sarr(1 To srowcount, 1 To 2)
Set sarr = ActiveSheet.Range(Cells(1, scolnum), Cells(srowcount, scolnum + 1)) '获取当月的出勤工时,装入sarr


targetWorksheet.Activate ''转回目标表
''遍历复制出勤工时
With targetWorksheet
For i = 2 To rowcount
    For j = 1 To srowcount
     If .Range("A" & i).Value = sarr(j, 1).Value2 Then
         .Range("C" & i).Value = sarr(j, 2).Value2
     End If
    
    Next
Next
End With

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''获取工时对比的工时差
sourceWorksheet.Activate
Worksheets("工时对比").Activate

'   获取月份的工时所在的列号
    For i = 1 To 24
      If Cells(1, i) = monthnum & "月" Or Cells(3, i) = "0" & monthnum & "月" Then
      scolnum = i
      End If
    Next

   srowcount = Cells(Rows.Count, 1).End(xlUp).Row '获取源表行数
'
ReDim sarr(1 To srowcount, 1 To 2)
Set sarr = ActiveSheet.Range(Cells(1, scolnum), Cells(srowcount, scolnum + 1)) '获取当月的工时差,装入sarr


targetWorksheet.Activate ''转回目标表
With targetWorksheet
''遍历复制工时差
For i = 2 To rowcount
    For j = 1 To srowcount
     If .Range("A" & i).Value = sarr(j, 1).Value2 Then
         .Range("D" & i).Value = sarr(j, 2).Value2
     End If
    
    Next
''''计算产出率和超产工时
  If IsNumeric(.Range("C" & i).Value) And .Range("C" & i).Value > 0 Then
  .Range("E" & i).Value = (.Range("B" & i).Value + .Range("D" & i).Value) / .Range("C" & i).Value * 100 & "%"
  .Range("F" & i).Value = Round((.Range("B" & i).Value + .Range("D" & i).Value - .Range("C" & i).Value) / 60, 2)
  End If
Next
End With

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''获取出勤工时

sourceWorksheet.Activate
Worksheets("数控组提成").Activate

Set arr = Range("A66:Z100")

'   获取月份的工时所在的列号
    For i = 1 To 24
      If arr(1, i) = monthnum & "月" Or arr(1, i) = "0" & monthnum & "月" Then
      scolnum = i
      End If
    Next

   srowcount = arr.Rows.Count '获取源表行数
'

ReDim sarr(1 To srowcount, 1 To 2)
For i = 1 To srowcount
   Set sarr(i, 1) = arr(i, 1) '获取姓名
   Set sarr(i, 2) = arr(i, scolnum + 1) '获取提成
Next

targetWorksheet.Activate ''转回目标表


''遍历复制提成
With targetWorksheet
For i = 2 To rowcount
 .Range("G" & i).Value = 0
    For j = 1 To srowcount

     If .Range("A" & i).Value = sarr(j, 1).Value2 Then
         .Range("G" & i).Value = sarr(j, 2).Value2

     End If
    
    Next
    
Next
End With

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''关闭源工作簿,并不保存更改
sourceWorkbook.Close SaveChanges:=False


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''设置岗位系数
DJ = Worksheets("参数").Range("E1") '获取工时单价

ReDim sarr(1 To 20, 1 To 2)
Set sarr = Worksheets("参数").Range("A1:B20") '获取岗位系数

rowcount = targetWorksheet.Range("A" & Rows.Count).End(xlUp).Row '重新获取目标表总行数

''理论绩效的计算
For i = 3 To rowcount
    Range("H" & i).Value = Range("F" & i).Value * 1 * DJ + Range("G" & i).Value
    For j = 1 To srowcount
     If Range("A" & i).Value = sarr(j, 1).Value2 Then
         Range("H" & i).Value = Range("F" & i).Value * sarr(j, 2).Value2 * DJ + Range("G" & i).Value
     End If
    
    Next
   Range("K" & i).FormulaR1C1 = "=RC[-3]+RC[-2]+RC[-1]" ''增加综合提成的公式
Next


 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''设置格式
Range("A2").Value = "姓名"
Range("B2").Value = "实作工时"
Range("C2").Value = "出勤工时"
Range("D2").Value = "工时差"
Range("E2").Value = "产出率"
Range("F2").Value = "超产工时(H)"
Range("G2").Value = "数控组提成"
Range("H2").Value = "理论绩效"
Range("I2").Value = "技能补贴"
Range("J2").Value = "质量扣除"
Range("K2").Value = "综合提成"

'调整格式
  moformat.moformat

ElseIf response = vbNo Then
        MsgBox "请重新选择"
End If


Application.ScreenUpdating = True
Application.DisplayAlerts = True


End Sub

三个按钮的代码

'汇总
Private Sub CommandButton1_Click()
  GETDATA.GETDATA
  CommandButton1.Enabled = False
  CommandButton3.Enabled = False
End Sub

'解锁
Private Sub CommandButton2_Click()
  Dim passInput As String
    passInput = InputBox("请输入解锁密码:", "password")

  If UCase(passInput) = "CHR" Then

  CommandButton1.Enabled = True
  CommandButton3.Enabled = True
  Else
  MsgBox "密码错误"
  End If
End Sub

'清除
Private Sub CommandButton3_Click()
  Dim rowcount As Integer
  
  rowcount = ActiveSheet.Range("A1").End(xlDown).Row
  
  
  If rowcount = 0 Then
  Exit Sub
  Else
    Rows("2:" & rowcount).Select
    Selection.Delete Shift:=xlUp
  End If
  CommandButton3.Enabled = False
End Sub

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

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

相关文章

计算机网络:408考研|湖科大教书匠|原理参考模型I|学习笔记

系列目录 计算机网络总纲领 计算机网络特殊考点 计算机网络原理参考模型I 计算机网络原理参考模型II 目录 系列目录更新日志数据链路层(Data Link Layer)一、基本概念二、三个重要问题三、 🌟点对点协议(PPP, Point-to-Point Protocol)四、 以太网五、802.11 无线局…

JavaScript算法之龟兔赛跑

简介:龟兔赛跑算法,又称弗洛伊德循环检测算法,是一种在链表中非常常用的算法。它基于运动学和直觉的基本定律。本文旨在向您简要介绍该算法,并帮助您了解这个看似神奇的算法。 假设高速公路上有两辆车。其中一辆的速度为 x,另一辆的速度为 2x。它们唯一能相遇的条件是它们…

2毛钱不到的2A同步降压DCDC电压6V频率1.5MHz电感2.2uH封装SOT23-5芯片MT3520B

前言 2A,2.3V-6V输入,1.5MHz 同步降压转换器,批量价格约0.18元 MT3520B 封装SOT23-5 丝印AS20B5 特征 高效率:高达 96% 1.5MHz恒定频率操作 2A 输出电流 无需肖特基二极管 2.3V至6V输入电压范围 输出电压低至 0.6V PFM 模式可在…

[Go Web] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施,不限定于某种注册中心,或数据库ORM等,所以您可以十分轻松地将任意库集成进项目里,与Kratos共同运作。 API -&…

算法基础-----【递归回溯】

1、递归 递归是一种算法结构,递归会出现在子程序中自己调用自己或间接地自己调用自己。递归就是分为递去和归来。 递去:递归的问题必须可以分解为若干规模较小,与原问题相同的子问题,这些子问题可以用相同的解题思路解决。 归来…

【Python】已解决:FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv‘

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:FileNotFoundError: [Errno 2] No such file or directory: ‘配置信息.csv’ 一、分析问题背景 在编写Python代码进行文件操作时,开发者可能会遇到…

【嵌入式DIY实例】-LCD ST7735显示LM35传感器数据

LCD ST7735显示LM35传感器数据 文章目录 LCD ST7735显示LM35传感器数据1、硬件准备与接线2、代码实现本文将介绍如何使用 LM35 模拟温度传感器构建一个简单的温度计,其中温度值打印在 ST7735 TFT 显示屏上(以摄氏度、开尔文度和华氏度为单位)。 ST7735 TFT是一款分辨率为128…

大数据组件--Hue

Apache Hue hue是一个集成化的大数据可视化软件,可以通过hue访问浏览操作主流的大数据生态圈软件。hue本身来自于cloudera后来贡献给了apachehue本身是一个web项目,基于python实现的,通过该web项目的UI集成了各个软件的UI 下面是一个hue调度…

CUDA 编程

## blocksize和gridsize设置 使用deviceQuery查看GPU相关信息(下图为1080 ti)blocksize的最大值建议不要超过Maximum number of threads per block(1024)由于每个block里的线程需要被分为数个wrap,而wrap size为32(Warp size&…

加密与安全_Java 加密体系 (JCA) 和 常用的开源密码库

文章目录 Java Cryptography Architecture (JCA)开源国密库国密算法对称加密(DES/AES⇒SM4)非对称加密(RSA/ECC⇒SM2)散列(摘要/哈希)算法(MD5/SHA⇒SM3) 在线生成公钥私钥对,RSA公私钥生成参考…

BGP中的TCP连接源地址问题

3.TCP连接源地址(用loop back地址是最优选择) 应用场景与理论: 由于BGP应用于大型网络中,为了避免单点失败,往往需要通过多条链路连接,当一条链路故障时候就用另一条链路继续工作,但是BGP又无法…

Navicat安装与连接教程

navicat 的安装 官网:https://www.navicat.com.cn/ 进入官网之后点击左上角的产品,然后往下滑动就可以看见许多类型,我们使用的是MongoDB数据库,所以就下载Navicat 17 for MongoDB 进入到这里之后,选择自己的系统版本…

llm-universe | 三. 搭建知识库

搭建知识库 一. 词向量和向量知识库1. 词向量1.词向量概念2.词向量优势3. 一般构建词向量的方法 2.向量数据库 二. 使用Embedding API三. 数据处理一.读取文档1. PDF 文档2.MD 文档 二.数据清洗三.文档分割 四.搭建并使用向量数据库一.前序工作二. 构建Chroma向量库三、向量检索…

农业新质生产力数据(2012-2022年)原始+dofile+测算数据集

数据简介:农业新质生产力是指在现代农业发展中,通过融合尖端科技、信息技术与创新管理模式,实现农业生产效率飞跃、产品质量显著提升及生产可持续性增强的一种革新性生产能力,农业新质生产力代表了从依赖传统资源转向依靠科技创新…

ctfshow web入门 sqli-labs web517--web524

web517 注入点id ?id-1’union select 1,2,3– 确认是否能够注入 ?id-1union select 1,database(),3-- 爆出库名 security爆出表名 ?id-1union select 1,(select group_concat(table_name) from information_schema.tables where table_schemasecurity),3-- emails,refer…

在WSL Ubuntu中启用root用户的SSH服务

在 Ubuntu 中,默认情况下 root 用户是禁用 SSH 登录的,这是为了增加系统安全性。 一、修改配置 找到 PermitRootLogin 行:在文件中找到 PermitRootLogin 配置项。默认情况下,它通常被设置为 PermitRootLogin prohibit-password 或…

【papaparse插件】前端预览csv文件

需求:就是可以在前端直接预览csv文件的内容 1.了解csv文件 1.1 csv文件和xlsx、xls文件的异同 首先了解一下csv文件和excel文件(xlsx,xls)有什么异同,简单来说他们都是存储表格数据的文件,csv只能显示较…

怎样规避液氮容器内部结霜的问题

液氮容器内部结霜问题一直是我们在使用液氮储存罐时遇到的一个棘手难题。液氮的极低温度使得容器内部很容易产生结霜现象,这不仅影响了容器的正常使用,还可能对内部样品或设备造成损坏。因此,如何有效规避液氮容器内部结霜问题成为了每个使用…

软件工程实验

实验环境和需求 用户可以对相片进行按类别管理,用户可以设定不同的类别,然后上传照片到相应的类别中,并能进行照片的删除,注释 运行 运行并访问 localhost 8090,图片在数据库中的信息是D:/upgrade 后面的内容 se…

FCN/UNET/deeplabv3 语义分割 标注 重叠/重复/覆盖 的处理方案,以及自定义覆盖优先级

在对FCN/UNET/deeplabv3等语义分割时,标准的要求是对每一个像素点分开标记,即不允许出现重叠覆盖的情形:如下图所示 但不可避免的人工标注时会出现一定的标注重叠/重复/覆盖甚至有的时候需要标注就是重复的,例如需要识别面板上赃物的情形,标记了面板和脏污,标注是重叠的,但是实…