插入行并填充/复制值

时间:2013-03-01 20:29:21

标签: excel vba excel-vba

所以...我已经搜索了很多关于如何做到这一点,虽然我可以让它的一部分工作,我似乎无法弄清楚如何使所有的工作工作

我的初始数据如下所示,并告诉我标题栏中每个值需要多少行(例如,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

我不关心转换数据的放置位置......代码可以覆盖起始数据或将结果放在单独的标签中......或者其他任何内容。

感谢您提供任何帮助。

1 个答案:

答案 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

或者,您只能使用公式执行此操作:

enter image description here

这个想法是你使用一些辅助列来计算和检索数据。详细地说,我有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。