webentwicklung-frage-antwort-db.com.de

wie Sie durch Spalten von Zeilen in Excel VBA Macro gehen

Hi, 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 habe ich bisher:

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 meine beiden Funktionen manuell in jede Spalte kopiert und eingefügt habe. Ich brauche nur ein Makro, das durchlaufen kann.

alter Text http://i26.tinypic.com/nz4lfn.jpg

Die Funktion, für die ich die VOL-Spalte für jede Station durchlaufen lassen möchte, lautet:

=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, die ich für jede Station in der Spalte CAPACITY durchlaufen lassen möchte, lautet:

=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 bitte helfen? Vielen Dank!

UPDATE

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

Ich habe zwei Screenshots beigefügt, um zu zeigen, was ich meine. Unten ist mein aktueller Code . alter Text http://i26.tinypic.com/i3gw9g.jpgalter Text http://i29.tinypic.com/8izl. jpg Danke!

    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
9
Techgirl09

Hier ist mein Vorschlag:

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
6
Wilhelm

Versuche dies:

Erstellen Sie ein Makro mit dem folgenden Inhalt:

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

Dieses bestimmte Makro kopiert die aktuelle Zelle (setzen Sie den Cursor in die VOL-Zelle, die Sie kopieren möchten) eine Zeile nach unten und kopiert dann auch die CAP-Zelle.

Dies ist nur eine einzige Schleife, sodass Sie das Kopieren von VOL und CAP von der aktuellen aktiven Zelle (wo sich der Cursor befindet) in eine Zeile nach unten automatisieren können.

Fügen Sie es einfach in eine For-Schleife-Anweisung ein, um es x-mal zu tun .. _.

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
1
Jimmy Chandra

Diese ist der @ Wilhelms-Lösung ähnlich. Die Schleife wird basierend auf einem Bereich automatisiert, der durch Auswertung der aufgefüllten Datumsspalte erstellt wird. Dies wurde basierend auf dem Gespräch hier und den Screenshots zusammengeschlagen.

Bitte beachten Sie: Dies setzt voraus, dass sich die Kopfzeilen immer in derselben Zeile befinden (Zeile 8). Das Ändern der ersten Datenzeile (Verschieben des Headers nach oben/unten) führt zu einer Unterbrechung der Bereichsautomatisierung, es sei denn, Sie bearbeiten den Bereichsblock, um ihn dynamisch in die Headerzeile aufzunehmen. Andere Annahmen beinhalten, dass die Spaltenüberschriften der VOL- und CAPACITY-Formel "Vol" bzw. "Cap" genannt werden.

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
1
Jomtung

Ich würde die AutoFillMethode des Range-Objekts dafür empfehlen:

rngSource.AutoFill Destination:=rngDest

Geben Sie den Quellbereich an, der die Werte oder Formeln enthält, 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 genauso wie beim manuellen "Ziehen" der Zellen an der Ecke mit der Maus; absolute und relative Formeln Arbeit 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")

Hoffe das hilft.

0
Nossidge