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)
参数 Arg1
和 Arg2
都必须是 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
我正在尝试使用 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)
参数 Arg1
和 Arg2
都必须是 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