2013-12-19 72 views
0

希望這是有道理的: 我有一個「主」電子表格,其中列1-100項。項目1(例如)下面有4列(所以A1:D1合併,但從第2行開始,它們仍然是單獨的列)。項目2只是一個單獨的列,但是3下面有兩列。項目沒有韻律或理由,或者它下面有多少列,但它們不會改變。基於第一列從一個電子表格複製和粘貼數組

我正在尋找一種方法去另一個選項卡(稱爲sheet1),並在單個單元格(1,15,35,84,99)的頁面頂部鍵入我想要的數字,並有宏從「主」複製適當的列並按順序粘貼。

希望這是有道理的,很容易。我想在「主」選項卡中將「1」定義爲單元格A1:D26,並且每當「sheet1」中有一個「1」時,它將數組複製並粘貼,然後轉到下一個數字「15」同樣的事情已經定義。我不得不以某種方式定義所有的數組,但就像我說的那樣,這些不會改變。

任何建議將是偉大的。

感謝

亞當

+0

你想自動計算範圍還是計劃在代碼中硬連接它們(很可能你會希望爲此使用VBA - 如果我是對的,你可能想編輯問題相應標記)。 – Floris

+0

第二個問題 - 你是否想要覆蓋你的'1,15,35,84,99'或者你想讓這個副本在那之下開始? – Floris

+0

如果我可以用VBA來定義它們,那就太棒了。我如果我需要努力寫他們我也可以。從1,15,35,84,99下面開始會更好,因爲如果我需要添加一個數字「22」,可以說我可以將「35,84,99」移動並添加22,運行宏將假設。 – user3120991

回答

0

下面的代碼應該做的正是你所要求的;我認爲除了變量名稱和註釋之外,它不需要解釋。

Option Explicit 

Sub copyMerged() 
Dim wsMaster As Worksheet 
Dim wsTarget As Worksheet 
Dim rNumbers As Range 
Dim rSource As Range 
Dim rDest As Range 

Application.ScreenUpdating = False 

Set wsMaster = ActiveWorkbook.Sheets("Master") 
Set wsTarget = ActiveWorkbook.Sheets("Sheet1") 

' delete all cells below first row 
' otherwise we'll run in trouble with merged cells 
wsTarget.Range([2:2], wsTarget.Cells.SpecialCells(xlCellTypeLastCell)).Delete 
Set rNumbers = wsTarget.[A1] 
Set rDest = wsTarget.[A2] 
While Not IsEmpty(rNumbers) 
    Set rSource = getRange(wsMaster, Int(rNumbers.Value)) 
    Set rNumbers = rNumbers.Offset(0, 1) 
    rSource.Copy 
    rDest.PasteSpecial 
    Set rDest = rDest.Offset(0, 1).Cells(1, 1) 
Wend 

End Sub 

Function getRange(ws As Worksheet, v As Integer) As Range 
' return the vth merged cell in top row of ws 
' and return the range from there to the bottom 
Dim ii 
Dim r As Range 
Set r = ws.[A1] 

For ii = 1 To v - 1 
    Set r = r.Offset(0, 1) 
Next ii 

' select the entire merged cell... a bit weird 
Set r = Range(r, r.Offset(0, 1).Offset(0, -1)) 

' extend to the last cell in the block below this 
Dim r2 As Range 
Set r2 = r.Offset([A:A].Rows.Count - 1, 0).End(xlUp) 

Set getRange = Range(r, r2) 

End Function 
+0

這是我正在尋找的!非常感謝!! – user3120991

+0

我很高興能提供幫助。您可以通過點擊小複選標記來選擇「接受」答案。 – Floris

相關問題