excel vba - 添加表格列,其中日期基于包含日期和时间的相邻单元格

时间:2016-06-11 05:07:01

标签: mysql excel vba excel-vba date

我有一个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

3 个答案:

答案 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