Excel VBA: Tabellen vergleichen Daten ergänzen

OP #5958462
Lesenswert?

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
#5958563
Lesenswert?

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
#5958864
Lesenswert?

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
OP #5959505
Lesenswert?

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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren