ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1603|回复: 1

[求助] 关于工作年限的计算

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-12-9 22:07 | 显示全部楼层 |阅读模式
公式还有些问题,请各位完善一下

缴费年限如何计算.rar

6.43 KB, 下载次数: 24

TA的精华主题

TA的得分主题

发表于 2015-12-12 17:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
用自定义函数做,效果如下——
QQ截图20151212174158.png

自定义函数的代码如下——
  1. Option Explicit

  2. Function SumMonths(rngCritera As Range, rngData As Range)
  3. Dim datStart As Date, datEnd As Date, strTemp$, k As Range, d1 As Date, d2 As Date
  4. If InStr(rngCritera.Value, "至") > 0 Then
  5.   datStart = CDate(RegTest(rngCritera.Value, "\d{4}年\d+月\d+日", 0))
  6.   datEnd = CDate(RegTest(rngCritera.Value, "\d{4}年\d+月\d+日", 1))
  7. ElseIf InStr(rngCritera.Value, "前") > 0 Or InStr(rngCritera.Value, "底") > 0 Then
  8.   datStart = DateSerial(1900, 1, 1)
  9.   strTemp = RegTest(rngCritera.Value, "(\d{4}年\d+月\d+日.)|(\d{4}年后)|(\d{4}年\d+月.)", 0)
  10.   strTemp = Replace(strTemp, "月底", "月28日底")
  11.   strTemp = Replace(strTemp, "月前", "月28日前")
  12.   datEnd = CDate(Left(strTemp, Len(strTemp) - 1))
  13. ElseIf InStr(rngCritera.Value, "后") > 0 Then
  14.   strTemp = RegTest(rngCritera.Value, "(\d{4}年\d+月\d+日后)|(\d{4}年后)|(\d{4}年\d+月后)", 0)
  15.   strTemp = Replace(strTemp, "年后", "年1月1日后")
  16.   datStart = CDate(Left(strTemp, Len(strTemp) - 1))
  17.   datEnd = Date
  18. End If
  19. If Day(datStart) > 1 Then datStart = DateSerial(Year(datStart), Month(datStart) + 1, 1)
  20. If Day(datEnd) > 1 Then datEnd = DateSerial(Year(datEnd), Month(datEnd) + 1, 1)
  21. For Each k In rngData.Columns(1).Cells
  22.   If Len(k.Value) > 0 Then
  23.     d1 = Application.Max(datStart, CDate(Format(k.Value, "0000年00月")))
  24.     d2 = Application.Min(datEnd, DateAdd("m", 1, CDate(Format(k.Offset(0, 1).Value, "0000年00月"))))
  25.     SumMonths = SumMonths + IIf(d1 < d2, DateDiff("m", d1, d2), 0)
  26.   End If
  27. Next
  28. End Function

  29. Function RegTest(strText As String, strPattern As String, intItem As Integer)
  30. '定义正则表达式对象
  31. Dim oRegExp As Object
  32. '定义匹配字符串集合对象
  33. Dim oMatches As Object
  34. '创建正则表达式
  35. Set oRegExp = CreateObject("vbscript.regexp")
  36. With oRegExp
  37.   '设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
  38.   .Global = True
  39.   '设置是否区分大小写,True表示不区分大小写, False表示区分大小写
  40.   .IgnoreCase = True
  41.   '设置要查找的字符模式
  42.   .Pattern = strPattern
  43.   '对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空
  44.   Set oMatches = .Execute(strText)
  45.   RegTest = oMatches(intItem)
  46. End With
  47. Set oRegExp = Nothing
  48. Set oMatches = Nothing
  49. End Function
复制代码


缴费年限如何计算.zip

16.05 KB, 下载次数: 19

含VBA脚本,打开需要启用宏

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-29 02:59 , Processed in 0.028245 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表