首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA Excel在时间格式m/d/yyyy :mm:ss时的时间差

VBA Excel在时间格式m/d/yyyy :mm:ss时的时间差
EN

Stack Overflow用户
提问于 2014-06-17 11:38:09
回答 2查看 819关注 0票数 2

我在Excel的VBA方面有一些经验,目前我有两个带有数据的表,我需要比较和提取数据。

Sheet1看起来像:

代码语言:javascript
复制
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.OPERATOR

Sheet2看起来像:

代码语言:javascript
复制
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。

如何比较,找出不同的日期和时间?

代码语言:javascript
复制
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

请建议如何做日期和时间的比较部分!提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-17 12:11:41

VBA中比较日期/时间的任何简单方法都是将它们转换为浮点值。此UDF比较两个日期/时间,只有当第二个日期/时间大于或等于第一个日期/时间,但不超过12个小时时才返回TRUE

代码语言:javascript
复制
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,如:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 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,因为它是默认属性,对于一个单元格范围,可以避免某些计算/连接/转换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24262783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档