AW: Schritt für Schritt
10.08.2010 18:58:53
mpb
Hallo Peter,
er wäre hilfreich gewesen, wenn Du den per Makrorekorder aufgezeichneten Code in der Beispieldatei mitgepostet hättest. Ich habe das jetzt mal nachgeholt. Aktiviert war die Tabelle "Data" und ich habe für eine "Zeile" manuell alle copy/paste-Schritte durchgeführt. Ergebnis:
Sub Peters_Aufzeichnung()
Range("A2:G2").Select
Selection.Copy
Sheets("Analysis").Select
Range("K1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Calculate
Range("C1:I1").Select
Selection.Copy
Sheets("Data").Select
Range("I2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
Dieser Code enthält überflüssigen Ballast, z.B. Selects, daher habe ich ihn entschlackt mit folgendem Ergebnis:
Sub Peters_Aufzeichnung_entschlackt()
Worksheets("Data").Range("A2:G2").Copy
Worksheets("Analysis").Range("K1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Calculate
Worksheets("Analysis").Range("C1:I1").Copy
Worksheets("Data").Range("I2").PasteSpecial Paste:=xlPasteValues
End Sub
Somit haben wir einen brauchbaren Code für einen Kopiervorgang. In Deiner Beispieldatei soll das jedoch für 5 Zeilen (Zeilen-Nr. 2-6) wiederholt werden. Ich nehme jetzt mal an, der Beginn des relevanten Bereichs in "Data" ist immer in Zeile 2 und die letzte Zeile ist variabel. Also können wir die For-Next-Schleife, für die ich mich der Einfachheit halber entschieden habe, mit Zeile 2 beginnen lassen. Die letzte Zeile muss aber im Makro noch ermittelt werden. Außerdem muss für den ersten der beiden Kopiervorgänge je Schleifendurchlauf die "Quelladresse" und für den zweiten Kopiervorgang die "Zieladresse" variabel adressiert werden. Ansonsten würde immer Zeile 2 kopiert und im zweiten Kopiervorgang würden die Ergbnisse überschrieben. Diese Überlegungen in Code umgesetzt ergibt dann folgenden Code:
Sub Peters_Aufzeichnung_mit_Schleife()
'Feststellen, wieviele Zeilen kopiert werden sollen
'Der Code entspricht folgendem manuelle Vorgehen:
'Zelle A65356 markieren, STRG-PFEITASTE NACH OBEN drücken und Zeilennummer auslesen
z = Worksheets("Data").Range("A65356").End(xlUp).Row
'Schleife von Zeile 2 bis Zeile z
' Statt Range verwenden wir Cells, da einfacher zu indizieren
For i = 2 To z
Worksheets("Data").Range(Worksheets("Data").Cells(i, 1), Worksheets("Data").Cells(i, 6)). _
Copy
Worksheets("Analysis").Range("K1").PasteSpecial Paste:=xlPasteValues
Calculate
Worksheets("Analysis").Range("C1:I1").Copy
Worksheets("Data").Cells(i, 9).PasteSpecial Paste:=xlPasteValues
Next i
Application.CutCopyMode = False
End Sub
Einziges Problem: Die Calculate-Anweisung (=F9) bewirkt in der Beispieldatei nichts, da die TEILERGEBNIS-Formeln auf immer den gleichen Bereich zugreifen und somit 5mal das gleiche Ergebnis liefern. Ich vermute mal aufgrund des älteren Threads, dass hier noch die Filterung erfolgen muss.
Abschließend noch eine Bitte: Versuche mal nachzuvollziehen und zu verstehen, wie man von aufgezeichnetem Code zu dem gewünschten Makro kommt. Ich denke, dass wird Dir für künftige Aufgaben nützen.
Gruß
Martin