Forum: PC-Programmierung Excel VBA: Tabellen vergleichen Daten ergänzen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Kolja L. (kolja82)


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

von Sascha W. (sascha-w)


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

von Kolja L. (kolja82)


Lesenswert?

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.

von Sascha W. (sascha-w)


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

von Kolja L. (kolja82)


Lesenswert?

Danke für die Hilfe.
Lief nicht auf Anhieb,  jetzt aber schon.
Beispiel lade ich morgen hoch..

von Kolja L. (kolja82)


Angehängte Dateien:

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

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.