2016-04-14 57 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