2016-04-14 21 views
0

Excel'de basit bir işlem için kayıtlı bir makro var. Ancak, yaklaşık 80 satırlık işlemi tekrarlamak gerekiyor. İşte ilk 4 satır için sahip olduğum kod. Bunu yapmak için basit bir şekilde herhangi bir yardım takdir edilecektir. Teşekkür ederim.Excel Makro - Bir işlemi tekrarlayın

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

[Nasıl kullanılır?] '\' .Activate'] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros), bu ** büyük ölçüde ** kodu kesecek ve verilerinizle doğrudan nasıl çalışacağınızı gösterir. – BruceWayne

cevap

2

Bunun için bir sonraki ... kullanmak istiyorsunuz. Bazı Googling oldukça uzağa götürmez, ancak genel yaklaşım fikrinin bir lezzet olmalıdır:

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

şey böyle

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

sende olduğunca benzer kodunuzu tutmak için, bu deneyin:

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 

Yapıştırılan aralığın bir satır ofset olmasını istediğinizi varsayalım (A5'i kopyalayıp, I6'ya yapıştırılmış). Yine de belirttiğim gibi, kopyalanacak aralığınızın hangi sayfada olduğunu bilmeyi tercih ediyorum, bu yüzden bu çalışma sayfasını aralığa ekleyebiliriz (gerçekten Sheets("mainSheet").Range("A"&i)... olmalıdır.)

+0

Çok teşekkür ederim. Bu mükemmel çalıştı. Sadece kopyalanan hücre aralığını değiştirmek zorunda kaldım. Bu her zaman "D6" olacaktı. –

+0

@RyanAmes - Sizin için işe yararsa, cevap olarak işaretlemeyi düşünür müsünüz? Ayrıca, 'Nasıl Seçiniz? ' temel olarak, ".Select" ile biten ve "Selection." ile başlayan ve ardından verilerle doğrudan çalışmak için iki satır "yedekleyebilirsiniz". – BruceWayne

İlgili konular