VBA Ausgewählte Zeilen kopieren und in anderer Tabelle einfügen (mit Variablen)?

2 Antworten

Stören dich die Lücken in der neuen Tabelle?

Dann brauchst du zwei Zeilen-Variablen, eine für die Quelltabelle und eine für die Zieltabelle.

Die Variable für die Quelltabelle kannst du nach wie vor in einer Zählschleife laufen lassen, die Variable für die Zieltabelle erhöhst du nur, wenn etwas einzutragen ist.

(Wenn du das Makro öfters aufrufen willst, vergiss nicht, die folgenden, nicht benötigten Zeilen der Zieltabelle zu leeren.)

Das sollte übrigens auch ohne Makro gehen.

Woher ich das weiß:Berufserfahrung – Software-Entwickler

MPCKhome 
Fragesteller
 01.02.2016, 11:07

Ja die Lücken stören aber dank dir weiß ich jetzt wie ich das weg bekomme. Danke schon mal.
Das Problem ist bloß das mein Code nicht funktioniert.
Ich eiß nicht wie ich die Zellbereiche kopiere. Da kommt immer entweder Syntaxfehler oder Objekt-Fehler

0
PWolff  01.02.2016, 11:41
@MPCKhome

Es könnte sein, dass

Worksheets(1).Range(Cells(x, 2), Cells(x, 9)).Value = Worksheets(2).Range(Cells(x, 1), Cells(x, 8)).Value

funktioniert, es würde mich aber überraschen, da Value die Standard-Eigenschaft eines Range-Objektes ist. ("Standardeigenschaft" bzw. "Default-Eigenschaft" bedeutet, dass man diese Eigenschaft nicht ausdrücklich nennen muss.)

Vermutlich kann man die Value-Eigenschaft eines Range-Objektes aus mehreren Zellen nicht so einfach setzen, selbst wenn die Größen (Breite und Höhe) der Bereiche übereinstimmen.

Dann musst du eine Schleife nehmen, die die Zellen einer Zeile einzeln kopiert. Oder du verwendest die eingebaute Copy-&-Paste-Funktion; das ist aber für so wenige Zellen aufwendiger und langsamer.

0
MPCKhome 
Fragesteller
 01.02.2016, 11:50
@PWolff

Auf die Idee alles einzeln zu machen bin ich noch gar nicht gekommen.
Habs jetzt so gemacht und es klappt.
Aber die lücken sind noch da

Dim x As Integer

For x = 3 To 60
If Worksheets(2).Cells(x, 10) = "1" Then

Worksheets(1).Cells(x, 2) = Worksheets(2).Cells(x, 2)
Worksheets(1).Cells(x, 3) = Worksheets(2).Cells(x, 3)
Worksheets(1).Cells(x, 4) = Worksheets(2).Cells(x, 4)
Worksheets(1).Cells(x, 5) = Worksheets(2).Cells(x, 5)
Worksheets(1).Cells(x, 6) = Worksheets(2).Cells(x, 6)
Worksheets(1).Cells(x, 7) = Worksheets(2).Cells(x, 7)
Worksheets(1).Cells(x, 8) = Worksheets(2).Cells(x, 8)

End If
Next x

Da muss ich dann eine neue variable für Tabelle1 nehmen. Aber ich weiß nicht wie ich das angebe das die variable sich immer nur erhöht um 1, wenn die Eine Zeile voll ist

0
PWolff  01.02.2016, 13:03
@MPCKhome
x2 = 3 'oder entsprechender anderer Startwert in Zieltabelle

For x = 3 To 60
If Worksheets(2).Cells(x, 10) = "1" Then

'die folgenden Zeilen könnten auch mit einer eigenen Schleife ersetzt werden
Worksheets(1).Cells(x, 2) = Worksheets(2).Cells(x2, 2)
Worksheets(1).Cells(x, 3) = Worksheets(2).Cells(x2, 3)
Worksheets(1).Cells(x, 4) = Worksheets(2).Cells(x2, 4)
Worksheets(1).Cells(x, 5) = Worksheets(2).Cells(x2, 5)
Worksheets(1).Cells(x, 6) = Worksheets(2).Cells(x2, 6)
Worksheets(1).Cells(x, 7) = Worksheets(2).Cells(x2, 7)
Worksheets(1).Cells(x, 8) = Worksheets(2).Cells(x2, 8)

x2 = x2 + 1
End If
Next x
1
MPCKhome 
Fragesteller
 01.02.2016, 13:18
@PWolff

Top. Eigentlich simpel, man muss nur erstmal darauf kommen :D
So jetzt hab ich noch ein kleines Problem aber das versuche ich selber zu lösen.
Danke

0
Iamiam  02.02.2016, 00:39
@MPCKhome

es gibt in VBA das Objekt .entirerow / .entirecolumn

Also zB

if CountA(activecell.entirerow.cells) > 0 (oder so ähnlich)

then activecell.entirerow.copy (alles in einer Zeile, das geht, weil kein Else notwendig, deshalb auch keine extra Zeile, auch kein End If)

Worksheets("soundso").Range("A1").end(xldown).offset(1, 0).entirerow.insert

sollte die koppierte Zeile an die bisherigen Einträge als neue Zeile anhängen (Sofern alle Zellen in Spalte A gefüllt)

probiers damit, hab das alles nur aus der Erinnerung raus gemacht, die Syntax stimmt nur ungefähr!

0

Probier mal Copy & Paste:

Call Worksheets(2).Range(Cells(x, 1), Cells(x, 8)).Copy( _
  Worksheets(1).Range(Cells(x, 2), Cells(x, 9)))
Woher ich das weiß:Berufserfahrung – Programmierer

MPCKhome 
Fragesteller
 01.02.2016, 12:57

Das kopieren klappt jetzt. bloß sind die Lücken zwischen den eingefügten Zeilen immer noch da. Diese möchte ich aber weghaben.
Da weiß ich im Moment nicht weiter. 

0
Ninombre  01.02.2016, 13:06
@MPCKhome

Analog dem Beispiel von pwolff: weitere Variable, z.B. y

Call Worksheets(2).Range(Cells(x, 1), Cells(x, 8)).Copy( _
  Worksheets(1).Range(Cells(y, 2), Cells(y, 9)))

direkt zu Beginn des Makros y=1 setzen als Anfangswert (gibt sonst eine Fehlermeldung)

und innerhalb der IF Abfrage y=y+1

0