EXCEL: Teile kopieren und zusammen stapeln

Hallo,
vielen Dank für die Hilfe ein paar threads weiter unten.

Leider habe ich noch ein weiter führendes Problem - Stapeln.

Bisher habe ich folgendes, mit sehr netter Hilfe von Munich und auch Alex, zusammengebracht:

Sub Copy()

’ Copy Makro
’ Makro am 2006-01-23 von K., D. aufgezeichnet
’ Tastenkombination: Strg+Umschalt+C

Dim inhalt As String
Dim quellrange As String
inhalt = Range(„Auswahl!B17“).Value
If inhalt = „Pizza“ Then quellrange = „B6:B32“
If inhalt = „Pasta“ Then quellrange = „C6:C32“
Sheets(„Zutaten“).Select
Range(quellrange).Copy
Sheets(„Zusammenstellung“).Select
Range(„C6“).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub

Ich will also abhängig davon was in B17 steht und gestartet durch Strg+Umsch+C, einen Bereich aus dem Blatt Tabelle4 nach C6 in Tabelle3 kopieren.
Klappt wunderbar, soweit sogut.

Was ich jetzt noch bräuchte…
Eigentlich ist es wie ein Kochrezept, oben beschrieben wähle ich erstmal die Richtung (also welchemBereich) aus…Pizza oder Pasta. Das mache ich mit der B17.
In der Tabelle 4 steht also in Spalte A alles was man an Zutaten für Pizza und Pasta verwenden kann…vieles paßt zu beidem…manches ist nur auf eine Kategorie beschränkt.
Beispiel:
Tomatensoße, Oregano, Parmesankäse, Pilze haben in Spalte „Pizza“ UND „Pasta“ eine 1;
Tagliatelle, Spaghetti, Penne, Gnocchi haben in Spalte „Pizza“ eine 0 und in Spalte „Pasta“ eine 1;
Pizzateig, Käserand, haben in Spalte „Pizza“ eine 1 und in Spalte „Pasta“ eine 0.

Da ich also in Spalte A hunderte „Zutaten“ aufführe hinter denen je nach Spalte (B oder C) dann eine 1 oder eine 0 drinstehen, wäre folgendes schön und übersichtlich:

  • Nur „Zutaten“ die in der Spalte Pizza eine 1 stehen haben werden überhaupt kopiert
  • Die „Zutaten“ werden entsprechend von C6 nach untengestapelt, daß keine leeren Zeilen dazwischen sind
  • Wenn also in „Auswahl“!B17 „Pizza“ ausgewählt wird, sollen in „Zusammenstellung“!C6 auch nur die mit 1 markierten Pizzazutaten aus der Spalte „Pizza“ erscheinen und das übersichtlich, kompakt und lückenlos.

Ich hoffe ich habe es einigermaßen klar beschrieben und danke schon mal für die Hilfe

Lieben Gruß
D.K.

Sub Copy()

Dim inhalt As String
Dim quellrange As String
Dim cell As Object
Dim sourcesheet As String

inhalt = Range("Auswahl!B17").Value
sourcesheet = "Zutaten" ' Der Name der Quelle
If inhalt = "Pizza" Then quellrange = "B6:B32"
If inhalt = "Pasta" Then quellrange = "C6:C32"
targetsheet = "Zusammenstellung" ' Name des Zielsheets
targetfirstcell = "C6" ' Zelle in die der erste Wert eingefügt werden soll

i = 0
For Each cell In Range(sourcesheet & "!" & quellrange)
 Range(targetsheet & "!" & Range(targetfirstcell).Offset(0, i).Address) = cell.Value
 i = i + 1
Next cell
End Sub

noch Fragen Hauser? :wink:

Sicher Kienzle :smile:)

Erstmal vielen Dank…du hast mich mal wieder entscheidene Schritte vorwärts gebracht.
Allerdings meckert mein Debugger fehlende Variablen an.
Nach deren Hinzufügung gehts:
Dim targetsheet As String
Dim targetfirstcell As String
Dim i As String

Allerdings, der einzige Unterschied zum vorherigen Makro ist, daß er die gleichen Werte wie vorher, jedoch jetzt transponiert reinkopiert, d.h. der Zeile nach, ab C6.
Die Zellen mit dem Wert 0 werden auch mitkopiert. Ich sehe zwar im Code die Unterscheidung (Offset(0, i)), daß er die Nuller auslassen soll, aber irgendwie stapelts nicht.

Außerdem habe ich eine Anforderung leider verpennt genauer zu spezifizieren.
In Sheet „Zutaten“ unter Spalte C und D stehen die 0 und 1 für WAHR und FALSCH. Das bedeutet ich will natürlich nicht die 1 nach Sheet „Zusammenstellung“ kopieren, sondern die Zutatennamen in Spalte B

(Beispiel: Wenn Pasta dann Zutat Pizzateig in Zelle C8 eine 1 also den Begriff Pizzateig aus B8 in die nächstleere Zelle in die Spalte unter C6 auf dem Sheet „Zusammenstellung“ kopieren. Wenn Zutat Tagliatelle in C9 eine 0 also den Begriff Tagliatelle aus B9 nicht kopieren.)

Vielen Dank und lieben Gruß
D.K.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Allerdings meckert mein Debugger fehlende Variablen an.

mein debugger meldet sowas nie - dr

Nach deren Hinzufügung gehts:
Dim i As String

as integer wenn dann bitte

Allerdings, der einzige Unterschied zum vorherigen Makro ist,
daß er die gleichen Werte wie vorher, jedoch jetzt
transponiert reinkopiert, d.h. der Zeile nach, ab C6.
Die Zellen mit dem Wert 0 werden auch mitkopiert. Ich sehe
zwar im Code die Unterscheidung (Offset(0, i)), daß er die
Nuller auslassen soll, aber irgendwie stapelts nicht.

da steht nix von nullern auslassen.
Offset ist der Befehl um den „Focus“ weiterzuschieben. (x,y) heisst x hach unten y nach rechts.
so wie ich Deine Mail verstanden hatte sollte er doch auch so umschichten…?

Außerdem habe ich eine Anforderung leider verpennt genauer zu
spezifizieren.
In Sheet „Zutaten“ unter Spalte C und D stehen die 0 und 1 für
WAHR und FALSCH. Das bedeutet ich will natürlich nicht die 1
nach Sheet „Zusammenstellung“ kopieren, sondern die
Zutatennamen in Spalte B

(Beispiel: Wenn Pasta dann Zutat Pizzateig in Zelle C8 eine 1
also den Begriff Pizzateig aus B8 in die nächstleere Zelle in
die Spalte unter C6 auf dem Sheet „Zusammenstellung“ kopieren.
Wenn Zutat Tagliatelle in C9 eine 0 also den Begriff
Tagliatelle aus B9 nicht kopieren.)

verwende genauso offset um Dir eine bedingung zu bauen und den Inhalt der jeweiligen Zelle auszulesen - wenn 1 dann soll er den inhalt einfügen - wenn nicht, dann nicht.
Die Befehle kennst Du ja inzwischen alle…

Grüsse
Munich