所以...我已经搜索了很多关于如何做到这一点,虽然我可以让它的一部分工作,我似乎无法弄清楚如何使所有的工作工作
我的初始数据如下所示,并告诉我标题栏中每个值需要多少行(例如,Value1将有3行,Value2将有一行等)
Title Audit Period Target Count
Value1 2013-Q1 3
Value2 2013-Q1 1
Value3 2013-Q2 3
Value4 2013-Q3 4
Value5 2013-Q4 2
我希望通过VBA,点击一个按钮,然后按如下方式格式化/填充上述信息:
Title Audit Period
Value1 2013-Q1
Value1 2013-Q1
Value1 2013-Q1
Value2 2013-Q1
Value3 2013-Q2
Value3 2013-Q2
Value3 2013-Q2
Value4 2013-Q3
Value4 2013-Q3
Value4 2013-Q3
Value4 2013-Q3
Value5 2013-Q4
Value5 2013-Q4
我不关心转换数据的放置位置......代码可以覆盖起始数据或将结果放在单独的标签中......或者其他任何内容。
感谢您提供任何帮助。
答案 0 :(得分:2)
以下是执行此操作的VBA代码 - 您只需要修改工作表名称和起始范围:
Sub MultiplyRows()
Dim rngSource As Range, rngTarget As Range
Set rngSource = Sheets("Sheet1").Range("A2")
Set rngTarget = Sheets("Sheet2").Range("A2")
While rngSource <> ""
rngSource.Resize(, 2).Copy rngTarget.Resize(rngSource.Offset(, 2), 2)
Set rngTarget = rngTarget.Offset(rngSource.Offset(, 2))
Set rngSource = rngSource.Offset(1)
Wend
End Sub
或者,您只能使用公式执行此操作:
这个想法是你使用一些辅助列来计算和检索数据。详细地说,我有3个辅助列,具有以下逻辑:
=IF(F4=G4,E4+1,E4)
。您还需要“初始化”列,即在我使用的E4中:=ROW(A3)+1
=INDEX(C:C;E4)
=IF(E4<>E3,1,G3+1)
现在您只需要使用存储在E列中的数字作为INDEX函数的参数,即将此公式从H4向下复制到第I列:=INDEX(A:A,E4)
。
现在,您只需要将5列的公式复制到所需的行数。 (请记住从第5行开始复制列E,但在第4行复制列F:I。