这让我很头疼..我试着做以下事情:
这是我拥有的数据,我有元素的名称,开始日期和结束日期.我想在白天获得这些数据,而不是在范围内(所以我可以将它上传到我有的白天数据库).
我不知道我是否可以在不使用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)
先感谢您.
最快、最简单的方法可能是使用 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.
| 归档时间: |
|
| 查看次数: |
1718 次 |
| 最近记录: |