我有一列日期时间。我必须删除日期部分。我很简单想运行一个可以做到这一点的宏。当我记录宏时,执行删除然后停止,然后在下一行运行它,它给出下面的值。如何全局化,以便我可以在所有行上运行此任务?
2017-06-26 14:41:00
宏是这样的:
Sub Macro9()
'
' Macro9 Macro
'
'
ActiveCell.FormulaR1C1 = "2:41:00 PM"
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
答案 0 :(得分:1)
这是一个简单的宏来完成你想要做的事情。我以为你想从军事时间转换到上午/下午。您必须调整单元格的位置以适合您的电子表格。这只是通过A列中的所有值并将它们转换为AM / PM时间并在coulmn B中将它们吐出。而不是循环遍历所有行,您还可以使用相同的逻辑定义自己的单个输入函数
Sub test()
Dim dt As String
Dim tm As String
Dim hr As String
Dim row_ct As Integer
row_ct = Range("A1").End(xlDown).Row
For i = 1 To row_ct
dt = Cells(i, 1)
tm = Right(Cells(i, 1), 8)
hr = Left(tm, 2)
If hr < 12 Then
tm = tm & " AM"
ElseIf hr = 12 Then tm = tm & " PM"
ElseIf hr > 12 and hr - 12 < 10 then tm = 0 & (Left(tm, 2) - 12) & Right(tm, 6) & " PM"
Else: tm = left(tm, 2) - 12 & right(tm, 6) & " PM"
End If
Cells(i, 2) = tm
Next i
End Sub
以下是如何创建处理此问题的自定义函数:
Function tm(date_time)
If Left(Right(date_time, 8), 2) < 12 Then
tm = Right(date_time, 8) & " AM"
ElseIf Left(Right(date_time, 8), 2) = 12 Then tm = Right(date_time, 8) & " PM"
ElseIf Left(Right(date_time, 8), 2) > 12 Then tm = Left(Right(date_time, 8), 2)- 12 & Right(date_time, 6) & " PM"`
End If
End Function
根据应用程序的不同,可能会比另一个更好。