PDA

Vollständige Version anzeigen : Makro, jede Zeile aus Blatt 1 in jede 2.Zeile von Blatt 2


N.i.C.o.L.e
12.04.2012, 08:33
Hi Folks,

ich hoffe ihr könnt mir helfen.

Wie schreib ich in ein Makro, das ich aus Blatt 1 die Zeilen 3 der Spalte D bis „wohin auch immer“ mit jeweils der Zeile 3 der Spalte C multipliziere und das Ergebnis geht in das Blatt 2 der Zeile 5 der Spalte B bis „wohin auch immer“. Das eigentliche Problem ist, das im Blatt 1 jede Zeile der Spalten (von 3 bis wohin auch immer) berücksichtigt wird, aber im Blatt 2, wo das Ergebnis stehen soll zwischen jeder Zeile mit Inhalt eine Zeile frei gelassen wird. Also (Blatt 1 Spalte D Zeile 3)*(Blatt 1 Spalte C Zeile 3) in Blatt 2 Spalte B Zeile 5, (Blatt 1 Spalte D Zeile 4)*(Blatt 1 Spalte C Zeile 4) in Blatt 2 Spalte B Zeile 7 usw. für die Anzahl von z.B. 10 Zeilen des 1.Blattes.

Hoffe dass das verständlich ist.

Lg Nicole

mücke
12.04.2012, 09:08
Moin Nicole,

schau mal hier:
Option Explicit

Sub Nicole()

Dim z As Long, i As Long
Dim ws As Worksheet

Set ws = Worksheets("Tabelle2")
i = 5
With Worksheets("Tabelle1")
For z = 3 To .Cells(Rows.Count, 3).End(xlUp).Row
ws.Cells(i, 2) = .Cells(z, 3) * .Cells(z, 4)
i = i + 2
Next
End With

End Sub

N.i.C.o.L.e
12.04.2012, 11:08
Hi Mücke,

ja das funzt super. Wollte, um das für mehrere Spalten zu machen, eine Schleife schreiben, aber die spuckt nur die Werte für die Spalte B aus.

Kannst du mir da ein Anstoß geben?

Lg Nicole

mücke
12.04.2012, 11:25
Moin Nicole,

was möchtest Du denn wie in "mehreren Spalten" berechnen lassen?

N.i.C.o.L.e
12.04.2012, 12:07
Hi Mücke,

das was du geschrieben hast, funzt für eine Spalte B der Tabelle2. Ich wollte jetzt noch eine Schleife schreiben, die das für eine begrenzte Anzahl von Spalten der Tabelle2 macht(z.B. 10).
Natürlich unter dem Gesichtspunkt das die Werte weiter aus der Tabelle1 benutzt werden. Wobei die Spalte C immer mit der fortlaufenden Spalte (D->E->F->G->usw.) multipliziert wird und in die jeweiligen Zellen eingetragen werden.

Horizontal: C3*D3 in B5, C3*E3 in C5, C3*F3 in D5 usw. für z.B. 10 Spalten der Tabelle1 ab Spalte D.
Vertikal: Das war das, mit eine Zeile freilassen.

Hoffe es ist jetzt verständlicher.

Lg Nicole

mücke
12.04.2012, 12:33
Moin Nicole,

wenn ich dich richtig verstanden habe, dann brauchst Du dafür keine Schleife!
Anbei ein Beispiel für 3 Ausgabespalten (B, C und D)
Option Explicit

Sub Nicole()

Dim z As Long, i As Long
Dim ws As Worksheet

Set ws = Worksheets("Tabelle2")
i = 5
With Worksheets("Tabelle1")
For z = 3 To .Cells(Rows.Count, 3).End(xlUp).Row
ws.Cells(i, 2) = .Cells(z, 3) * .Cells(z, 4)
ws.Cells(i, 3) = .Cells(z, 3) * .Cells(z, 5)
ws.Cells(i, 4) = .Cells(z, 3) * .Cells(z, 6)
i = i + 2
Next
End With

End Sub
... wenn nicht, dann lad doch bitte eine Beispielmappe hoch.

N.i.C.o.L.e
12.04.2012, 12:54
Hi Dirk,

das ist mir auch in den Sinn gekommen, aber wollte das nicht nur für die Spalten B-D sondern für die Spalten B-SG, also für 500 Spalten machen. Das wollte ich nicht 500x schreiben^^. Daher dachte ich das man das mit einer Schleife einfacher lösen kann. Wenn das nicht geht, schreibe ich das halt 500x.

Lg Nicole

mücke
12.04.2012, 13:28
Moin Nicole,

OK, bei 500 Spalten würde ich es evtl. so versuchen.
Option Explicit

Sub Nicole()

Dim z As Long, zeile As Long
Dim s1 As Long, s2 As Long, sp As Long
Dim ws1 As Worksheet, ws2 As Worksheet

Set ws1 = Worksheets("Tabelle1")
Set ws2 = Worksheets("Tabelle2")

zeile = 5
s1 = 4
s2 = 2

For sp = 1 To 500
For z = 3 To ws1.Cells(Rows.Count, 3).End(xlUp).Row
ws2.Cells(zeile, s2) = ws1.Cells(z, 3) * ws1.Cells(z, s1)
zeile = zeile + 2
Next
s1 = s1 + 1
s2 = s2 + 1
zeile = 5
Next

End Sub

N.i.C.o.L.e
12.04.2012, 14:38
Hi Dirk,

danke, es funzt.

Lg Nicole