插入行和填充/复制值

所以…我已经search了如何做到这一点,而我可以得到它的一部分工作,我似乎无法弄清楚如何让所有的作品工作

我的初始数据如下所示,并告诉我标题列中每个值需要多less行(例如,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,有一种方法来点击一个button,它的格式/填充上面的信息如下:

 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 

我不关心转换的数据放在哪里…代码可以覆盖开始数据或将结果放置在单独的选项卡中…或其他任何东西。

感谢您提供任何帮助。

这里是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个帮助列与以下逻辑:

  • “源行”列E:这是此目标行所指的源数据中的实际行。 “列逻辑”是,它是在上面的行相同的数字 – 除非在上面的行等于最大计数。 因此,E5中的公式为: =IF(F4=G4,E4+1,E4) 。 你还需要“初始化”列,即在E4中,我使用: =ROW(A3)+1
  • 最大计数:当前源行所需的行数。 F4: =INDEX(C:C;E4)
  • 计数:这是计数器,当前源行已经被填充的频率。 逻辑就是简单地把上面的值加1,除非这个列中的源行与最后一行不同。 G4: =IF(E4<>E3,1,G3+1)

现在只需要使用列E中存储的数字作为INDEX函数的参数,即将该公式从H4下来并且也复制到列I: =INDEX(A:A,E4)

现在只需要将5列的公式复制到所需的行数。 (请记住从第5行开始复制E列,而在第4行复制F:I列。