我可以在 Excel 中输入数字,然后让 Excel 在同一单元格中将其显示为时间吗?

我可以在 Excel 中输入数字,然后让 Excel 在同一单元格中将其显示为时间吗?

这也许不可能,但我希望能够输入一个数字,并让其在同一单元格中将该数字显示为时间。让它看起来更整洁,这样只显示需要的内容。

例如,在单元格 A1 中输入 1445,A1 显示下午 2:45

我读了一些有关 VBA 和宏的书,但对它们并不熟悉。

  1. 如果是这样,我是否可以使用相同的宏对每个人的 14 次输入(7 次进出)执行此操作?
  2. 如果我为新人复制一个人的时间表,复制的版本是否可以正常工作而无需执行任何操作?
  3. 我是否能够根据输入而不是显示进行计算。原因如下:

我正在重做工作时间表转换器。旧版转换器无法将 24:00 或 48:00 正确转换为十进制格式(当它是几天相加的结果时)。

我有这个功能,它可以正确地找到两次之间的小时和分钟,并减去午餐时间,同时仍为数字格式。然后我可以将午餐时间显示为 30 分钟,将每日总小时数显示为 8 小时 20 分钟。它还会自动计算每日工资。

在我尝试花更多时间之前,我想知道这是否可行。在这里工作之前我从未使用过 Excel。

答案1

有几种方法可以将数字/小数转换为 Excel 时间格式:

在此处输入图片描述

怎么运行的:

  • 输入数字/小数并保留单元格格式一般的
  • 单元格中的公式I87=H87/1440
  • 将自定义格式应用[h]:mm到单元格。
  • 单元格中的公式I92=H92/86400
  • 将自定义格式应用[h]:mm:ss到单元格。
  • 单元格中的公式I97=H97/24
  • 将自定义格式应用h:mm到单元格。
  • 填写公式。

在此处输入图片描述

  • ALT+F11打开 VB 编辑器,然后复制粘贴此代码作为标准模块。

    Sub NumbersToTime()
    
    Dim rCell As Range
    Dim iHours As Integer
    Dim iMins As Integer
    
    For Each rCell In Selection
        If IsNumeric(rCell.Value) And Len(rCell.Value) > 0 Then
            iHours = rCell.Value \ 100
            iMins = rCell.Value Mod 100
            rCell.Value = (iHours + iMins / 60) / 24
            rCell.NumberFormat = "h:mm AM/PM"
        End If
    Next
    End Sub
    
  • 选择单元格 &跑步宏。

您将获得以下信息:

在此处输入图片描述

根据需要调整公式中的单元格引用。

答案2

这是用于手机的A1具体来说,将以下代码放置在工作表代码区域中:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim s As String, d As Date

    If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then
        Application.EnableEvents = False
            Target.Clear
        Application.EnableEvents = True
        Exit Sub
    End If

    s = Target.Text
    l = Len(s)
    If l < 4 Then
        s = String(4 - l, "0") & s
    End If

    d = TimeSerial(Left(s, 2), Right(s, 2), 0)
    Application.EnableEvents = False
        Target.Clear
        Target.Value = d
        Target.NumberFormat = "[$-x-systime]h:mm:ss AM/PM"
    Application.EnableEvents = True
End Sub

因为它是工作表代码,所以很容易安装并自动使用:

  1. 右键单击 Excel 窗口底部附近的选项卡名称
  2. 选择查看代码-这将打开一个 VBE 窗口
  3. 粘贴内容并关闭 VBE 窗口

如果您有任何疑虑,请首先在试用工作表上尝试一下。

如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

消除宏:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解有关事件宏(工作表代码)的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/event.htm

必须启用宏才能使其工作!

答案3

我的答案仅基于公式。逻辑如下:1. 首先通过测试小于 1159 的数字来确定“am”或“pm”后缀 2. 将数字转换为文本格式 3. 根据文本长度 = 3 或 4 来确定小时的左两位数字 4. 确定分钟的右两位数字

开始:1. 在第一行中给出如下标题:第 1 列“数字”,第 2 列“时间”,第 3 列留空以便清晰显示第 4 列“文本”,第 5 列“左 2”,第 6 列“右 2”,第 7 列“小时数字”,第 8 列“ampm”

输入以下公式:

在单元格 B2 中输入公式:=IF(A2=0, " 12 Mid Night", IF( A2=1200, " 12 Noon",H2&"="&G2&I2))

在单元格 D2 中输入公式:=TEXT(A2,"####")

在单元格 E2 中输入公式:=IF(LEN(E2)=3,LEFT(E2,1),LEFT(E2,2))

在单元格 F2 中输入公式:=RIGHT(E2,2)

在单元格 G2 中输入公式:=IF(M2=" am",F2,F2-12)

在单元格 H2 中输入公式:=IF(A2<1159," am"," pm")

开始在 A 列中以数字格式输入时间,
时间以所需格式显示在 B 列中:

数字 时间 文本 L2 R2 小时 数字 ampm 1445 2=45 pm 1445 14 45 2 pm 810 8=10 am 810 8 10 8 am 0 12 午夜 am 2155 9=55 pm 2155 21 55 9 pm 123 1=23 am 123 1 23 1 am 800 8=00 am 800 8 00 8 am 1200 12 中午 1200 12 00 0 pm 345 3=45 am 345 3 45 3 am

我尝试粘贴 Excel 的复制答案表,但它给出的图像类型图标非常小。上面粘贴的部分效果更好,但不知何故,回复部分的直接转换变得混乱。

谢谢。

我的请求:我是 Stack Exchange 的新手,所以我不知道如何回答,如何使用我 Excel 文件中的精确复制部分。即使我正确书写并注意格式,但在回复部分,它还是会变得混乱,破坏解决方案的清晰度。无论如何,看来我会随着时间的推移而学习。再次感谢。

相关内容