Zwei Tabellen miteinander verknüpfen und nach Datum sortiere (VBA)

Tobi @, Montag, 14.01.2019, 21:41 (vor 68 Tagen)

Nabend Leute,

ich brauche dringend eure Hilfe.

Ich habe ein Tabellenblatt "Einzahlungen" bestehend aus den Spalten A-H und ein Tabellenblatt namens "Auszahlungen" mit den Spalten A-G.
Nun soll ein daraus neues Tabellenblatt entstehen. Aus den Einzahlungen soll dabei Spalte A, B und H übernommen werden und in das neue Tabellenblatt als A, B, C übernommen werden. Bei den Auszahlungen sollen A, B und F in Spalte A, B, C übernommen werden.

Hier eine Übersicht über den Inhalt der Tabellenblätter:
Einzahlungen: A= Betreff, B= Datum, H= Betrag
Auszahlungen: A= Betreff, B= Datum, F= Betrag.

Nachdem die beiden Tabellen zusammengefügt wurden, sollen diese nach Datum (von alt nach neu) sortiert werden.

VG Tobi

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Martin Asal @, Dienstag, 15.01.2019, 08:28 (vor 67 Tagen) @ Tobi

Hallo Tobi,

schau dir mal die Funktion "Erledigt" auf der Seite zu Excel hier im Tutorial an. Im Prinzip musst du nur zwei derartige Schleifen hintereinander laufen lassen, um entsprechend zu kopieren. Das anschließende Sortieren machst du mit dem Sort-Objekt, ca so:

With ActiveWorkbook.Worksheets(3).sort


Weitere Infos zu Sort bekommst du mit der F1-Hilfe.

Martin

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Toni, Dienstag, 15.01.2019, 09:47 (vor 67 Tagen) @ Martin Asal

Hi Martin,

also mit diesem Code, kann ich den kompletten Inhalt der beiden Tabellenblätter zusammenführen.

Sub nue()
Dim i As Integer
With ActiveWorkbook
'neue Tabelle an die erste Position einfügen
.Worksheets.Add Before:=.Worksheets(1)
For i = 2 To .Worksheets.Count
'Ermitteln den benutzen Bereich der einzelnen Tabellenblätter
Set Rng = .Worksheets(i).UsedRange
'letzte Zeile ermitteln des ersten Blattes
Set rng1 = Worksheets(1).Cells(Rows.Count, "A").End(xlUp)(1)
'Bereich kopieren
Rng.Copy Destination:=rng1
Next
End With
End Sub

Brauche aber wie oben in meiner Problemstellung aus Tabellenblatt 1= A, B, H und aus Tabellenblatt 2= A,B,F.
In Tabellenblatt 3 soll dann in A= A und A, in B= B und B und in C= H und F rein.

Weiter reichen meine VBA Skills derzeit nicht :D

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Martin Asal @, Dienstag, 15.01.2019, 12:43 (vor 67 Tagen) @ Toni

Hallo Toni,

das Tutorial ist ja dafür da, dass man was lernt, und außerdem bin ich schreibfaul ;-) Deswegen hier eine unvollständige Lösung, das Kopieren des zweiten Sheets musst du noch einfügen. Dazu musst du nur den Abschnitt "Erstes Sheet kopieren" verdoppeln und für das zweite Sheet anpassen. Sollte auch für einen Anfänger einfach sein.

Sub nue()
Dim QuellZelle As Range, ZielZelle As Range
 
With ActiveWorkbook
    'neue Tabelle an die erste Position einfügen
    .Worksheets.Add Before:=.Worksheets(1)
 
    Set ZielZelle = .Worksheets(1).Range("A2")
End With
 
'Erstes Sheet kopieren
Set QuellZelle = ActiveWorkbook.Worksheets("Einzahlungen").Range("A2") 'Die erste Zeile(!) mit einem Wert
Do Until IsEmpty(QuellZelle.Value)
    'eine Zeile Kopieren
    ZielZelle = QuellZelle                              'Spalte A
    ZielZelle.Offset(0, 1) = QuellZelle.Offset(0, 1)    'Spalte B
    ZielZelle.Offset(0, 2) = QuellZelle.Offset(0, 7)    'Spalte H

    'nächste Zeile
    Set QuellZelle = QuellZelle.Offset(1)
    Set ZielZelle = ZielZelle.Offset(1)
Loop
 
'Sortieren
With ActiveWorkbook.Worksheets(1)
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Range("A:A")       'Sortiere nach Spalte A
    .Sort.SetRange .UsedRange               'und zwar alles

    .Sort.Apply
End With
 
End Sub

Martin

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Tobi, Dienstag, 15.01.2019, 14:06 (vor 67 Tagen) @ Martin Asal

Danke für die Hilfe Martin :like:
Habs hinbekommen :-)

Hab nun noch ein weiteres Problem, vielleicht kannst du mir da auch Hilfestellung geben.

Zu Beginn des Makros benötige ich ein PopUp, welches nach dem Zeitraum (von Datum - bis Datum) fragt.
Diese Angabe soll dann alle Inhalte, welche nicht im Zeitraum sind entfernen. Es ist wichtig, dass der Zeitraum sich auf das Tabellenblatt "Einzahlungen" und "Auszahlungen" bezieht, bevor diese zusammengeführt werden.

Sorry, ich verlange viel ich weiss :-|

VG Tobi

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Martin Asal @, Dienstag, 15.01.2019, 14:31 (vor 67 Tagen) @ Tobi

Wenn es ohne Netz und doppelten Boden sein darf, ist das eigentlich sogar ganz einfach mit Inputbox umsetzbar. Problematisch ist daran nur, dass ein User dabei Werte eingeben kann, die keinem Datum entsprechen. Um dieses Risiko auszuschließen, könntest du auch ein Formular erstellen. Wäre natürlich mehr Aufwand.

Mit InputBox geht das ca wie folgt:

Dim Termin As Date
Termin = InputBox("Zeitpunkt ab")

... und dann beim Kopieren:

If QuellZelle > Termin Then 'oder mit Offset, je nach Datumsspalte
        'eine Zeile Kopieren
 ...
End If

Martin

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Tobi, Dienstag, 15.01.2019, 21:59 (vor 67 Tagen) @ Martin Asal

Nabend,

also ein Formular mit Eingabefeldern für von und bis Datum habe ich erstellt.
Wie es aber weiter gehen soll bleibt mir ein Rätsel :D

Ich muss irgendwie eine Verknüpfung schaffen, dass die Eingabewerte in einen Algorithmus fließen.

Datum von: x
Datum bis: y

Lösche alle Zeilen, wenn Wert aus Spalte A < x und A > y.

Als Schleife:

Dim = i
for i = 1 to 10
If Cells(i,1) < x And If Cells(i,1) > y
Then (lösche die ganze Zeile)

Ist die Denkweise richtig?
Bitte um mehr Tipps ;-)

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Martin Asal @, Mittwoch, 16.01.2019, 10:27 (vor 66 Tagen) @ Tobi

Then (lösche die ganze Zeile)

Ist die Denkweise richtig?

Warum willst du erst etwas kopieren und dann wieder löschen? Statt dessen solltest du beim Kopieren prüfen, ob es überhaupt kopiert werden soll.

Schau dir mein letztes Posting nochmal an, da ist ein Kommentar im Code enthalten, den ich zuvor schon mal in einem Code hatte. Das sollte dir zeigen, wo die Bedingung idealerweise hingehört.

Martin

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Tobi, Freitag, 18.01.2019, 10:32 (vor 64 Tagen) @ Martin Asal

Moin moin,

indem Fall möchte ich gerne die beiden Tabellenblätter separat löschen, da diese im Anschluss bearbeitet werden. Erst wenn die Bearbeitung beendet ist, werden diese zusammengefügt.

Hab das ganze mal so versucht:

Sub Datum_eingrenzen()
Dim x&
Dim y As Date
y = "20.10.2017"
For x = 500 To 1 Step -1
If Cells(x, 1) > y Then
Rows(x).Delete Shift:=xlUp
End If
Next
End Sub

Ich kriege es einfach nicht hin :(

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Martin Asal @, Freitag, 18.01.2019, 12:07 (vor 64 Tagen) @ Tobi

Du solltest dir wirklich mal die kurze Einführung zu Excel im Tutorial durchlesen. Dann müsste dir auffallen, daß man mit deinem Code gar nicht erkennen kann, um welches Workbook bzw welches Sheet es gehen soll.

Es genügt nicht, einfach irgendwelchen altertümlichen Code aus dem Netz zu kopieren in der Hoffnung, dass er funktioniert.

Martin

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Tobi, Samstag, 19.01.2019, 17:18 (vor 63 Tagen) @ Martin Asal

Sorry, aber das hilft mir nicht weiter :-|

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Tobi, Samstag, 19.01.2019, 17:23 (vor 63 Tagen) @ Tobi

Habs nun mitm VBA Filter gemacht. Aber die andere Lösung, würde mir besser gefallen :D

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Tobi, Dienstag, 22.01.2019, 16:55 (vor 60 Tagen) @ Martin Asal

Hi Martin,

ich erhalte eine Fehlermeldung, sobald eines der beiden Sheets keinen Inhalt hat.
Ich möchte allerdings dennoch gerne, dann entweder Sheet1 oder Sheet2 in ein neues kopiert bekommen. Kannst du mir das einen Tipp geben?

Übrigens habe ich das Filtern des Datums ohne Filtern im Makro hinbekommen. Vielen Dank für den Ansporn :)

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Martin Asal @, Dienstag, 22.01.2019, 19:49 (vor 60 Tagen) @ Tobi

Aufgrund von

Do Until IsEmpty(QuellZelle.Value)

sollte es eigentlich keinen Fehler geben, wenn da nichts ist, denn dann sollte die Schleife gleich übersprungen werden. Jedenfalls gebe ich dir als Lesetipp On Error Goto.

Martin

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Tobi, Mittwoch, 23.01.2019, 10:19 (vor 59 Tagen) @ Martin Asal

Hi Martin,

du hast Recht, wenn nichts in einem Sheet steht übernimmt der nicht den Wert.

Das Problem taucht nur auf wenn ich nach Datum eingrenze. Ich habe in Sheet1 Datumswerte vom 01.01.2019 - 31.01.2019. In Sheet2 Datumswerte von 05.02.2019 - 20.02.2019. Ich möchte nur die Werte im Zeitraum 01.01.2019 - 15.01.2019 sehen, also löscht mein Makro alle anderen Werte. Sheet2 ist somit leer. Wenn ich dann die beiden Sheets zusammenführen möchte erhalte ich die Fehlermeldung "Laufzeitfehler 13 - Typen unverträglich"

VG Tobi

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Martin Asal @, Mittwoch, 23.01.2019, 16:02 (vor 59 Tagen) @ Tobi

Das Problem taucht nur auf wenn ich nach Datum eingrenze.

Möglicherweise filterst du die Startzeile weg. Dann fang doch 1 Zeile vorher an und gehe 1 runter. Auf jeden Fall kannst du das Problem mit On Error zumindest so ignorieren, dass es dir egal sein kann, z. B. On Error Resume Next.

Martin

Zwei Tabellen miteinander verknüpfen und nach Datum sortiere

Tobi, Donnerstag, 24.01.2019, 14:17 (vor 58 Tagen) @ Martin Asal

Klappt, danke!

RSS-Feed dieser Diskussion
powered by my little forum