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如何判断一个日期是啥星期的主要内容,如果未能解决你的问题,请参考以下文章