【问题标题】:VBA - Minimum/ Maximum Value for Date()VBA - 日期()的最小值/最大值
【发布时间】:2016-08-18 19:51:03
【问题描述】:

是否有原因导致 Min & Max 的 Excel 函数不适用于以下代码?

Sub minmaxtest()

Dim TEST_VALUES() As Date
ReDim TEST_VALUES(1 To 5, 1 To 1)

TEST_VALUES(1, 1) = 1
TEST_VALUES(2, 1) = 2
TEST_VALUES(3, 1) = 3
TEST_VALUES(4, 1) = 4
TEST_VALUES(5, 1) = 5

MsgBox Application.Max(TEST_VALUES)

End Sub

Dim TEST_VALUES() As Integer 的情况下不存在此问题,但声明为 Date 时会出现此问题。

我试图包装在(CLng(CDate()) 中分配的值,例如TEST_VALUES(1, 1) = (CLnd(CDate(1)),但这也不能解决我在此日期范围内执行分析的问题(这是此类变量的正确名称吗? ) 谢谢!

【问题讨论】:

  • Application.MaxWorksheetFunction 似乎被设计为仅适用于.Value2 类型,因为如果您使用 `As Currency`,它会返回 1

标签: vba excel


【解决方案1】:

如果您在每个数组项上使用CDate,您将得到5 作为Max

Sub minmaxtest()

Dim TEST_VALUES() As Integer
ReDim TEST_VALUES(1 To 5, 1 To 1)

TEST_VALUES(1, 1) = CDate(1)
TEST_VALUES(2, 1) = CDate(2)
TEST_VALUES(3, 1) = CDate(3)
TEST_VALUES(4, 1) = CDate(4)
TEST_VALUES(5, 1) = CDate(5)

MsgBox Application.Max(TEST_VALUES)

End Sub

【讨论】:

    【解决方案2】:

    这适用于一系列日期:

    Sub d()
    
    Dim a() As Variant
    
    a = Range("a1:a5").Value2
    
    Debug.Print CDate(Application.Max(a))
    
    End Sub
    

    【讨论】:

    • 不错。你知道为什么这适用于 Value2 但不适用于 Value 吗?帮助说“Value2 属性不使用 Currency 和 Date 数据类型”。但是使用 Value2 我得到了一个美好的约会,使用 Value 我得到了 00:00:00
    • 这就是你想要的,它是说它使用这些值,比如 1000 而不是 1000 英镑,这听起来很矛盾。这应该用一个日期在? activecell.Value 01/01/2016 <- result ? activecell.Value2 42370 <- result 的单元格来解释
    【解决方案3】:

    如果性能不重要,你可以试试:

    MsgBox WorksheetFunction.Max(TEST_VALUES)
    

    我不确定它是否也适用于数组。

    【讨论】:

      【解决方案4】:

      Dim TEST_VALUES() As Variant 它会起作用。
      您将变量定义为 Date 并为其分配整数。

      【讨论】:

        【解决方案5】:

        来自documentation

        如果参数不包含数字,则 MAX 返回 0(零)。

        【讨论】:

          猜你喜欢
          • 2011-10-31
          • 1970-01-01
          • 1970-01-01
          • 2022-11-10
          • 2019-12-16
          • 2021-12-15
          • 2013-11-15
          • 2021-07-12
          • 1970-01-01
          相关资源
          最近更新 更多