Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1168to1172
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellen vergleichen

Tabellen vergleichen
Maik
Hallo liebe Excelfreunde,
ich habe folgendes Problem mit 2 Tabellen
Tabelle 2009
AA 1,25 €
BB 2,59 €
CC 15,00 €
DD 5,00 €
EE 59,00 €
FF 0,25 €
Tabelle 2010
BB 3,56 €
XX 259,00 €
EE 58,00 €
II 0,27 €
TT 5,60 €
AA 1,28 €
Gab es den Name 2009 bereits soll er nur die Preise ersetzen. Existierte der Name 2009 noch nicht soll er ihn einfach unten hinzufügen samt Preis.
Ergibt dann: (wobei die Sortierung irrelevant ist)
Tabelle 2009
AA 1,28 €
BB 3,56 €
CC 15,00 €
DD 5,00 €
EE 58,00 €
FF 0,25 €
II 0,27 €
TT 5,60 €
XX 259,00 €
Mein derzeitiger Code:
For Zeile = 0 To Zeilenanzahl
lRowT = lRowT + 1
'vergleiche ob die Werte in Spalte A in der anderen Tabelle vorhanden sind
If Sheets("2010").Cells(lRowT, 1) = Sheets("2009").Range("A1").Value And _
Sheets("2010").Cells(lRowT, 2) = Sheets("2009").Range("B1").Value Then
End If
Next
Vielen Dank für die Hilfe

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Preise Vorjahr aktualisieren per VBA
27.07.2010 15:49:04
NoNet
Hallo Maik,
die Tabellen kannst du mit folgendem Makro updaten :
Sub PreiseUpdaten()
Dim wsAktuell As Worksheet, wsVorjahr As Worksheet
Dim lngZ As Long, lngZ2 As Long
Set wsAktuell = Sheets("2010") 'Name des Blattes mit AKTUELLEN Preisen
Set wsVorjahr = Sheets("2009") 'Name des Blattes in das hinein kopiert wird
'Alle Zeilen ab Zeile 2, da Zeile 1 Überschrift ist
For lngZ = 2 To wsAktuell.Cells(Rows.Count, 1).End(xlUp).Row
lngZ2 = wsVorjahr.Cells(Rows.Count, 1).End(xlUp).Row
If Application.CountIf(wsVorjahr.Columns(1), wsAktuell.Cells(lngZ, 1)) > 0 Then
lngZ2 = wsVorjahr.Columns(1).Find(wsAktuell.Cells(lngZ, 1), lookat:=xlWhole).Row
wsVorjahr.Cells(lngZ2, 2) = wsAktuell.Cells(lngZ, 2) 'Preis ersetzen
Else
wsAktuell.Rows(lngZ).Copy wsVorjahr.Cells(lngZ2 + 1, 1) 'Zeile unten anfügen
End If
Next
End Sub
Das Makro geht davon aus, dass jeweils in Zeile 1 eine Überschrift steht und ab Zeile 2 die Artikeldaten/Preise.
Relevant ist die Artikelbezeichnung in Spalte A !!
Gruß, NoNet
Anzeige
AW: Preise Vorjahr aktualisieren per VBA
28.07.2010 07:39:49
Maik
Danke NoNet,
damit funktioniert es wunderbar.
Verstanden habe ich nur nicht was Application.CountIf(....) größer 0 zu bedeuten hat.
Warum größer 0? Bzw. was besagt Application.CountIf ?
lookat:=xlWhole).Row = ist das der Vergleich?
Vielen Dank für die Hilfe
Gruß Maik
AW: Preise Vorjahr aktualisieren per VBA
28.07.2010 11:00:06
Maik
... jetzt hab ich noch eine Frage.
es kommt vor das sich in der Tabelle 2009 ein Artikel mehrmals befindet. Somit muß der Preis auch mehrmal angepaßt werden. Die Frage stellt sich nur wie?
Tabelle 2009
AA 1,25 €
BB 2,59 €
CC 15,00 €
DD 5,00 €
AA 1,25€
EE 59,00 €
FF 0,25 €
AA 1,25€
Tabelle 2010
BB 3,56 €
XX 259,00 €
EE 58,00 €
II 0,27 €
TT 5,60 €
AA 1,28 €
Ergibt dann:
Tabelle 2009
AA 1,28 €
BB 3,56 €
CC 15,00 €
DD 5,00 €
AA 1,28€
EE 58,00 €
FF 0,25 €
II 0,27 €
TT 5,60 €
XX 259,00 €
AA 1,28 €
Dank für eure Hilfe.
Gruß Maik
Anzeige
Antworten auf Deine Fragen und Code-Update
28.07.2010 12:42:46
NoNet
Hallo Maik,
schön, dass das Makro wunschgemäß funktioniert :-) - das war auch beabsichtigt ;-))
Zu Deinen Fragen :
1.) Application.CountIf(...) entspricht der Tabellenblatt-Funktion ZÄHLENWENN(...) und prüft, ob der Artikel aus dem AKTUELLEN Jahr (2010) im VORJAHR (2009) bereits in der Liste enthalten war. falls ja, wird der Preis aktualisiert, falls nicht, wird die Zeile im Vorjahr unten angehängt.
2.) Mit wsVorjahr.Columns(1).Find(..., lookat:=xlWhole).Row wird die entsprechende Zeilennr. ermittelt, aus der der Preis übertragen werden soll. Der Zusatz lookAt:=xlWhole bewirkt, dass der komplette Zellinhalt verglichen wird und verhindert, dass z.B. bei Artikelnr. 0815 in der anderen Liste 0815xy als "passend" gefunden wird, da dieser ja auch mit 0815 beginnt. Es muss also immer der GESAMTE (engl.: Whole) Inhalt übereinstimmen !
3.) Bei mehrfach vorkommenden Inhalten im Vorjahr funktioniert das Makro so nicht, hier muss man zusätzlich noch genau anders herum suchen : Alle Artikel aus 2009 müssen mit 2010 verglichen werden. hier der ergänzte Code :
Sub PreiseUpdaten()
Dim wsAktuell As Worksheet, wsVorjahr As Worksheet
Dim lngZ As Long, lngZ2 As Long
Set wsAktuell = Sheets("2010") 'Name des Blattes mit AKTUELLEN Preisen
Set wsVorjahr = Sheets("2009") 'Name des Blattes in das hinein kopiert wird
'Alle Zeilen ab Zeile 2, da Zeile 1 Überschrift ist
For lngZ = 2 To wsAktuell.Cells(Rows.Count, 1).End(xlUp).Row
lngZ2 = wsVorjahr.Cells(Rows.Count, 1).End(xlUp).Row
'Prüfen, ob Artikel aus AKTUELLEM Jahr bereits in Vorjahresliste enthalten war :
If Application.CountIf(wsVorjahr.Columns(1), wsAktuell.Cells(lngZ, 1)) > 0 Then
lngZ2 = wsVorjahr.Columns(1).Find(wsAktuell.Cells(lngZ, 1), lookat:=xlWhole).Row
'Falls Artikel bereits im Vorjahr enthalten war :
wsVorjahr.Cells(lngZ2, 2) = wsAktuell.Cells(lngZ, 2) 'Preis ersetzen
Else
'Falls Artikel im Vorjahr noch NICHT enthalten war :
wsAktuell.Rows(lngZ).Copy wsVorjahr.Cells(lngZ2 + 1, 1) 'Zeile unten anfügen
End If
Next
'Ergänzung : Suche alle Artikel aus 2009 in 2010,
'um mehrfach enthaltene Artikel zu aktualisieren
'Alle Zeilen ab Zeile 2, da Zeile 1 Überschrift ist
For lngZ = 2 To wsVorjahr.Cells(Rows.Count, 1).End(xlUp).Row
lngZ2 = wsAktuell.Cells(Rows.Count, 1).End(xlUp).Row
'Alle Artikel aus Vorjahresliste in AKTUELLER Liste suchen :
If Application.CountIf(wsAktuell.Columns(1), wsVorjahr.Cells(lngZ, 1)) > 0 Then
lngZ2 = wsAktuell.Columns(1).Find(wsVorjahr.Cells(lngZ, 1), lookat:=xlWhole).Row
'Falls Artikel bereits im Vorjahr enthalten war :
wsVorjahr.Cells(lngZ, 2) = wsAktuell.Cells(lngZ2, 2) 'Preis ersetzen
End If
Next
End Sub
Gruß, NoNet
Anzeige
Danke
28.07.2010 15:06:45
Maik
Ich staune immer wieder was ihr hier so drauf habt. Echt riesen Komplement an euch.
Danke NoNet

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige