2013-03-01 84 views
0

所以...我已經搜索了很多關於如何做到這一點,雖然我可以得到它的一部分工作,我似乎無法弄清楚如何獲得所有件工作插入行和填充/重複值

我最初的數據如下所示,並告訴我在標題欄的每個值多少行需要(例如值1將有3行,值2將有一排等)

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

爲什麼選擇VBA - 它也可以只用公式完成;-) – 2013-03-01 20:31:25

+0

@PeterAlbert ...它不必是VBA。我假設VBA,因爲我最初挫傷了我的大腦如何通過公式來做到這一點,但它並沒有點擊如何完成 – 2013-03-01 20:37:09

回答

2

下面是VBA代碼來做到這一點 - 你只需要修改圖紙名稱和啓動範圍:

enter image description here

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。