18.02.2016, 18:25 (Dieser Beitrag wurde zuletzt bearbeitet: 18.02.2016, 18:54 von Peggymaus.)
Hallo Ihr Lieben,
habe eine Arbeitsmappe mit mehreren Tabellenblättern. Alle Blätter haben den gleichen Aufbau. (Es ist eine Artikelliste.) Zeile 1 uns 2 ist der Tabellenkopf. Danach unterschiedliche Anzahl an befüllten Zeilen. In Spalte G steht ein Datum.
Die Reiter sind benannt mit: 01.01.2016, 01.02.2016, 01.03.2016... usw. und ein Reiter heißt Sperrliste.
Wenn ich Spalte I in einer der Tabellen ein S bei einem Artikel eingetragen wird, wird über einen Button und Makro diese komplette Zeile mit dem Artikel in die Sperrliste verschoben. Das habe ich schon hin bekommen und es klappt super.
Mein Problem ist nun folgendes. Wenn ich in der Sperrliste in der Spalte I bei einem Artikel das S wieder herausnehme, möchte ich durch betätigen eines Buttons ein Makro auslösen, welches dann die Sperrliste Zeile für Zeile durchläuft und die Artikel, wo kein S mehr in Spalte I steht, in die ursprünglichen Tabellen ans Ende zurück kopiert, d. h. wenn ich Spalte G ein Datum steht z.B. 15.03.2016 soll der Artikel in das Tabellenblatt 01.03.2016 zurück kopiert werden, der Artikel mit Datum 28.02.16 in das Blatt 01.02.2016 usw.
Irgendwie habe ich noch keinen Plan, wie ich das anstellen soll.
Zitat:Das habe ich schon hin bekommen und es klappt super.
Der ganze Aufbau der Mappe erscheint mir fragwürdig. Warum nicht alles in ein Blatt mit der "Sperrspalte"? Dann ist es ein Klacks, die Sperrung wegzufiltern und/oder eine Datenüberprüfung laufen zu lassen. Da die Datei bereits vorhanden ist, solltest Du diese auch hochladen.
Bevor Du meckerst: eine Datei kann man anonymisieren, wichtig ist der Aufbau.
Auswertungen großer Datenmengen sollte man dann per Pivot-Tabelle vornehmen.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Ah, ich sehe gerade! Unsere Peggymaus hat drei Themen erstellt und bereits drei Beiträge abgesendet Habe mir den Verlauf mal angesehen. Trotz teilweise arbeitsintensiver Antworten hält sie es nicht für notwendig, auch mal zu antworten. Ich glaube, ich werde es ab sofort bei ihr auch so halten, sollte nicht zeitnah eine Antwort kommen.
Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Habe mir überlegt, ob ich per VBA das Datum aus der Spalte G in der Sperrliste so auslesen kann, dass der Monat und das Jahr herauskommt. Dann mit der 01 davor verketten, dann hätte ich den richtigen Tabellennamen.
Aber wie ich diese Verkettung als variablen Bestandteil in mein Makro bekomme... keine Ahnung.
und dann Umwandlung in einen festen Wert dem Artikel den Quelltabellennamen mit zu geben.
Aber wie kann ich diesen dann wieder einbauen zum Rückübertragen?
Den folgenden Code habe ich im Netz gefunden und denke dass dieser mein Ziel erfüllen kann.
Jedoch weiß ich nicht, wie ich den Tabellennamen dort einfügen kann.
Sub KopiereBereich() Dim Quelltab As Worksheet Dim Zieltab As Worksheet Dim Zelle As Range Dim Zaehler As Long Zaehler = 1 Bereich = "A1:A10" Set Quelltab = ActiveWorkbook.Worksheets("Tabelle1") Set Zieltab = ActiveWorkbook.Worksheets("Tabelle2") For Each Zelle In Quelltab.Range("A1:A10") Zieltab.Cells(Zaehler, 1) = Zelle Zaehler = Zaehler + 1 Next Zelle End Sub
unten den Code anschauen und verstehen und bei Dir zu zurück kopieren verwenden:
Code:
Dim i As Long Dim letzteZeile Dim strgTab As String
For i = 2 To 100 If Cells(i, 9) = "S" Then 'Spalte i nach "S" prüfen strgTab = DateSerial(Year(Cells(i, 7)), Month(Cells(i, 7)), 1) 'wenn ein "S" dann aus dem Datum der Spalte G der Zeile das entsprechende Blatt (Zieltabelle) ermitteln With Sheets(strgTab) letzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'erte freie Zeile in Spalte 1 der Zieltabelle ermitteln .Range(.Cells(letzteZeile, 1), .Cells(letzteZeile, 15)) = Range(Cells(i, 1), Cells(i, 15)).Value 'Den Inhalt des Bereichs A:O in den in den Bereich A:O der Zieltabelle schreiben End With End If Next i
19.02.2016, 15:09 (Dieser Beitrag wurde zuletzt bearbeitet: 19.02.2016, 15:56 von Rabe.
Bearbeitungsgrund: Code als Code formatiert (Tag [code]...[/code])
)
Hallo Attila,
habe next auch noch eingefügt und alles angepasst jetzt funktioniert es. Super. Genau so wollte ich es haben.
Wie kann ich folgende Zeilen umbauen, dass immer die ganzen Zeilen und nicht nur die Werte sondern auch Formatierungen und Co. mit kopiert werden?
Code:
For i = 3 To 100 If Cells(i, 16) = "1" Then 'Spalte p nach "1" prüfen strgTab = DateSerial(Year(Cells(i, 7)), Month(Cells(i, 7)), 1) 'wenn ein "S" dann aus dem Datum der Spalte G der Zeile das entsprechende Blatt (Zieltabelle) ermitteln With Sheets(strgTab) letzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'erte freie Zeile in Spalte 1 der Zieltabelle ermitteln .Range(.Cells(letzteZeile, 1), .Cells(letzteZeile, 15)) = Range(Cells(i, 1), Cells(i, 15)).Value 'Den Inhalt des Bereichs A:O in den in den Bereich A:O der Zieltabelle schreiben End With End If Next