Excel 宏将一列中的日期和时间拆分为两个单独的列

Excel 宏将一列中的日期和时间拆分为两个单独的列

宏创建的代码运行良好,但看起来很笨拙。有人能帮我清理一下吗,这样我就可以学习如何让录制的宏更干净?

Sub SplitDateTime()
'
' SplitDateTime Macro
'

'
    Columns("D:E").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("D:D").Select
    Selection.NumberFormat = "m/d/yyyy"
    Columns("E:E").Select
    Selection.NumberFormat = "h:mm;@"
    Range("D1:E1").Select
    Selection.NumberFormat = "@"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "Date"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "Time"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=INT(RC[-1])"
    Range("E2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"
    Range("D2:E2").Select
    Selection.Copy
    Range("D3:E212").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Columns("C:C").Select
    Selection.EntireColumn.Hidden = True
    Range("G2").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
    Range("G3").Select
End Sub

答案1

清理后且稍微简短一些的版本:

Sub SplitDateTime()
'
' SplitDateTime Macro
'

'
    Columns("D:E").Insert Shift:=xlToRight
    Columns("D:D").NumberFormat = "m/d/yyyy"
    Columns("E:E").NumberFormat = "h:mm;@"
    Range("D1:E1").NumberFormat = "@"
    Range("D1").FormulaR1C1 = "Date"
    Range("E1").FormulaR1C1 = "Time"
    Range("D2").FormulaR1C1 = "=INT(RC[-1])"
    Range("E2").FormulaR1C1 = "=RC[-2]-RC[-1]"
   ' Range("D2:E2").Copy
   ' Range("D3:E212").PasteSpecial Paste:=xlPasteFormulas
   ' Application.CutCopyMode = False
    Range("D2:E212").FillDown   ' shorter version
    Columns("D:E").AutoFit   ' added
    Columns("C:C").Hidden = True
    Range("G2").Value = vbNullString
    Range("G3").Select
End Sub

答案2

要使日期和时间的特定部分出现在单元格或公式中,您可以选择使用=TEXT(data,format)...

与LibreOffice 中“格式化单元格”对话框 (CTRL+1) 中format使用的完全相同。CustomUser Defined

请注意,格式说明符中可能存在“语言和地区”相关的差异;例如,要指定瑞典的年份,我们需要使用“ÅÅÅÅ”,而对于英语使用者则为“YYYY”。
(也;用于,函数调用中的参数分隔)

因此
=TEXT(A1,"YYYY-MM-DD")将为 A1 中的内容提供一个漂亮的 ISO:样式日期。
=TEXT(A1,"HH:mm")将根据同一日期显示时间。

这些将显示类似于:
2023-12-24
11:30

参考:
https://www.libreofficehelp.com/date-time-formats-libreoffice-calc/#Custom_Formatting_of_Date_Time

相关内容