用VBA计算两个日期之间的工作日(去掉周末两天)
最近公司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计算两个日期之间的工作日(去掉周末两天)的更多相关文章
- excel2007灵活计算2个日期之间的工作日
C1单元格公式:=NETWORKDAYS(A1,B1,$F$2:$F$10)+COUNTIFS($I$2:$I$3,">="&A1,$I$2:$I$3,"& ...
- mysql 计算两个日期之间的工作日天数
创建透视表t500 建表 CREATE TABLE `t500` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE ...
- java中计算两个日期之间天数的程序设计。
//用java编写出一个以下方法计算两个日期之间天数的程序设计. import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...
- iOS 计算两个日期之间的天数问题
//获取当前时间若干年.月.日之后的时间 + (NSDate *)dateWithFromDate:(NSDate *)date years:(NSInteger)years months:(NSIn ...
- java计算两个日期之间相隔的天数
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- java计算两个日期之间相隔的月份(向下取整)
最近需求里面有个需要计算两个日期之间相隔的月份,写起来还挺繁琐,需要将各种情况都要考虑到,写了一个作为以后自己的工具吧. //获取哪一天 public static int getDay(Date d ...
- java计算两个日期之间的相隔天数
[原创] 之前在很多竞赛的题目中有这样饿一类题,计算给定两个日期之间的相隔天数,或者很多类似的题目,都是需要转化到这个问题上时,之前用c++写的时候思想是这样的,一个结构体,包括年月日,还有一个计算下 ...
- JS计算两个日期之间的天数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 计算两个日期之间相差的年数月数天数(JS实现)
前言 如何计算年龄?我的第一直觉做法:(当前时间戳 - 出生时的时间戳)/ (365*86400) 所得结果向下取整.后来发现这种做法获得的结果不准确,不是多了一岁就是少了一岁,不能简单粗暴的这么处 ...
随机推荐
- 2015年11月26日 Java基础系列(七)正则表达式Regex
package com.demo.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @autho ...
- DNN优势
- IO密集型操作时,为什么线程比进程更好?
在IO密集型的操作时,进程线程都不会太占用CPU,但是进程消耗的资源比较多.
- Tensorflow官方文档中文版——第二章(瞎奖杯写)
包含如下几个部分: 1.面向机器学习初学者的 MNIST 初级教程 2.面向机器学习专家的 MNIST 高级教程 3.TensorFlow 使用指南 4.卷积神经网络 5.单词的向量表示(word e ...
- print函数详解及python打印99乘法表的不同方法
首先你需要了解print的原型,并且要知道在python2和python3中print函数功能不同,不只是表现在后面带不带()一方面! 在python3中,通过help(print)可以得到print ...
- Gem简介
Rubyems:简称gems是一个用于对rails组建近些年个打包的ruby打包系统,它提供了一个分发ruby程序喝库的标准格式,还提供了一个管理程序包的工具.Rubyems的功能类似于linux下的 ...
- 数据库基本表创建 完整性约束 foreign Key
理解以下几张表的内容,根据实际情况设计属性名.数据类型.及各种完整性约束(primary key.foreign key.not null.unique.check),用数据定义语言实现,然后设计实验 ...
- 20145229吴姗珊 《Java程序设计》第6周学习总结
20145229吴姗珊 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入\输出 1.java将输入\输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象 2.输入串 ...
- The Great Pan
The Great Pan Time Limit:1000MS Memory Limit:65536KB ...
- HDU 4001 To Miss Our Children Time(2011年大连网络赛 A 贪心+dp)
开始还觉得是贪心呢... 给你三类积木叫你叠楼房,给你的每个积木包括四个值:长 宽(可以互换) 高 类型d d=0:你只能把它放在地上或者放在 长 宽 小于等于 自己的积木上面 d=1:你只能把它放在 ...