ich habe ein Problem, wo ich nicht weiterkomme, es ist etwas umfangreich und für mich kompliziert, bin "okay" in Excel aber bei weitem kein Profi. Ich habe eine Excel-Datei, die wie folgt aussieht:
Arbeitsblatt "Start" Spalten A bis T in einer Tabelle "TabelleStart"gewandelt (also keine Zeilenzahl, da diese immer länger oder kürzer werden kann) A1 bis T1 hat die Tabellenüberschriften Ab A2 bis T2 sind Namen pro Zeile (also A3 bis T3 und A4 bis T4 und A5 bis T5 usw. ) mit weiteren Informationen wie herkunft Geburtsdatum usw.
Arbeitsblatt "Ende" exakt aufgebaut mit den gleichen Formaten und Überschriften wie in Arbeitsblatt "Start" die Tabelle "TabelleEnde" ist natürlich ohne weitere Daten.
SO, was soll jetzt passieren.
Ich möchte gerne über einen "Button" die Zeilen mit den Daten in die Tabelle "TabelleEnde" aufgelistet bekommen, allerdings nur wenn in der Spalte T ein x ist. Also wenn in Arbeitsblatt "Start" in der "TabelleStart": A2=... B2=...C2=... - T2= "x" A3=... B3=...C3=... - T3= A4=... B4=...C4=... - T4= A5=... B5=...C5=... - T5= "x"
Dann soll durch den "Button" der Inhalt A2-T2 und auch A5-T5 komplett ausgeschnitten werden und in Arbeitsblatt "Ende" in der "TabelleEnde" übertragen werden. Zum Schluss soll die "TabelleStart" eine Zeile weniger haben und der vorherige Inhalt in "TabelleEnde" nacheinander eingefügt werden.
Danke vorab an die Profis! :)
Anbei sende ich euch die bestehende Liste mit paar Musterdaten.
Ich hänge Dir Deine Datei mit einem Makro versehen an. Dieses Makro macht folgendes: Aus der Tabelle "Start" werden alle Zeilen, die in der Spalte T ein "x" enthalten, in die Tabelle "Ende" übertragen. – Diese Zeilen werden aus der Tabelle "Start" entfernt. Das Makro könnte viel eleganter geschrieben werden. Vor allem die Select-Befehle gefallen mir nicht besonders. Aber ich meine, es macht das, was Du haben willst.
Zwei Sachen noch dazu: a) In Deiner Tabelle Start enthalten in Spalte A nicht alle Zeilen eine Seriennummer. Deshalb habe ich Spalte B (Namen) als "Zählspalte" genommen. Wichtig ist: In Spalte B muss jede Zeile einen Namen enthalten! b) Du hast beide Tabellen als "intelligente" Tabellen eingerichtet. Bei der Verarbeitung ergeben sich deswegen Probleme in der Tabelle Ende. Ich habe deshalb diese Tabelle Ende in eine "normale" Tabelle konvertiert (Tabellentools / Entwurf / In Bereich konvertieren). – Wenn Du das Makro in einer andern Datei einsetzen willst, musst Du das unbedingt für die Tabelle "Ende" ebenfalls machen.
With Worksheets("Start") If WorksheetFunction.CountIf(.Columns("T"), "x") > 0 Then With Worksheets("Ende") loLetzte = .Columns("T").Find(what:="*", LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious).Offset(1).Row End With .Range("A1").AutoFilter field:=20, Criteria1:="x" With .ListObjects("Start").AutoFilter.Range .Offset(1).Resize(.Rows.Count - 1).Copy Worksheets("Ende").Cells(loLetzte, "A").PasteSpecial Paste:=xlPasteValuesAndNumberFormats .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete End With Application.CutCopyMode = False .Range("A1").AutoFilter .Range("A1").AutoFilter End If End With
End Sub
Es werden nur die Werte und Zahlenformate übertragen, nicht die Formatierungen.
Gruß Werner
Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:1 Nutzer sagt Danke an Werner.M für diesen Beitrag 28 • jet1988
26.07.2021, 08:45 (Dieser Beitrag wurde zuletzt bearbeitet: 26.07.2021, 08:45 von jet1988.)
Danke an beide erstmal! Hat soweit geklappt! Bei der Version von "Werner.M" war es genau so wie ich es mir vorgestellt habe.
Jetzt ist nur noch eine Sache, bin wohl zu blöd für Makros. Kann man eine Rückmeldung geben lassen? Also dass es eine Information gibt, wieviele Zeilen übertragen wurden? Ähnlich wie "Es wurden X Vorgänge übertragen!"
(26.07.2021, 08:45)jet1988 schrieb: Danke an beide erstmal! Hat soweit geklappt! Bei der Version von "Werner.M" war es genau so wie ich es mir vorgestellt habe.
Jetzt ist nur noch eine Sache, bin wohl zu blöd für Makros. Kann man eine Rückmeldung geben lassen? Also dass es eine Information gibt, wieviele Zeilen übertragen wurden? Ähnlich wie "Es wurden X Vorgänge übertragen!"
Danke vorab und Grüße!
Ich habe auch festgestellt, dass er manchmal in der Zieltabelle vorhandene Einträge, die manchmal auch manuell eingetragen werden, einfach überschreibt?
Danke an beide erstmal! Hat soweit geklappt! Bei der Version von dir "Werner.M" war es genau so wie ich es mir vorgestellt habe.
Jetzt sind noch 3 Sachen, bin wohl zu blöd für Makros. 1. Kann man eine Rückmeldung geben lassen? Also dass es eine Information gibt, wieviele Zeilen übertragen wurden? Ähnlich wie "Es wurden X Vorgänge übertragen!"
2. Ein weiterer Button soll eine neue Zeile in TabelleStart machen, so dass die Tabelle (Dynamisch) größer wird. Der Button "NeueZeile" soll also diese neue Zeile erstellen, die nach der letzten gefüllten Zeile (Nach Spalte B, da diese Spalte IMMER mit Daten gefüllt ist) und man soll auch in die Zelle A derjenigen Zeile springen, worin man dann was eintragen kann ohne runterscrollen zu müssen.
3. Ich habe auch festgestellt, dass er manchmal in der Zieltabelle vorhandene Einträge, die manchmal auch manuell eingetragen werden, einfach überschreibt? Kann man nicht sicherstellen, dass er in die erste freie zeile einfügt? Da wo in der Spalte B nichts drin ist?
Danke vorab und Grüße!
PS: Ich habe nach den 3 Dingen gegooglet, und Stundenlang versucht das auf meine Tabelle zu übertragen, aber es kommen ständig Fehler, weil ich einfach gar keine Erfahrung mit VBA habe :(
Zu 1. Meldung, wie viele Zeilen übertragen wurden. Ich habe mein Makro angepasst. Im letzten Teil heisst es nun:
Code:
... Sheets("Start").Select zaehler = 0 For j = lzs To 1 Step -1 If Cells(j, 20).Value = "x" Then Rows(j).Delete Shift:=xlUp zaehler = zaehler + 1 End If Next j
Sheets("Start").Select Range("A1").Select Sheets("Ende").Select Range("A1").Select MsgBox "Uebertragen wurden " & zaehler & " Zeilen." End Sub
Zu 2. Button neue Zeile: Mit dynamischen Tabellen kenne ich mich überhaupt nicht aus. Da kann ich Dir nicht helfen.
Zu 3. In der Zieltabelle werden Einträge überschrieben. Wenn in meiner Version in jeder Zeile in Spalte B ein Wert steht, kann das kaum passieren. Das Makro von Werner ist ganz anders konzipiert. Aber ich kann es mir auch bei seiner Version nicht vorstellen, wie das geschehen könnte.
Grüsse Niclaus
Folgende(r) 1 Nutzer sagt Danke an Niclaus für diesen Beitrag:1 Nutzer sagt Danke an Niclaus für diesen Beitrag 28 • jet1988