Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

有高手制作一个自定义一段时间有几个星期X的函数吗?

冯先生  发表于:2012-02-27 11:13:31  
复制

如题:有高手制作一个自定义一段时间有几个星期X的函数吗?
函数参数3个:起始日期,结束日期,整数类型(星期X)
返回值:整数类型  表示有几个星期X

用途:计算考勤用,我公司考勤计算是上月26日到当月25日为一个结算月份,服务性行业双休天不能休的而是要轮休的,比如张三休周三、周六,李四休周一周日......

发现如下一些excel公式、函数都不太精确:
=INT((A2-A1+14-星期X-WEEKDAY(A1,2))/7)
设A2为2012-2-25  A1为2012-1-26   
周二(参数是2)、周日(参数是7)实际各为4天,但函数结果为5天,不对了,是否今年闰年有点特殊?但考勤要求精确的

 

能否用Access自定义函数解决?

 

Top
大漠风 发表于:2012-02-27 11:18:00

给你一个别人的资料参考一下。

 

点击下载此附件

麥田 发表于:2012-02-27 16:48:00

Public Function SumDay(DateBegin As Date, DateEnd As Date, DayOfWeek As Byte) As Integer
    Dim datecount As Integer, count As Integer, i As Integer
    If DateBegin > DateEnd Then MsgBox "开始日期不能大于结束日期": Exit Function
    datecount = DateEnd - DateBegin
    For i = 0 To datecount
        If Weekday(DateBegin, vbMonday) = DayOfWeek Then count = count + 1    '每周从星期1开始计算
        DateBegin = DateBegin + 1
    Next
    SumDay = count
End Function

 

Sub a()
'3代表星期三,合起来意思就是某段时间内有一个星期三,以此类推
    MsgBox SumDay(#2/1/2012#, #2/29/2012#, 3)

End Sub



麥田 发表于:2012-02-27 17:11:18

'自定义函数
'==============================================================================
'-函数名称:         SumDay
'-功能描述:         将某一个时间段内日期统计有多少个星期几
'-输入参数:         日期型数值 如第一个控件输入 2012-2-1  第二个控件输入 2012-2-29
'-返回参数:         返回日期型数值为数字型型 即1 2 3 这种
'-使用示例1:         =SumDay([DateBegin],[DateEnd],3)    '返回值:5

'-使用示例2:         =SumDay(#2/1/2012#, #2/29/2012#, 3) '返回值:5
'-作    者:         叶海峰
'-创建日期;         2012-2-27 16:18:00
'==============================================================================

Public Function SumDay(DateBegin As Date, DateEnd As Date, DayOfWeek As Byte) As Integer
    Dim datecount As Integer, count As Integer, i As Integer
    If DateBegin > DateEnd Then MsgBox "开始日期不能大于结束日期": Exit Function
    datecount = DateEnd - DateBegin
    For i = 0 To datecount
        If Weekday(DateBegin + i, vbMonday) = DayOfWeek Then count = count + 1  '每周从星期1开始计算
         Next
    SumDay = count
End Function


Sub a()
'3代表星期三,合起来意思就是某段时间内有一个星期三,以此类推
    MsgBox SumDay(#2/1/2012#, #2/29/2012#, 3)

End Sub



麥田 发表于:2012-02-28 08:31:30

【Access自定义函数】统计某一个时间段内有多少个星期几\自定义一段时间有几个星期X的函数示例

http://www.accessoft.com/article-show.asp?id=6341



总记录:4篇  页次:1/1 9 1 :