我有一个excel表(“Table1”),总共有4列。第3和第4列包含'clock in'和'clock out'信息,格式化为显示日期和时间。例如:
6/3/2016 10:54:52 AM
我想在这里做两件事......首先,我想创建一个新的第3列,只读取日期,格式为“d-mmm”。这应该与现在第4列中的日期相匹配。
我想要做的第二件事是从现在的第4列和第5列中取出文本的日期部分。所以最后,一行示例数据可能如下所示(第3列:第5列):
C, D, E
7-Jun, 10:54:52 AM, 4:59:44 AM
以下是我目前为代码所做的事情:
Sub test()
Dim currentSht As Worksheet
Dim lst As ListObject
Set curretnSht = ActiveWorkbook.Sheets(1)
Set lst = currentSht.ListObjects("Table1")
lst.ListColumns.Add Position:=3
'Not really sure how to do the rest
End Sub
答案 0 :(得分:0)
这不是Excel方式。日期是数字0代表1/1/1900。加1,你得到第二天一小时的价值是1/24。
您的方法的最大问题是Excel停止编辑单元格Excel评估单元格值。它仍然看起来像7月6日,但Excel更改单元格格式,单元格值为7 - 6月6/7/216。所有单元格最好等于相同的日期。只需更改单元格格式即可显示所需的结果。如果需要计算月份,请使用工作表函数执行此操作。 =月(A1)
答案 1 :(得分:0)
试试这个:
Sub Demo()
Range("C1").EntireColumn.Insert '-->insert column
Range("D:D").Copy Destination:=Range("C1") '-->copy column 4 to column 3
Range("C:C").NumberFormat = "d-mmm" '-->format column 3
Range("D:E").NumberFormat = "h:mm:ss AM/PM" '-->format column 4 and 5
End Sub
即使这样也可以:
Sub Demo()
Dim currentSht As Worksheet
Dim lastRow As Long
Set currentSht = ActiveWorkbook.Sheets("Sheet1")
lastRow = currentSht.Cells(Rows.Count, "C").End(xlUp).Row '-->get last row with data
currentSht.Range("C1").EntireColumn.Insert '-->insert column
currentSht.Range("C1:C" & lastRow) = currentSht.Range("D1:D" & lastRow).Value '-->copy column 4 to column 3
currentSht.Range("C1:C" & lastRow).NumberFormat = "d-mmm" '-->format column 3
currentSht.Range("D1:E" & lastRow).NumberFormat = "h:mm:ss AM/PM" '-->format column 4 and 5
End Sub
答案 2 :(得分:0)
这符合您的规格:
Sub InsertColumnAndFormatDates()
Columns("C:C").Copy
Selection.Insert Shift:=xlToRight
Application.CutCopyMode = False
Columns("C").NumberFormat = "d-mmm"
Columns("D:E").NumberFormat = "h:mm:ss AM/PM"
End Sub