我正在创建计划管理器,但遇到了以下情况:
当用户想要开始执行某项任务时,系统会提示用户输入一个数字,例如数字“13”应该代表 13:00。但是在他输入这个数字后,我需要它显示为 13:00。
]
为了做到这一点,我需要将数字除以 24,然后该数字才能转换为我想要的格式 (13:00)。但我不知道如何将该数字重新插入到同一个单元格中。
有可能吗,或者还有其他方法可以做到这一点?如果我输入半小时(13:30),它也应该有效。
答案1
重大编辑
根据反馈,这是对原始帖子的重大重写。
您可以在计算过程中转换数字,而不是在同一个单元格中转换数字。使用这种方法,用户认为他们输入的是 24 小时格式的时间,但实际上它是一个转换为时间的整数。以下是一个示例。
H 列包含该行 G 列内容的描述。
用户的关键是输入不带冒号的 24 小时格式的时间,这在工作表顶部的横幅中有所说明。如果您使用自定义格式格式化时间单元格(第 3、4 和 6 行),它们看起来##":"00
就像显示标准时间格式一样。
以下是单元格内容和公式:
G3级:在此处输入结束时间(24 小时格式,不带冒号)
示例中输入的值是1645
,但将显示为16:45
G4:在此处输入开始时间(24 小时格式,不带冒号)
示例中输入的值820
将显示为8:20
G5: =TIME(INT(G3/100),MOD(G3,100),0)-TIME(INT(G4/100),MOD(G4,100),0)+IF(G3<=G4,1,0)
(8:25)
这将减去两个时间并纠正负时间误差(+IF(G3<=G4,1,0)
)。
TIME 函数接受小时、分钟、秒作为输入TIME(h,m,s)
。由于 G3 和 G4 是整数,因此小时数除以 100(INT(G3/100)
或 左侧显示的数字:
)即可得出,分钟数取除法的余数(MOD(G4,100)
或 右侧显示的数字:
)即可得出,秒数为零,因为我们处理的是整分钟。
结果将是实际时间值,并且单元格应格式化为时间或自定义(h:mm
)。
G6:在此处输入休息/午餐时间(24 小时格式,不带冒号)
示例中输入的值30
将显示为:30
G7: =(G5-TIME(INT(G6/100),MOD(G6,100),0))*24
(7.92)
这会将 G6 转换为时间格式,如上文对单元格 G5 所述,然后减去两个时间。
将差值乘以 X24 以得出以十进制小时为单位的答案,因为我的系统要求输入此类内容。如果您需要,则将单元格格式化为带有 2 位小数的数字。
如果您不需要小数小时,那么只需保留公式*24
并将单元格格式化为时间。
在我的完整表格中,G 列重复显示一周中的每一天。希望这对您有所帮助。
答案2
此宏将根据所选单元格中的 24 小时制时钟时间将数字转换为时间。
Sub NumberToTime()
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
怎么运行的:
- 将此宏作为模块与工作表一起输入。
- 输入屏幕截图中显示的时间数字。
- 选择数据范围并运行宏。
您将获得如屏幕截图所示的期望结果。