首页 > 解决方案 > Excel 公式 - 比较日期范围

问题描述

如何编写 EXCEL VBA 使我的日期从 04/JUNE > 04/JUNE 23:59 开始。我不能使用'= date + 5/6',因为我必须每天多次运行 VBA,它会将我的日期添加到明天/后天。我只是想让日期结束日期。请帮忙。

这个例子就像

单元格 A1:12/6 月单元格 B1:15/6 月单元格 C1:15/6 月 12:00 HRS 单元格 D1:=IF C1B2,“超出范围”,“好的!”)

在这种情况下,D1 仍将显示 OUT OF RANGE。

我有很多这样的改变,所以我正在考虑编写一个 VBA 来自动将 C1 从 15/JUNE -> 15/JUNE 23:59 转换,这样 D1 就会显示 Okay !

我在 vba 中尝试了 Cdate(Range(“D1”)) + 5/6 使其变为 23:00 小时,并且我在一天内运行此宏几次,它会继续将 23 小时添加到日期并使其更改为另一个日期。

标签: excelvba

解决方案


关于你在说什么?

关于:
- “Excel 公式”
- “EXCEL VBA”

关于:
- “比较日期范围”
- “确定我的日期”

假设,VBA 是......

VBA 中的Date类型是Double,其中:
- 整数部分作为从...开始的天数(看 F1),以及
- 一天的小数部分。

因此,您想要的“04/JUNE > 04/JUNE 23:59”将:

? DateSerial(2018, 06, 4) + ((23& * 60& * 60&) + (59& * 60&)) / 86400&
18-06-04 23:59:00 

是的,当然,您可以使用TimeSerial而不是上面,但是......它没有让您正确理解 VBA 日期。
.

----------
添加:

抱歉,此代码是否仅适用于一个单元格,因为我有很多带有日期的单元格,我需要 VBA 将它们提取出来并转换为 23:59,例如,我运行一个 for 循环来更改类似 20 个连续多个范围的单元格. 而且我将在一天内运行几次宏,它会每次都在该日期添加 23 小时并导致它更改日期吗?

Public Sub sp_Test_Date()
Dim rSel As Range
Dim i&

Const H23M59 As Double = 1 - 60 / 86400

    Set rSel = Selection
    With rSel
        For i = 1 To .Cells.Count
            With .Cells(i)
                If IsDate(.Value) Then
                    .Offset(0, 1).Value = CDate(Int(.Value) + H23M59)
                End If
            End With ' .Cells(i)
        Next
    End With ' rSel
End Sub

推荐阅读