友
如果时间戳在过去两分钟+7小时内,我正在尝试扫描一列时间并复制/粘贴该行。我的时间戳的日期部分没有阵容,我需要将它们转换为相同的日期而不更改时间。
这是我的代码:
Sub Timecompare()
Dim i As Integer
Dim lRow As Integer
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Sheets("Volm")
Set ws2 = Sheets("Sheet2")
'goal:
'scan all rows in dataset
'if cell time > current time - 2 minutes
'copy pasta
With ws1
'find the last row
lRow = .Cells(.Rows.Count, "E").End(xlUp).Row
'loop through all the rows
For i = 10 To lRow
'if the cell value is greater than time + 7 hours - 2 minutes then copy/paste the row to new sheet
If .Cells(i, 18).Value > Now + TimeSerial(7, 0, 0) - TimeSerial(0, 2, 0) Then
''' just spitting out the values in the comparator above so I can see the results and why they aren't comparing properly '''
ws2.Cells(i, 1).Value = .Cells(i, 18).Value
ws2.Cells(i, 2).Value = Now + TimeSerial(7, 0, 0) - TimeSerial(0, 2, 0)
Exit For
End If
Next i
End With
End Sub
“。Cell(i,18).Value”输出如下所示:.704461794(一般格式)或1/0/00 4:54 PM(日期格式)
“Now + TimeSerial(7,0,0) - TimeSerial(0,2,0)”输出如下所示:42467.75336(通用格式)或4/7/16 6:04 PM(日期格式)。
我不在乎约会。我所关心的只是时间。那么有没有办法将“.Cells(i,18).Value”同时带到今天,或者将Now()+ 7小时 - 2分钟的日期带回到1/0/00?重申一下,我只是想让我的苹果变成苹果,这样我才能比较时间。
答案 0 :(得分:1)
我只想抽出时间:
upperTime = GetTime(Now + TimeSerial(7, 0, 0) - TimeSerial(0, 2, 0))
With ws1
For i = 10 To lRow
' compare on the time only '
If GetTime(.Cells(i, 18).Value) > upperTime Then
' copy the time only '
ws2.Cells(i, 1).Value = GetTime(.Cells(i, 18).Value)
' copy the current date plus the time from the cell '
ws2.Cells(i, 2).Value = GetDate(Now) + GetTime(.Cells(i, 18).Value)
Exit For
End If
Next i
End With
提取日期部分或时间部分的功能:
' Returns the date part from a date/time '
Public Function GetTime(datetime As Date) As Date
GetTime = datetime - VBA.Fix(datetime)
End Function
' Returns the time part from a date/time '
Public Function GetDate(datetime As Date) As Date
GetDate = VBA.Fix(datetime)
End Function
答案 1 :(得分:0)
创建一个变量并在循环外为其指定Now + TimeSerial(7, 0, 0) - TimeSerial(0, 2, 0)
。在循环中使用该变量而不是表达式(我可以看到2个位置)
创建另一个变量并在循环外将today()赋值给它。在比较中使用.Cells(i, 18).Value + <That Variable>
。如果你不认为这个宏的执行将跨越午夜,你可以直接使用today()而不是使用变量。
答案 2 :(得分:0)
我相信你的算法必须考虑午夜过境。根据您的问题的措辞(在您的代码示例上方),我尝试了以下测试:
view
这似乎给出了你想要的结果。