Moin Ich arbeite gerade wieder an unsere Kontoverwaltung. Der derzeitige Workflow sieht wie folgt aus: CSV Datei mit den Buchungen von der Bank runterladen. Diese über ein Excel öffnen (Habe ein Makro geschrieben, welches die Einträge passend formatiert und in ein neues Tabellenblatt einfügt) In das Tabellenblatt "Buchungen" wechseln und schauen, was der letzte bestehende Eintrag ist. Zurück in das Tabellenblatt mit den importierten Daten, erste neue Zeile finden und von hier alle neuen Zeilen markieren, kopieren und in das Tabellenblatt an das Ende der bestehenden Tabelle einfügen. Für diesen Ablauf würde ich gerne ein weiteres Makro schreiben. Der Aufbau der Tabellen ist nicht gleich, die Tabelle "Buchungen" enthält vor und hinter den einzufügenden Spalten, weitere Spalten. Die Zeilen sind so eindeutig, wie Kontoauszüge halt so sind. Es gibt immer wieder sie selben Zahlungspflichtigen und Verwendungszwecke. Auch gibt es mehrere Buchungen an einem Tag. Ein Filter der die letzte bestehende Zeile mit den neuen Daten vergleicht muss also mehr als eine Zelle vergleichen. Und da hört mein Können auf und ich würde euch um einen Lösungsvorschlag mittels VBA bitten. Danke und Gruß Kolja
Also ich würde folgendermaßen vorgehen: * in der Buchungstabelle die letzte belegte Zeile finden ( sheet.usedrange.rows.count ) * die neue Tabelle zeilenweise von oben nach unten durchgehen und die notwendigen Spalten mit denen der letzen Zeile aus Buchungen vergleichen * wurde die passende Zeile gefunden, alle nachfolgenden nach Buchungen kopieren Sascha
Sascha W. schrieb: > die neue Tabelle zeilenweise von oben nach unten durchgehen und die > notwendigen Spalten mit denen der letzen Zeile aus Buchungen vergleichen Danke, aber genau dafür finde ich keine Lösung.
Kolja L. schrieb: > Sascha W. schrieb: >> die neue Tabelle zeilenweise von oben nach unten durchgehen und die >> notwendigen Spalten mit denen der letzen Zeile aus Buchungen vergleichen > > Danke, aber genau dafür finde ich keine Lösung. Ok mal so aus dem Kopf
1 | set sh_bu=sheets("buchungen") |
2 | set sh_im=sheets("import") |
3 | last_bu=sh_bu.usedrange.rows.count |
4 | r=2 |
5 | cp=0 |
6 | while sh_im.cells(r,1)<>"" |
7 | If c0=0 then |
8 | if sh_bu.cells(last_bu,1)=sh_im.cells(r,1) and sh_bu.cells(last_bu,2)=sh_im.cells(r,2) and ... then |
9 | cp=1 |
10 | Else |
11 | last_bu=last_bu+1 |
12 | For i=1 to n |
13 | sh_bu.cells(last_bu,n)=sh_im.cells(r,n) |
14 | Next |
15 | Endif |
16 | r=r+1 |
17 | wend |
Sascha
Danke für die Hilfe. Lief nicht auf Anhieb, jetzt aber schon. Beispiel lade ich morgen hoch..
Guten Morgen Wie versprochen hier ein funktionierendes kleines Beispiel:
1 | Sub Datei_Einlesen() |
2 | |
3 | ' Tabellenblätter zuordnen |
4 | Set Konto = Sheets("Konto") |
5 | Set einlesen = Sheets("Einlesen") |
6 | |
7 | ' letzte Zeile in der Tabelle Konto finden |
8 | last_Konto = Konto.UsedRange.Rows.Count |
9 | |
10 | ' Zeilenzähler definieren, beginnt in der 2. Zeile |
11 | r = 2 |
12 | ' Marker für "letzte Zeile gefunden" |
13 | cp = 0 |
14 | |
15 | ' Schleife läuft Zeile für Zeile in der Tabelle "Einlesen" bis in der ersten Spalte keine Werte mehr enthalten sind |
16 | While einlesen.Cells(r, 1) <> "" |
17 | |
18 | ' Prüft, ob die letzte Zeile aus "Konto" in den Zellen 1 - 4 identisch ist mit den Zeilen in "Einlesen" |
19 | ' Wenn das so ist -> letzte Zeile gefunden -> Marker = 1 |
20 | If cp = 0 Then |
21 | If Konto.Cells(last_Konto, 1) = einlesen.Cells(r, 1) _ |
22 | And Konto.Cells(last_Konto, 2) = einlesen.Cells(r, 2) _ |
23 | And Konto.Cells(last_Konto, 3) = einlesen.Cells(r, 3) _ |
24 | And Konto.Cells(last_Konto, 4) = einlesen.Cells(r, 4) Then |
25 | cp = 1 |
26 | End If |
27 | |
28 | ' Zeilennummer immer um 1 erhöhen |
29 | ' und die Spalten 1 - 4 von "Einlsen" in "Konto" schreiben |
30 | Else |
31 | last_Konto = last_Konto + 1 |
32 | For i = 1 To 4 |
33 | Konto.Cells(last_Konto, i) = einlesen.Cells(r, i) |
34 | Next |
35 | ' in der 5. Spalte in "Konto" die Markierung "neu" einfügen |
36 | Konto.Cells(last_Konto, 5) = "neu" |
37 | Konto.Cells(last_Konto, 5).Font.ColorIndex = 3 |
38 | End If |
39 | |
40 | ' Zeilenzähler um 1 erhöhen |
41 | r = r + 1 |
42 | |
43 | Wend |
44 | |
45 | End Sub |
Habe mal versucht viel zu erklären, ist aber ehr so laienhaft. Danke nochmal für die Hilfestellung! Gruß Kolja
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.