下面的代碼應該做的正是你所要求的;我認爲除了變量名稱和註釋之外,它不需要解釋。
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
你想自動計算範圍還是計劃在代碼中硬連接它們(很可能你會希望爲此使用VBA - 如果我是對的,你可能想編輯問題相應標記)。 – Floris
第二個問題 - 你是否想要覆蓋你的'1,15,35,84,99'或者你想讓這個副本在那之下開始? – Floris
如果我可以用VBA來定義它們,那就太棒了。我如果我需要努力寫他們我也可以。從1,15,35,84,99下面開始會更好,因爲如果我需要添加一個數字「22」,可以說我可以將「35,84,99」移動並添加22,運行宏將假設。 – user3120991