2016-04-14 53 views
0

我有一個錄製的宏,用於Excel中的簡單過程。但是,我需要它重複約80行的過程。這是我前四行的代碼。任何幫助簡單的方法來做到這一點,將不勝感激。謝謝。Excel宏 - 重複一個過程

Sub Macro2() 
' 
' Macro2 Macro 
' 

' 
Range("A5").Select 
ActiveCell.FormulaR1C1 = "1" 
Sheets("EST COST").Select 
Range("D6").Select 
Selection.Copy 
Sheets("IL").Select 
Range("I5").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Range("A5").Select 
ActiveCell.FormulaR1C1 = "0" 

Range("A6").Select 
ActiveCell.FormulaR1C1 = "1" 
Sheets("EST COST").Select 
Range("D6").Select 
Selection.Copy 
Sheets("IL").Select 
Range("I6").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Range("A6").Select 
ActiveCell.FormulaR1C1 = "0" 

Range("A7").Select 
ActiveCell.FormulaR1C1 = "1" 
Sheets("EST COST").Select 
Range("D6").Select 
Selection.Copy 
Sheets("IL").Select 
Range("I7").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Range("A7").Select 
ActiveCell.FormulaR1C1 = "0" 
End Sub 
+1

通讀[如何避免使用'.Select '\'.Activate'](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros),這將大大** **減少代碼,並向您展示如何直接處理數據。 – BruceWayne

回答

2

您想使用for ... next循環。一些谷歌搜索應該讓你很遠,但這裏的總體思路的味道:

dim startRow as integer 
dim endRow as integer 
dim myColumn as integer 

startRow = 5 
endRow = 45 
For activeRow = startRow to endRow 
    [do something] 
    myColumn = [some column number] 
    cells(activeRow, myColumn).Value = [something] 
Next activeRow 
0

像這樣的事情

Sub test() 

    Dim wsTarget As Worksheet 
    Dim wsSource As Worksheet 

    Set wsTarget = Sheets("EST COST") 
    Set wsSource = Sheets("IL") 

    Dim intIndex As Integer 
    For intIndex = 5 To 85 

     wsTarget.Range("A" & intIndex).FormulaR1C1 = "1" 
     wsTarget.Range("D" & intIndex).Copy 
     With wsSource 
      .Range("I" & intIndex).PasteSpecial Paste:=xlPasteValues _ 
      , Operation:=xlNone, SkipBlanks:=False, Transpose:=False 

      .Range("A" & intIndex).FormulaR1C1 = "0" 
     End With 
    Next 

End Sub 
0

爲了使您的代碼相似,你有它,試試這個:

Sub test() 
Dim rng As Range 
Dim i& 

For i = 5 To 40 
' WHAT SHEET IS YOUR DEFAULT RANGES ON? 
Range("A" & i).FormulaR1C1 = "1" ' what sheet is this on? We want to be explicit 
Sheets("EST COST").Range("D" & i + 1).Copy 
Sheets("IL").Range("I" & i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Range("A" & i).FormulaR1C1 = "0" 
Next i 

End Sub 

我假設你想粘貼的範圍被抵消一行(你複製A5,粘貼到I6)。正如我注意到的,我想知道你的範圍要複製的是什麼表,所以我們可以將該工作表添加到範圍內(Range("A"& i)...應該是Sheets("mainSheet").Range("A"&i)...

+0

非常感謝。這工作完美。我只需要改變複製單元格的範圍。那總是會是「D6」。 –

+0

@RyanAmes - 如果它適合你,你介意標記爲答案嗎?另外,看看如何擺脫'.Select'?基本上,您可以「備份」兩行,一行以'.Select'結尾,另一行以'Selection.'開始直接處理數據。 – BruceWayne