VBA如何判断一个日期是啥星期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA如何判断一个日期是啥星期相关的知识,希望对你有一定的参考价值。

我想判断三列日期,验证它们知否满足下面的条件,能否给个代码,谢谢了。

日期类型例:2014/12/4

第一列:该日期是否为该月的第一个星期四

第二列:该日期是否是每个月的15日,如果周末或美国假期,这将是14日或13日。

第三列:判断该列是否都为周三,并且该列每个日期上下相邻的两个日期都是连续的间隔两周的日期,如:2013/4/10,2013/4/24,2013/5/8。

还有这个判断用按钮实现,有错误的位置变红,这样做好么?

麻烦了,有些复杂,我多加些分,谢谢了。

假设数据分别在A、B、C列,请自行修改代码中的行数

另外,第二列中关于判断“是否为美国假期”这个要求,似乎没有更好的解决办法,建议建立一个美国假日列表,然后根据列表再作判断。
Sub CHK_DATE()
Dim rng As Range
Dim wsf As WorksheetFunction
Set wsf = WorksheetFunction
\'第一列: 该日期是否为该月的第一个星期四
For Each rng In Range("A1:A100")
If IsDate(rng) Then \' 如果不是日期数据,则不予处理
If Weekday(rng, vbThursday) = 1 And Month(rng - 7) = Month(rng) Then
rng.Interior.ColorIndex = xlNone \' 设置为无底纹
Else
rng.Interior.Color = vbRed \' 设置为红色底纹
End If
End If
Next rng
\'第二列:该日期是否是每个月的15日,如果周末,这将是14日或13日。
For Each rng In Range("B1:B100")
If IsDate(rng) Then \' 如果不是日期数据,则不予处理
If Day(rng) = (15 - wsf.Max(0, Weekday(rng, vbMonday) - 5)) Then
rng.Interior.ColorIndex = xlNone \' 设置为无底纹
Else
rng.Interior.Color = vbRed \' 设置为红色底纹
End If
End If
Next rng
\'第三列:判断该列是否都为周三,并且该列每个日期上下相邻的两个日期都是连续的间隔两周的日期,如:2013/4/10,2013/4/24,2013/5/8。
For Each rng In Range("C1:C100")
If IsDate(rng) Then \' 如果不是日期数据,则不予处理
If (Weekday(rng, vbWednesday) = 1) _
And (rng - 14 = rng.Offset(-1, 0)) _
And (rng + 14 = rng.Offset(1, 0)) Then

rng.Interior.ColorIndex = xlNone \' 设置为无底纹
Else
rng.Interior.Color = vbRed \' 设置为红色底纹
End If
End If
Next rng
End Sub

追问

如果美国假期,我列入了一列,是不是在第二列的 设置为无底纹 位置还要进行一下循环判断,谢谢了,我再加50分

追答

不用另外进行循环判断

就在第二个循环中添加判断即可

思路是这样:

添加一个工作表,更名为“US HOLIDAY”

然后在A列输入每个美国假期(如果本身就是周末就不用输入)

B列输入每个假期对应的前一个工作日期

然后代码可修改为:

Sub CHK_DATE()
Dim rng As Range, rng2 As Range
Dim wsf As WorksheetFunction
Set wsf = WorksheetFunction
\'第一列: 该日期是否为该月的第一个星期四
For Each rng In Range("A1:A100")
If IsDate(rng) Then \' 如果不是日期数据,则不予处理
If Weekday(rng, vbThursday) = 1 And Month(rng - 7) = Month(rng) Then
rng.Interior.ColorIndex = xlNone \' 设置为无底纹
Else
rng.Interior.Color = vbRed \' 设置为红色底纹
End If
End If
Next rng
\'第二列:该日期是否是每个月的15日,如果周末,这将是14日或13日。
For Each rng In Range("B1:B100")
If IsDate(rng) Then \' 如果不是日期数据,则不予处理
Set rng2 = Worksheets("US HOLIDAY").Range("A:A").Find(rng.Text, lookat:=xlWhole)

If Day(rng) = (15 - wsf.Max(0, Weekday(rng, vbMonday) - 5)) _
Or ((Not (rng2 Is Nothing)) And (rng = rng2.Offset(0, 1))) _
Then
rng.Interior.ColorIndex = xlNone \' 设置为无底纹
Else
rng.Interior.Color = vbRed \' 设置为红色底纹
End If

End If
Next rng
\'第三列:判断该列是否都为周三,并且该列每个日期上下相邻的两个日期都是连续的间隔两周的日期,如:2013/4/10,2013/4/24,2013/5/8。
For Each rng In Range("C1:C100")
If IsDate(rng) Then \' 如果不是日期数据,则不予处理
If (Weekday(rng, vbWednesday) = 1) _
And (rng - 14 = rng.Offset(-1, 0)) _
And (rng + 14 = rng.Offset(1, 0)) Then

rng.Interior.ColorIndex = xlNone \' 设置为无底纹
Else
rng.Interior.Color = vbRed \' 设置为红色底纹
End If
End If
Next rng
End Sub

参考技术A 啊哦,这个转换很简单,教程看这里:http://jingyan.baidu.com/search?word=VBA%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%E4%B8%80%E4%B8%AA%E6%97%A5%E6%9C%9F%E6%98%AF%E6%98%9F%E6%9C%9F%E5%87%A0

js中如何根据日期算出星期几

参考技术A <!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <title>Document</title>

</head>

<body>

    <input id="y" type="text" placeholder="年" /> <input id="m" type="text" placeholder="月" />

    <nput id="d" type="text" placeholder="日" /> <br /> <input type="button" id="btn" value="计算星期几" /> <input type="text"

        id="w" placeholder="星期几">

    <script>

        var y = document.getElementById('y');

        var m = document.getElementById('m');

        var d = document.getElementById('d');

        var w = document.getElementById('w');

        var btn = document.getElementById('btn');

        btn.onclick = function () 

            var a = '';

            a = y.value + '/' + m.value + '/' + d.value;

            var date = new Date(a);

            var week = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];

            w.value = week[date.getDay()];

        

    </script>

</body>

</script>

</body>

</html>

以上是关于VBA如何判断一个日期是啥星期的主要内容,如果未能解决你的问题,请参考以下文章

在excel的VBA里如何获取日期和星期几

JS如何利用日期判断星期几

vba 判断 某日是不是为本周(周一到周日)

js 如何根据所选时间判断是星期几?

VBA 操作 Excel 生成日期及星期

ASP.NET根据当前的周跟星期去判断当前的日期