VBA Excel单元格中的单独日期范围

gep*_*pex 5 excel vba date

这让我很头疼..我试着做以下事情:

这是我拥有的数据,我有元素的名称,开始日期和结束日期.我想在白天获得这些数据,而不是在范围内(所以我可以将它上传到我有的白天数据库).

我不知道我是否可以在不使用VBA的情况下做到这一点,但我想快速将是VBA.

目前的数据:

???????????????????????????????????
? name  ? start date ?  end date  ?
???????????????????????????????????
? foo1  ? 25-11-2013 ? 28-11-2013 ?
? foo2  ? 25-11-2013 ? 28-11-2013 ?
? foo3  ? 25-11-2013 ? 28-11-2013 ?
? foo4  ? 25-11-2013 ? 28-11-2013 ?
? foo5  ? 25-11-2013 ? 28-11-2013 ?
? foo6  ? 28-11-2013 ? 28-11-2013 ?
? foo7  ? 28-11-2013 ? 28-11-2013 ?
? foo8  ? 28-11-2013 ? 28-11-2013 ?
? foo9  ? 28-11-2013 ? 28-11-2013 ?
? foo10 ? 28-11-2013 ? 28-11-2013 ?
? foo11 ? 29-11-2013 ? 30-11-2013 ?
? foo12 ? 29-11-2013 ? 30-11-2013 ?
? foo13 ? 29-11-2013 ? 30-11-2013 ?
? foo14 ? 29-11-2013 ? 30-11-2013 ?
? foo15 ? 29-11-2013 ? 30-11-2013 ?
???????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

我想在白天分开de name,以获得这个:

??????????????????????
? name  ?    date    ?
??????????????????????
? foo1  ? 25-11-2013 ?
? foo2  ? 25-11-2013 ?
? foo3  ? 25-11-2013 ?
? foo4  ? 25-11-2013 ?
? foo5  ? 25-11-2013 ?
? foo1  ? 26-11-2013 ?
? foo2  ? 26-11-2013 ?
? foo3  ? 26-11-2013 ?
? foo4  ? 26-11-2013 ?
? foo5  ? 26-11-2013 ?
? foo1  ? 27-11-2013 ?
? foo2  ? 27-11-2013 ?
? foo3  ? 27-11-2013 ?
? foo4  ? 27-11-2013 ?
? foo5  ? 27-11-2013 ?
? foo6  ? 28-11-2013 ?
? foo7  ? 28-11-2013 ?
? foo8  ? 28-11-2013 ?
? foo9  ? 28-11-2013 ?
? foo10 ? 28-11-2013 ?
? foo11 ? 29-11-2013 ?
? foo12 ? 29-11-2013 ?
? foo13 ? 29-11-2013 ?
? foo14 ? 29-11-2013 ?
? foo15 ? 29-11-2013 ?
? foo11 ? 30-11-2013 ?
? foo12 ? 30-11-2013 ?
? foo13 ? 30-11-2013 ?
? foo14 ? 30-11-2013 ?
? foo15 ? 30-11-2013 ?
??????????????????????
Run Code Online (Sandbox Code Playgroud)

先感谢您.

Net*_*loh 0

最快、最简单的方法可能是使用 VBA。以下代码循环访问列A和中的值,将这些值写入列和C中现有数据的下方,并删除列 中的数据。ABC

Sub SeperateDateRange()
    Dim Ws As Worksheet
    Dim nCol As Integer

    'Define sheet
    Set Ws = ActiveSheet

    nCol = 1 '<~~ Defines the number of columns before the date columns

    Application.ScreenUpdating = False

    'Loops throuh cells
    For i = 1 To ActiveSheet.Cells(Rows.Count, nCol + 2).End(xlUp).Row - 1 Step 1
        For j = 0 To Ws.Cells(i + 1, nCol + 2).Value - Ws.Cells(i + 1, nCol + 1).Value Step 1

            With Ws.Cells(Ws.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
                For k = 0 To nCol - 1 Step 1
                    .Offset(0, k).Value = Ws.Cells(i + 1, k + 1).Value
                Next k
                .Offset(0, nCol).Value = DateSerial(Year(Ws.Cells(i + 1, nCol + 1).Value), Month(Ws.Cells(i + 1, nCol + 1).Value), Day(Ws.Cells(i + 1, nCol + 1).Value) + j)
            End With
        Next j
    Next i

    'Deletes last column with dates
    Ws.Cells(1, nCol + 2).EntireColumn.Delete

    Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)

更新:由于注释中存在后续问题,现在更改了代码,以便变量nCol定义名称位于日期列之前的列数。如果宏应在原始问题中提供的数据上运行,则nCol = 1. 如果有三列的名称位于可行日期之前,则nCol = 3.