Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Daten von Tabelle zu Tabelle per "Button" übertragen
#1
Hallo zusammen,

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.


Angehängte Dateien
.xlsx   Testdokument1.xlsx (Größe: 20,72 KB / Downloads: 12)
Antworten Top
#2
Hallo

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.

Grüsse Niclaus

.xlsm   Testdokument1_V1.xlsm (Größe: 24,64 KB / Downloads: 7)
[-] Folgende(r) 1 Nutzer sagt Danke an Niclaus für diesen Beitrag:
  • jet1988
Antworten Top
#3
Hallo,

würde ich über den Autofilter machen.
Code:
Sub Kopieren()
Dim loLetzte As Long

Application.ScreenUpdating = False

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:
  • jet1988
Antworten Top
#4
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!
Antworten Top
#5
(26.07.2021, 07: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?
Antworten Top
#6
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 :(
Antworten Top
#7
Hallo

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:
  • jet1988
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste