最近公司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. 2015年11月26日 Java基础系列(七)正则表达式Regex

    package com.demo.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @autho ...

  2. DNN优势

  3. IO密集型操作时,为什么线程比进程更好?

    在IO密集型的操作时,进程线程都不会太占用CPU,但是进程消耗的资源比较多.

  4. Tensorflow官方文档中文版——第二章(瞎奖杯写)

    包含如下几个部分: 1.面向机器学习初学者的 MNIST 初级教程 2.面向机器学习专家的 MNIST 高级教程 3.TensorFlow 使用指南 4.卷积神经网络 5.单词的向量表示(word e ...

  5. print函数详解及python打印99乘法表的不同方法

    首先你需要了解print的原型,并且要知道在python2和python3中print函数功能不同,不只是表现在后面带不带()一方面! 在python3中,通过help(print)可以得到print ...

  6. Gem简介

    Rubyems:简称gems是一个用于对rails组建近些年个打包的ruby打包系统,它提供了一个分发ruby程序喝库的标准格式,还提供了一个管理程序包的工具.Rubyems的功能类似于linux下的 ...

  7. 数据库基本表创建 完整性约束 foreign Key

    理解以下几张表的内容,根据实际情况设计属性名.数据类型.及各种完整性约束(primary key.foreign key.not null.unique.check),用数据定义语言实现,然后设计实验 ...

  8. 20145229吴姗珊 《Java程序设计》第6周学习总结

    20145229吴姗珊 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入\输出 1.java将输入\输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象 2.输入串 ...

  9. The Great Pan

                                             The Great Pan Time Limit:1000MS     Memory Limit:65536KB    ...

  10. HDU 4001 To Miss Our Children Time(2011年大连网络赛 A 贪心+dp)

    开始还觉得是贪心呢... 给你三类积木叫你叠楼房,给你的每个积木包括四个值:长 宽(可以互换) 高 类型d d=0:你只能把它放在地上或者放在 长 宽 小于等于 自己的积木上面 d=1:你只能把它放在 ...