2009-07-15 10 views
9

Hallo, ich versuche, ein Makro zu erstellen, das eine Schleife hat, die eine Funktion in Spalte 1 (VOL) und eine weitere Funktion in Spalte 2 (CAPACITY) für jede Station kopiert. Das ist, was ich habe, so weit:Wie Zeilenspalten in Excel durchlaufen VBA Makro

Sub TieOut() 
    Dim i As Integer 
    Dim j As Integer 

    For i = 1 To 3 
     For j = 1 To 3 
      Worksheets("TieOut").Cells(i, j).Value = "'=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A9,"m/dd/yyyy"),'ZaiNet Data'!$C$1:$C$39038,0), 4)" 
     Next j 
    Next i 

End Sub 

Das Bild von dem, was ich will, ist unten: Sie können sehen, dass ich manuell kopiert haben und nach unten jede Spalte meine beiden Funktionen eingefügt. Ich brauche nur ein Makro, das es durchlaufen kann.

alt text http://i26.tinypic.com/nz4lfn.jpg

Die Funktion Ich möchte die VOL Spalte für jede Station durchgeschleift unten werden soll:

=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A438,"M/DD/YYYY"),'ZaiNet Data'!$C$1:$C$39038,0), 4) 

Die Funktion I für jede Station die Kapazität Säule geschlungen gelegt werden wollen, ist :

=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A438,"M/DD/YYYY"),'ZaiNet Data'!$C$1:$C$39038,0), 5) 

Könnte jemand p Leasing Hilfe? Vielen Dank!

UPDATE

**** Wie kann ich die Schleife laufen lassen automatisch ohne die Formel manuell in die ersten zwei Zellen und auf Makro klicken eingeben zu müssen?
Wie kann ich die Schleife auch durch alle Spalten/Zeilen laufen lassen? (Horizontal) ****

Ich habe zwei Screenshots enthalten, um zu zeigen, was ich meine. Unten ist mein aktueller Code. alt text http://i26.tinypic.com/i3gw9g.jpg alt text http://i29.tinypic.com/8izl.jpg Dank!

Sub Loop3() 
    Selection.Copy 
    ActiveCell.Offset(1, 0).Select 
    ActiveSheet.Paste 
    ActiveCell.Offset(-1, 1).Select 
    Selection.Copy 
    ActiveCell.Offset(1, 0).Select 
    ActiveSheet.Paste 
    ActiveCell.Offset(0, -1).Select 

    Dim i As Integer 
    Dim j As Integer 
     With Worksheets("Loop") 
      i = 1 
      Do Until .Cells(10, i).Value = "blank" 
       For j = 1 To 10 
        .Cells(j, i).Formula = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!E$7&TEXT(Loop!$A9,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),4)" 
        .Cells(j, i + 1).Formula = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!E$7&TEXT(Loop!$A9,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),5)" 
       Next j 
       i = i + 2 
      Loop 
    End With 

    Selection.Copy 
    ActiveCell.Offset(1, 0).Select 
    ActiveSheet.Paste 
    ActiveCell.Offset(-1, 1).Select 
    Selection.Copy 
    ActiveCell.Offset(1, 0).Select 
    ActiveSheet.Paste 
    ActiveCell.Offset(0, -1).Select 

End Sub 
+0

@ Techgirl09, Wenn Sie immer noch diese Frage folgen, ich weiß, es gibt einen einfacheren Weg, dies zu tun. 2 Fragen: Ist der Bereich, in den die Formel kopiert wird, immer gleich (d. H. Können Sie einen benannten Bereich erstellen)? und Soll dies bei der Blattaktivierung oder etwas anderem ausgelöst werden? –

+6

sieht aus, als ob kevin dir eine E-Mail geschickt hat, während du den Screenshot machst. Bitte antworte ihm unbedingt. –

Antwort

1

Try this:

Erstellen Sie ein Makro mit der folgenden Sache innen:

Selection.Copy 
ActiveCell.Offset(1, 0).Select 
ActiveSheet.Paste 
ActiveCell.Offset(-1, 1).Select 
Selection.Copy 
ActiveCell.Offset(1, 0).Select 
ActiveSheet.Paste 
ActiveCell.Offset(0, -1).Select 

Dieser spezielle Makro wird die aktuelle Zelle kopieren (setzen Sie den Cursor in die VOL Zelle, die Sie kopieren möchten) eine Zeile nach unten und kopiere dann auch die CAP-Zelle.

Dies ist nur eine einzige Schleife, so dass Sie das Kopieren VOL und CAP, wo Ihre aktuelle aktive Zelle 1 (wo du die Cursor) automatisieren können nach unten Zeile.

Setzen Sie es einfach in eine For-Schleife-Anweisung, es x Mal zu tun. mag:

For i = 1 to 100 'Do this 100 times 
    Selection.Copy 
    ActiveCell.Offset(1, 0).Select 
    ActiveSheet.Paste 
    ActiveCell.Offset(-1, 1).Select 
    Selection.Copy 
    ActiveCell.Offset(1, 0).Select 
    ActiveSheet.Paste 
    ActiveCell.Offset(0, -1).Select 
Next i 
+0

DANKE! Ich habe es funktioniert. Jetzt brauche ich die Schleife zu laufen, bis meine linke Spalte (Datumsbereich) leer ist. Ich werde sehen, wie ich das tun kann - wenn jemand Eingabe - würde sehr zu schätzen wissen. – Techgirl09

+1

Wenn Sie die aktive Zelle ändern, wird der Code extrem langsam. – Wilhelm

5

Hier mein sugestion ist:

Dim i As integer, j as integer 

With Worksheets("TimeOut") 
    i = 26 
    Do Until .Cells(8, i).Value = "" 
     For j = 9 to 100 ' I do not know how many rows you will need it.' 
      .Cells(j, i).Formula = "YourVolFormulaHere" 
      .Cells(j, i + 1).Formula = "YourCapFormulaHere" 
     Next j 

     i = i + 2 
    Loop 
End With 
+0

Danke - das hat meine Formel durch die Zellen kopiert und eingefügt, aber um das zu tun, muss ich die Formel manuell in die ersten beiden Zellen eingeben und dann auf Makro klicken. Gibt es eine Möglichkeit, es vollständig automatisch zu machen? Zum Beispiel, wenn mein Blatt wie in der dritten STATION vollständig leer ist, wie kann die Formel dann automatisch vollständig ausgefüllt werden? – Techgirl09

+0

Mit dem hier angegebenen Code wird die Formel auf die Formeleigenschaft geschrieben, sie wird nicht kopiert. Sie müssen die Formel nicht in die ersten beiden Zellen schreiben. – Wilhelm

0

Ich würde das Range-Objekt des AutoFillmethod hierfür empfehlen:

rngSource.AutoFill Destination:=rngDest 

den Quellbereich an, der die Werte enthält, oder Formeln, die Sie ausfüllen möchten, und den Zielbereich als den gesamten Bereich, in den die Zellen gefüllt werden sollen.Der Zielbereich muss den Quellbereich enthalten. Sie können sowohl über als auch nach unten füllen.

Es funktioniert genau so wie wenn Sie die Zellen an der Ecke mit der Maus manuell "gezogen" hätten; absolute and relative formulas funktionieren wie erwartet.

Hier ist ein Beispiel:

'Set some example values' 
Range("A1").Value = "1" 
Range("B1").Formula = "=NOW()" 
Range("C1").Formula = "=B1+A1" 

'AutoFill the values/formulas to row 20' 
Range("A1:C1").AutoFill Destination:=Range("A1:C20") 

Hoffnung, das hilft.

1

Dieser ist ähnlich wie @ Wilhelms Lösung. Die Schleife wird basierend auf einem Bereich automatisiert, der durch Auswertung der Spalte für das aufgefüllte Datum erstellt wurde. Dies wurde zusammen auf Grund der Konversation hier und Screenshots geschlagen.

Bitte beachten Sie: Dies setzt voraus, dass die Header immer in der gleichen Zeile (Zeile 8) sind. Durch Ändern der ersten Datenzeile (Verschieben des Headers nach oben/unten) wird die Bereichsautomatisierung unterbrochen, es sei denn, Sie bearbeiten den Bereichsblock dynamisch in der Kopfzeile. Andere Annahmen beinhalten, dass VOL- und CAPACITY-Formel-Spaltenüberschriften "Vol" bzw. "Cap" heißen.

Sub Loop3() 

Dim dtCnt As Long 
Dim rng As Range 
Dim frmlas() As String 

Application.ScreenUpdating = False 

'The following code block sets up the formula output range 
dtCnt = Sheets("Loop").Range("A1048576").End(xlUp).Row    'lowest date column populated 
endHead = Sheets("Loop").Range("XFD8").End(xlToLeft).Column   'right most header populated 
Set rng = Sheets("Loop").Range(Cells(9, 2), Cells(dtCnt, endHead)) 'assigns range for automation 

ReDim frmlas(1)  'array assigned to formula strings 
    'VOL column formula 
frmlas(0) = "VOL FORMULA" 
    'CAPACITY column formula 
frmlas(1) = "CAP FORMULA" 

For i = 1 To rng.Columns.count 
If rng(0, i).Value = "Vol" Then   'checks for volume formula column 
    For j = 1 To rng.Rows.count 
     rng(j, i).Formula= frmlas(0) 'inserts volume formula 
    Next j 
ElseIf rng(0, i).Value = "Cap" Then  'checks for capacity formula column 
    For j = 1 To rng.Rows.count 
     rng(j, i).Formula = frmlas(1) 'inserts capacity formula 
    Next j 
End If 
Next i 

Application.ScreenUpdating = True 

End Sub