答案1
一些辅助值和INDIRECT
工作表函数解决了这个问题:
情况 1:
怎么运行的:
- 在单元格中输入期望值
G2
,表示您想要重复一组数据的次数。 - 单元格中的行计数器公式
G3
:
=COUNTA(F2:F4)*G2
单元格中的最终公式
H2
:=IF(ROW(H2)>G$3+1,"",IF(ISBLANK(INDIRECT("F"&ROW(F2))),INDIRECT("H"&(ROWS($F$2:F2)-(COUNTA(F:F)-2))),F2))
注意:
- 向下填充公式,直到多出几行为止。
情况 2:
注意:
- 一旦您更改单元格中的值
G2
以重复数据集n times
,公式就会调整结果column H
。 - 您可以根据需要调整公式中的单元格引用。
答案2
您可以尝试此代码。链接到页面上的按钮,它假定输入从 A2 向下,输出将从 Sheet1 上的 C2 向下(更改以适应)。
Sub Duplicate()
Application.ScreenUpdating = False
Dim ws As Worksheet: Set ws = Sheet1
Dim MyCRnge As Range, c As Range
Dim MyX As String
Dim MyArr() As Variant
Dim i As Long, x As Long
Set MyCRnge = ws.Range(ws.Cells(2, 1), ws.Cells(ws.Cells(2, 1).End(xlDown).Row, 1))
MyX = InputBox("Give me a number", "My Duplicator")
If Not IsNumeric(MyX) Then Exit Sub
MyX = CLng(MyX)
ReDim MyArr(MyX * MyCRnge.Rows.Count)
x = 1
For i = LBound(MyArr) To UBound(MyArr) - 1
MyArr(i) = MyCRnge(x, 1)
If x = MyCRnge.Rows.Count Then
x = 1
Else
x = x + 1
End If
Next i
ws.Range(ws.Cells(2, 3), ws.Cells((MyX * MyCRnge.Rows.Count) + 1, 3)) = Application.Transpose(MyArr)
End Sub