我测试此代码,它似乎工作确定。为了完成这项工作,您需要在数据的初始列表中选择'Data-a',即左上角的单元格。
有三个步骤:
- InsertNewRows:这只需插入所需数量的新的空白行
- ReplicateData:本填充用正确的数据
- TransformData空白行:这是主要的程序,通过在每行循环,需要复制
Sub InsertNewRows(TargetRow As Integer, TargetCol As Integer, Reps As Integer)
Dim iRep As Integer
For iRep = 1 To Reps - 1
Cells(TargetRow + iRep, TargetCol).EntireRow.Insert Shift:=xlDown
Next iRep
End Sub
Sub ReplicateData(TargetRow As Integer, TargetCol As Integer, Reps As Integer)
Dim iRep As Integer
For iRep = 1 To Reps - 1
With Cells(TargetRow, TargetCol)
.Offset(iRep, 0).Value = .Value
.Offset(iRep, 1).Value = .Offset(0, 1).Value
.Offset(iRep, 2).Value = .Offset(0, 2).Value + iRep
.Offset(iRep, 3).Value = .Offset(0, 3).Value
End With
Next iRep
End Sub
Sub TransformData()
Dim nRows As Long
nRows = ActiveCell.CurrentRegion.Rows.Count
Dim StartingRow As Integer
Dim StartingColumn As Integer
Dim NumberOfReplications As Integer
Dim RowOffset
StartingRow = ActiveCell.Row
StartingColumn = ActiveCell.Column
NumberOfReplications = 0
RowOffset = 0
Dim iIterations As Integer
For iIterations = 1 To nRows
If Not VBA.IsEmpty(Cells(StartingRow + RowOffset, StartingColumn)) Then
NumberOfReplications = Cells(StartingRow + RowOffset, StartingColumn).Offset(0, 3)
InsertNewRows StartingRow + RowOffset, StartingColumn, NumberOfReplications
ReplicateData StartingRow + RowOffset, StartingColumn, NumberOfReplications
RowOffset = RowOffset + NumberOfReplications
End If
Next iIterations
End Sub
你想复制到新的工作表或插入新行到现有的工作? – barrowc 2010-03-19 23:01:05