我在Excel的VBA方面有一些经验,目前我有两个带有数据的表,我需要比较和提取数据。
Sheet1看起来像:
A B C D E
06/06/2014 00:01:04 \PLUTUS xxxx xxxx DERP.OPERATOR
06/06/2014 00:06:05 \PELEUS xxxx xxxx LOL.OPERATOR
06/06/2014 00:11:05 \PLUTUS xxxx xxxx DERP.OPERATOR
06/06/2014 00:15:42 \CHARON xxxx xxxx SUPEROP-DERP
06/06/2014 00:16:06 \PLUTUS xxxx xxxx DERP.OPERATORSheet2看起来像:
A B C D E F G H
xxxx xxxx xxxx \castor xxxx SOLDOP-DERP xxxx 06/06/2014 03:27:58
xxxx xxxx xxxx \oberon xxxx BBMOP-DERP xxxx 06/06/2014 03:30:04
xxxx xxxx xxxx \charon xxxx SUPEROP-DERP xxxx 06/06/2014 03:32:55
xxxx xxxx xxxx \peleus xxxx LOL.OPERATOR xxxx 06/06/2014 09:55:31
xxxx xxxx xxxx \plutus xxxx GBSOP-DERP xxxx 06/06/2014 10:00:22我需要确保每个Sheet2 E单元格值都与所有Sheet1 F单元格值进行检查。
如果找到匹配,则检查Sheet1行中的单元格B是否匹配Sheet2单元D的值。
如果这两种情况都是正确的,那么宏应该比较如果Sheet1单元中的行A大于或等于Sheet2单元H中的时间,而不是大于单元单元H+12小时中的时间。
如果这三条语句都是正确的,那么应该将Sheet1的时间复制到Sheet2 Cell。
如何比较,找出不同的日期和时间?
Lrow = 2
Lrow2 = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row 'get's the number of all sheet1 rows'
Lrow3 = 1
Lrow4 = Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row 'number of all Sheet2 rows'
SearchStr = Sheets("Sheet2").Range("F" & rownumbers1).Value
SearchStr2 = Sheets("Sheet2").Range("D" & rownumbers1).Value
For rownumbers1 = Lrow3 To Lrow4
For rownumbers = Lrow To Lrow2
If SearchStr = Sheets("Sheet1").Range("E" & rownumbers).Value
And
SearchStr2 = Sheets("Sheet1").Range("B" & rownumbers).Value
And
***Sheets("Sheet2").Range("H" & rownumbers1).Value =< Sheets("Sheet1").Range("A" & rownumbers).Value < Sheets("Sheet2").Range("H" & rownumbers1).Value + 12 hours***
Then
Sheets("Sheet2").Range("I" & rownumbers1).Value = Sheets("Sheet1").Range("A" & rownumbers).Value
Next rownumbers1
Else
Next rownumbers
End If请建议如何做日期和时间的比较部分!提前感谢!
发布于 2014-06-17 12:11:41
在VBA中比较日期/时间的任何简单方法都是将它们转换为浮点值。此UDF比较两个日期/时间,只有当第二个日期/时间大于或等于第一个日期/时间,但不超过12个小时时才返回TRUE:
Public Function CompareTimes(r1 As Range, r2 As Range) As Boolean
Dim d1 As Date, d2 As Date, f1 As Double, f2 As Double
d1 = r1.Value
d2 = r2.Value
f1 = CDbl(d1)
f2 = CDbl(d2)
CompareTimes = False
If f2 < f1 Then Exit Function
If f2 > f1 + 0.5 Then Exit Function
CompareTimes = True
End Function您可以在一个子中使用UDF,如:
Sub MAIN()
Dim r1 As Range, r2 As Range
Set r1 = Sheets("Sheet1").Range("B9")
Set r2 = Sheets("Sheet2").Range("A1")
MsgBox CompareTimes(r1, r2)
End Sub发布于 2014-06-17 13:08:16
1)你不能写If dt1 <= dt2 < dt3 Then...。相反,您必须分两个步骤进行比较:
If dt1 <= dt2 And dt2 < dt3 Then...。
2)此外,您还可以通过使用
Cell(3,rownum)而不是
Range("C" & rownum).value。
这里不需要.Value,因为它是默认属性,对于一个单元格范围,可以避免某些计算/连接/转换。
https://stackoverflow.com/questions/24262783
复制相似问题