这也许不可能,但我希望能够输入一个数字,并让其在同一单元格中将该数字显示为时间。让它看起来更整洁,这样只显示需要的内容。
例如,在单元格 A1 中输入 1445,A1 显示下午 2:45
我读了一些有关 VBA 和宏的书,但对它们并不熟悉。
- 如果是这样,我是否可以使用相同的宏对每个人的 14 次输入(7 次进出)执行此操作?
- 如果我为新人复制一个人的时间表,复制的版本是否可以正常工作而无需执行任何操作?
- 我是否能够根据输入而不是显示进行计算。原因如下:
我正在重做工作时间表转换器。旧版转换器无法将 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
因为它是工作表代码,所以很容易安装并自动使用:
- 右键单击 Excel 窗口底部附近的选项卡名称
- 选择查看代码-这将打开一个 VBE 窗口
- 粘贴内容并关闭 VBE 窗口
如果您有任何疑虑,请首先在试用工作表上尝试一下。
如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
到消除宏:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 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 文件中的精确复制部分。即使我正确书写并注意格式,但在回复部分,它还是会变得混乱,破坏解决方案的清晰度。无论如何,看来我会随着时间的推移而学习。再次感谢。