Excel VBA - 列的已用行的底部

Excel VBA - Floor on Column's Used Rows

我正在尝试使用 floor 将列的使用范围转换为每小时数据。

作为 Excel 中的函数,我有 =FLOOR(A2, "1:00")

所以 2016-07-01 07:59:59.0000000 会变成 01-07/2016 7:00

我想在 VBA 中为第一行是 header 的列 A 执行此操作。我想我之后需要转换为 dateTime,但还没有考虑过(应该不难)。

我试过这个:

.Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)) = _
  Application.WorksheetFunction.Floor(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp), "1:00")

但是参数个数错误。

这个:

.Range("A:A") = Application.WorksheetFunction.Floor("A:A", "1:00")

类型不匹配。

不确定如何进行。

VBA中的WorksheetFunction.Floor Method与工作表=Floor函数略有不同:

 WorksheetFunction.Floor(Arg1, Arg2)

参数 Arg1Arg2 都必须是 double 类型。

因此您需要使用 1/24 而不是 "1:00"(这是相同的,因为 1 小时是一天的 1/24)和值 .Cells(i, "A").Value 而不是 a单元格引用名称 "A:A"。 此外,您还需要一个循环来为整个 A 列中的每个使用的单元格实现它。

Option Explicit 'First line at your module ensures you declare any variables

Public Sub FloorFormat()
    Dim lastRow As Long

    With Worksheets("Sheet1") 'Your sheet name here
        lastRow = .Range("A" & .Rows.Count).End(xlUp).Row 'find last used row

        Dim i As Long
        For i = 1 To lastRow 'do the following for all used rows in column A
            .Cells(i, "A").Value = Application.WorksheetFunction.Floor(.Cells(i, "A").Value, 1 / 24)
        Next i
    End With
End Sub