最近公司HR和Finance想算员工的工作天数,想让我帮忙写些VBA,自己从网上找了下代码,自己再改改,以下来自网络。

计算两个日期之间的工作日,用VBA,因量大,最好用数组做

Sub kk()
Dim arr, i&, j&, m&
arr = Sheet2.Range("b3:f4")
For i = To UBound(arr)
m =
For j = arr(i, ) To arr(i, )
If Weekday(j) <> And Weekday(j) <> Then m = m +
Next
arr(i, ) = m
Next
Sheet2.Range("b3").Resize(UBound(arr), ) = arr
End Sub

根据他提供的方法,其实就是判断某个日期是星期一到星期五就日期计数加1,一直到结束,自己改良了下:

Sub m1()
For i = To
days = If Range("b" & i) <> "" And Range("c" & i) <> "" Then Dim d1, d2 As Date
d1 = Cells(i, "b")
d2 = Cells(i, "c") Do While d1 <= d2
If Weekday(d1, vbMonday) < Then
days = days +
End If
d1 = DateAdd("d", , d1)
Loop Range("d" & i) = days End If
Next
End Sub

上面的这个方法只算是可以运行,如果计算的天数多并且员工数多,则效果就差了,所以又有了下面的改良。

计算两个日期的整周数,然后乘5,在加上前后不够整周的零头。

Sub m2()
For i = To
If Range("b" & i) <> "" And Range("c" & i) <> "" Then
Dim d1, d2 As Date
d1 = Cells(i, "b")
d2 = Cells(i, "c")
days1 =
days2 =
weekcount = Do While Weekday(d1, vbMonday) < And d1 <= d2
If Weekday(d1, vbMonday) < Then
days1 = days1 +
End If
d1 = DateAdd("d", , d1)
Loop weekcount = DateDiff("w", d1, d2, vbMonday)
days2 = Weekday(d2, vbMonday)
days2 = IIf(days2 = , , IIf(days2 = , , days2))
Range("d" & i) = IIf(d1 >= d2, days1, days1 + * weekcount + days2) End If
Next End Sub

以上代码可以通过测试验证效率,如下代码

Sub Button2_Click()
d1 = Timer
m1
'm2
d2 = Timer
MsgBox d2 - d1
End Sub

参考出处:http://www.excelpx.com/thread-299850-1-1.html

用VBA计算两个日期之间的工作日(去掉周末两天)的更多相关文章

  1. excel2007灵活计算2个日期之间的工作日

    C1单元格公式:=NETWORKDAYS(A1,B1,$F$2:$F$10)+COUNTIFS($I$2:$I$3,">="&A1,$I$2:$I$3,"& ...

  2. mysql 计算两个日期之间的工作日天数

    创建透视表t500 建表 CREATE TABLE `t500` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE ...

  3. java中计算两个日期之间天数的程序设计。

    //用java编写出一个以下方法计算两个日期之间天数的程序设计. import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...

  4. iOS 计算两个日期之间的天数问题

    //获取当前时间若干年.月.日之后的时间 + (NSDate *)dateWithFromDate:(NSDate *)date years:(NSInteger)years months:(NSIn ...

  5. java计算两个日期之间相隔的天数

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  6. java计算两个日期之间相隔的月份(向下取整)

    最近需求里面有个需要计算两个日期之间相隔的月份,写起来还挺繁琐,需要将各种情况都要考虑到,写了一个作为以后自己的工具吧. //获取哪一天 public static int getDay(Date d ...

  7. java计算两个日期之间的相隔天数

    [原创] 之前在很多竞赛的题目中有这样饿一类题,计算给定两个日期之间的相隔天数,或者很多类似的题目,都是需要转化到这个问题上时,之前用c++写的时候思想是这样的,一个结构体,包括年月日,还有一个计算下 ...

  8. JS计算两个日期之间的天数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 计算两个日期之间相差的年数月数天数(JS实现)

    前言 如何计算年龄?我的第一直觉做法:(当前时间戳 - 出生时的时间戳)/ (365*86400)  所得结果向下取整.后来发现这种做法获得的结果不准确,不是多了一岁就是少了一岁,不能简单粗暴的这么处 ...

随机推荐

  1. MFC添加菜单资源与菜单执行函数的两种命令形式

    添加资源->新建一个菜单资源->选择相应的对话框 菜单的执行函数命令形式: COMMAD 是指点击菜单后的执行命令 UPDATE_COMMAND_UI 是指点击菜单后菜单状态的函数

  2. HDU 4772 Zhuge Liang&#39;s Password (简单模拟题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4772 题面: Zhuge Liang's Password Time Limit: 2000/1000 ...

  3. linux c编程:Posix共享内存区

    Posix共享内存区:共享内存是最快的可用IPC形式.它允许多个不相关(无亲缘关系)的进程去访问同一部分逻辑内存.如果需要在两个进程之间传输数据,共享内存将是一种效率极高的解决方案.一旦这样的内存区映 ...

  4. IDEA 配置Tomcat 跑Jeecg项目

    最近搞了个国人开发的开源项目,还不错,记录一下踩过得坑; 首先项目开源地址 下载就可以; 准备工作作者以介绍,不再详述; 1:我使用的IDEA作为开发工具- 首先导入pom.xml,下载依赖包(此过程 ...

  5. CentOS iSCSI服务器搭建------LUN篇

    先上服务器信息(你懂得) [root@node ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@node ~]# uname ...

  6. linux中什么是文件结构体?

    struct file结构体定义在include/linux/fs.h中定义.文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file.它由内核在打开文件时 ...

  7. python内置方法补充bin

    bin(x) 英文说明:Convert an integer number to a binary string. The result is a valid Python expression. I ...

  8. Android 4.4 U盘挂载【转】

    本文转载自:https://blog.csdn.net/mill_li/article/details/50134301 在Android4.4系统下,ES文件浏览器读取不到U盘,但是在设置-> ...

  9. Group By 和 Having, Where ,Order by执行顺序

    1.Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by. 首先where将最原始 ...

  10. Spring中ApplicationContext和beanfactory区别

    BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP ...