0

我有一个时间值为 1:23:45 AM 的单元格,我想只显示小时值或将其用于其他计算。需要使用 vba 执行此操作。不,我无法手动格式化该列。

谢谢,山姆

4

2 回答 2

4

要使用 VBA 格式化单元格以仅显示小时:

With Worksheets("Sheet1").Cells(1, 1)
    .NumberFormat = "H"
End With

要读取 VBA 中的小时值(无论单元格的格式如何):

Dim hourValue As Integer

With Worksheets("Sheet1").Cells(1, 1)
    If (IsDate(Format(.Value, "hh:mm:ss"))) Then
        hourValue = Hour(.Value)
    Else
        // handle the error
    End If
End With

如果您想在代码中使用显示的值而不在 VBA 中执行转换,则使用Text单元格 ( Range) 的属性而不是Value属性。您需要先确保单元格的格式正确:

Dim hourValue As Integer

With Worksheets("Sheet1").Cells(1, 1)
    If ((.NumberFormat = "H") And _
            (IsDate(Format(.Value, "hh:mm:ss")))) Then
        hourValue = CInt(.Text)
    Else
        // handle the error
    End If
End With

如果您只想在工作表公式中使用小时值,请使用HOUR()工作表函数 - 例如=HOUR(A1)

最后,如果由于工作表受到保护而无法手动格式化列,那么您也无法在 VBA 中对其进行格式化

于 2009-07-03T01:45:45.027 回答
0

我不确定您的单元格是否是时间字段。如果是,您可以执行以下操作吗?

dim h as integer
h = Hour(Cell(1,1))
于 2009-07-02T22:35:09.343 回答