我有一个For循环,直到有一个空白单元格。 A列是自定义格式的数据。我试图每周(周一至周五)报道。
42738返回1/3/2017
42739返回1/4/2017
42740返回1/5/2017
等等
我正在尝试弄清楚如何设置范围值来创建此每周报告。
我正在测试的理论是A3 - A2 = 1,这是星期一等等,
如果A3 - A2 = 2则表示周末。
这是我到目前为止的代码
Dim wks As Worksheet
Dim LastDate As Long
Dim myDate As Integer
Set wks = Worksheets("Labor")
LastDate = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row
For dRow = 2 To LastDate
xDate = CInt(Cells(dRow, "A").Value)
yDate = CInt(Cells(dRow - 1, "A").Value)
If xDate - yDate = 2 Then
'weekend
MsgBox ("Weekend!")
ElseIf xDate - yDate = 1 Then
'next day
ElseIf xDate - yDate = 0 Then
'same day
Else
MsgBox (xDate - yDate)
End If
myDate = 1
Next dRow
我的问题是:
如何修复xDate =?
的溢出错误为什么yDate =不匹配错误?
有没有更简洁的方法来写这个?
提前致谢!
答案 0 :(得分:0)
假设A列中的日期值采用数字格式(就像您在帖子中提到的那样,42738,42739等),那么下面的代码将为您提供所需的内容。
您不需要将日期值存储在变量的单元格中,您可以使用DateDiff
函数直接计算每个单元格之间的差异。要详细了解DateDiff
阅读HERE
之后,您可以对要检查的每种类型的方案使用Select Case
。
<强>代码强>
Option Explicit
Sub NumofWeekdays()
Dim wks As Worksheet
Dim LastDate As Long
Dim NumofDays As Long
Dim dRow As Long
Set wks = Worksheets("Labor")
With wks
LastDate = .Cells(.Rows.Count, "A").End(xlUp).Row
For dRow = 2 To LastDate
NumofDays = DateDiff("d", .Range("A" & dRow - 1).Value, .Range("A" & dRow).Value)
Select Case NumofDays
Case Is >= 2
'weekend
MsgBox "Weekend!"
Case 1
'next day
MsgBox "Next Day"
Case 0
'same day
MsgBox "Same Day"
Case Else
MsgBox NumofDays
End Select
Next dRow
End With
End Sub