vba之与excel司龄计算

news/2024/7/21 4:30:37 标签: excel
Sub 插入新列并计算司龄()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim entryDate As Date
    Dim yearsOfService As Double
    
    ' 指定要操作的工作表
    Set ws = ThisWorkbook.Sheets("测试") '!!!!!!!!必须为此表名
    If IsError(Application.Match("司龄", ws.Rows(1), 0)) Then
    
    ' 在最后一列右侧插入两个新列
    ws.Cells(1, ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column + 1).Value = "司龄"
    ws.Cells(1, ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column + 1).Value = "司龄分段"

    End If
    Dim sllb As Variant
    Dim slfd As Variant
    Dim sl_start As Variant
    sllb = Application.Match("司龄", ws.Rows(1), 0)
    slfd = Application.Match("司龄分段", ws.Rows(1), 0)
    sl_start = Application.Match("进入集团日期", ws.Rows(1), 0) ' 进入集团日期所在的列,查找
    
    ws.Columns(sllb).Select
    With Selection
    .HorizontalAlignment = Excel.xlCenter
    .Font.Name = "宋体"
   End With
   
    ws.Columns(slfd).Select
    With Selection
    .VerticalAlignment = Excel.xlCenter
    .Font.Name = "宋体"
   End With

    
    
    
    ' 获取最后一行
    lastRow = ws.Cells(ws.Rows.Count, sl_start).End(xlUp).Row
    'ws.Cells(3, 6) = lastRow
    
    ' 计算司龄并写入新列
    For i = 2 To lastRow
        entryDate = ws.Cells(i, sl_start).Value  ' 进入集团日期所在的列,这里假设是第1列
        yearsOfService = Round(((Date - entryDate) / 365.25), 1)  ' 计算司龄,保留1位小数
        
        If yearsOfService - Int(yearsOfService) < 0.5 Then
            yearsOfService = Int(yearsOfService) + 0.5 ' 小数位小于0.5则按0.5年
        Else
            yearsOfService = Int(yearsOfService) + 1  ' 小数位大于0.5则按1年
        End If
        'ws.Cells(2, 5) = sllb
        'ws.Cells(i, sllb).Font.Name = "宋体"

        ws.Cells(i, sllb).Value = yearsOfService   ' 写入司龄列
        
        ' 计算司龄分段并写入新列
        'ws.Cells(i, slfd).Font.Name = "宋体"
        If yearsOfService < 5 Then
            ws.Cells(i, slfd).Value = "<5年"
        ElseIf yearsOfService < 10 Then
            ws.Cells(i, slfd).Value = "5~10年"
        ElseIf yearsOfService < 15 Then
            ws.Cells(i, slfd).Value = "10~15年"
        ElseIf yearsOfService < 20 Then
            ws.Cells(i, slfd).Value = "15~20年"
        Else
            ws.Cells(i, slfd).Value = ">20年"
        End If
    Next i
    
End Sub

这段VBA代码实现了在指定工作表中插入两列,并计算员工的司龄并写入新插入的列中。具体实现步骤如下:

  1. 首先指定要操作的工作表为"测试"。
  2. 判断是否已存在"司龄"和"司龄分段"列,若不存在,则在最后一列的右侧插入这两个新列。
  3. 获取进入集团日期所在的列,并将司龄和司龄分段列的文字格式设置为居中和宋体。
  4. 获取最后一行的行号。
  5. 对每一行进行循环,获取进入集团日期的数值,并根据当前日期计算司龄,保留小数点后一位。
  6. 根据司龄的值判断司龄分段,并将计算结果写入司龄和司龄分段列中。

总体来说,这段代码实现了在指定工作表中添加司龄和司龄分段两列,并根据员工的进入集团日期计算其司龄并分类。


http://www.niftyadmin.cn/n/5300323.html

相关文章

vfb控件数组的实现原理(visual freebasic ide),64位VB6 vb7

vfb控件数组的实现原理(visual freebasic ide),64位VB6 vb7 Sub Form1_Command1_BN_Clicked(ControlIndex As Long, hWndForm As hWnd, hWndControl As hWnd)MsgBox ("Command1 ControlIndex" & ControlIndex & ",Command1(x).Caption " & …

算法——队列+宽搜(BFS)

队列这种数据结构大都服务于一个算法——宽搜&#xff08;BFS&#xff09;。宽搜还可以运用到二叉树、图、迷宫最短路径问题、拓扑排序等等 N叉数的层序遍历 N叉树的层序遍历 题目解析 给定一个 N 叉树&#xff0c;返回其节点值的_层序遍历_。&#xff08;即从左到右&#…

md文件图片上传方案:Github+PicGo 搭建图床

文章目录 1. PicGo 下载2. 配置Github3. 配置PicGo4. PicGo集成Typora4.1 picGo监听端口设置 5. 测试 1. PicGo 下载 下载地址&#xff1a;https://molunerfinn.com/PicGo/ 尽量下载稳定版本 2. 配置Github 1. 创建一个新仓库&#xff0c;用于存放图片 2. 生成一个token&a…

M3u8视频地址如何转为mp4视频

在当今数字化的时代&#xff0c;视频格式的转换已成为日常需求。M3u8格式的视频由于其分段的特性&#xff0c;常常给播放和编辑带来不便。而MP4格式则因其通用性和高质量而广受欢迎。那么&#xff0c;如何将M3u8视频地址转换为MP4格式呢&#xff1f;接下来&#xff0c;我们将为…

WebSocket项目中难点与解决方法

1、难点一&#xff1a;连接建立与保持 问题描述&#xff1a; 在项目中&#xff0c;我们发现WebSocket初始连接负担较大&#xff0c;主要体现在频繁的连接建立和保持连接的开销较高。 解决方法&#xff1a; 1. 连接池管理&#xff1a;我们引入了websocket-pool库&#xff0c;通…

Noisy DQN 跑 CartPole-v1

gym 0.26.1 CartPole-v1 NoisyNet DQN NoisyNet 就是把原来Linear里的w/b 换成 mu sigma * epsilon, 这是一种非常简单的方法&#xff0c;但是可以显著提升DQN的表现。 和之前最原始的DQN相比就是改了两个地方&#xff0c;一个是Linear改成了NoisyLinear,另外一个是在agent在t…

如何在ArcGIS Pro中指定坐标系

在进行制图的时候&#xff0c;为了实现某些特定的效果&#xff0c;需要指定特定的坐标系&#xff0c;但是现有的数据可能不是所需要的坐标系&#xff0c;这时候就需要对现有的数据坐标系进行处理&#xff0c;这里为大家介绍一下ArcGIS Pro中指定坐标系的方法&#xff0c;希望能…

120基于matlab的LMS自适应滤波算法

基于matlab的LMS自适应滤波算法&#xff0c;如、解相关LMS算法&#xff0c;滤波型LMS算法&#xff0c;变换域LMS算法&#xff0c;输出滤波前后及学习曲线图。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 120自适应滤波算法变换域LMS算法 (xiaohongshu.com…