ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]希望能够通过一个VBA函数计算出两个时间相差的工作小时数

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-11-3 13:53 | 显示全部楼层 |阅读模式

希望能够通过一个VBA函数计算出两个时间相差的工作小时数. (早上8:30到下午17:30是工作时间, 中午有一个小时的休息, 也就是说每天的工作小时是8小时)
我原来是用Excel本身的函数, 通过很多的转换 (把非工作时间转换成8:30 或者 17:30), 需要利用很多辅助列, 而且效率低. 希望有人能帮我一下, 谢谢.

cx3Noq4G.rar (2.44 KB, 下载次数: 25)


TA的精华主题

TA的得分主题

发表于 2006-11-3 14:36 | 显示全部楼层

请详细说明你的计算结果,及规律

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-3 15:08 | 显示全部楼层

好! 谢谢.

实现的内容应该是:

1. 先把日期和时间分离

2. 把两个日期相减, 得到工作天数(周六,日要扣掉)(我原来是用Networkdays()计算的), 然后乘以8(一天8各工作小时)

3. 把非工作时间的时间转成工作时间(比如19:45要先转换成17:30; 7:10要先转换成8:30), 然后把两个工作时间相减, 得到两个时间的工作小时差(可能会是负的)

4. 把上面两个相加就得到最后的结果了.(我是用Excel函数搞的, 快疯掉!)

谢谢.

[此贴子已经被作者于2006-11-3 16:04:31编辑过]

TA的精华主题

TA的得分主题

发表于 2006-11-3 22:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-4 16:56 | 显示全部楼层

谢谢, 我原来一直以为我函数还可以...看了这个....哎......回家研究一下...非常感谢!!!

K5=SUMPRODUCT(1*(ABS(ABS(MOD(I5+ROW(INDIRECT("1:"& TEXT((J5-I5)*1440,"0")))/1440,1)-0.5)-2.5/24)<=1/12))/60

------------------

解释一下:

TEXT((J5-I5)*1440,"0") 两个时间相差分钟数

ROW(INDIRECT("1:"& TEXT((J5-I5)*1440,"0"))) 按分钟取所有时间

I5+ROW(INDIRECT("1:"& TEXT((J5-I5)*1440,"0")))/1440 按天取所有时间

MOD(I5+ROW(INDIRECT("1:"& TEXT((J5-I5)*1440,"0")))/1440,1)排除日期干扰,取时间

ABS(MOD(I5+ROW(INDIRECT("1:"& TEXT((J5-I5)*1440,"0")))/1440,1)-0.5)某分钟跟12点相差时间绝对值

ABS(ABS(MOD(I5+ROW(INDIRECT("1:"& TEXT((J5-I5)*1440,"0")))/1440,1)-0.5)-2.5/24)<=1/12你的上班时间

SUMPRODUCT(1*(ABS(ABS(MOD(I5+ROW(INDIRECT("1:"& TEXT((J5-I5)*1440,"0")))/1440,1)-0.5)-2.5/24)<=1/12))累计真正工作分钟

SUMPRODUCT(1*(ABS(ABS(MOD(I5+ROW(INDIRECT("1:"& TEXT((J5-I5)*1440,"0")))/1440,1)-0.5)-2.5/24)<=1/12))/60 转换成小时

TA的精华主题

TA的得分主题

发表于 2006-11-4 18:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

vba函数计算两个时间相差的工作小时数(减一小时)

Function CalTime(TimeStart As Date, TimeEnd As Date)
   CalTime = TimeEnd - TimeStart
   CalTime = Int(CalTime * 24 * 100 + 0.5) / 100 - 1  '-1 为一个小时的休息。
End Function

TA的精华主题

TA的得分主题

发表于 2006-11-4 18:09 | 显示全部楼层

也可以在单元格(如C3)写:

=INT((B2-A2)*2400+0.5)/100-1

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-11-6 13:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
您这个是小时数...不是工作小时数吧? 没有看到你扣除周六/周日啊...

TA的精华主题

TA的得分主题

发表于 2023-3-26 22:54 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 16:18 , Processed in 0.046270 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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