Anzeige
Archiv - Navigation
1868to1872
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

Match-NoMatch

Match-NoMatch
31.01.2022 06:30:54
Chris
Hallo Forum,
ich möchte per Makro alte Inhalte mit Hilfe der Spalte F (Kd.Nr) mit neuen Inhalten aus einem anderen Tabellenblatt vergleichen (hier auch Kd.Nr., Spalte F).
Wenn die Kundennummer im Sheet mit den neueren Informationen gefunden wird, sollen weitere Spalten der alten (.offset, resize) Informationen (Spalten G-K) in das Sheet neuerer Informationen kopiert werden und dort auch die Spalten G-K dergleichen Kd-Nr. überschrieben werden.
Alle Kunden, die nicht gefunden werden (no-match) sollen in ein neuen Sheet untereinander kopiert werden.
Ich habe eine Bsp-Mappe hochgeladen, hoffe diese hilft.
https://www.herber.de/bbs/user/150781.xlsx
Wie löst man dies per VBA?
Gruß
Chris

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Match-NoMatch
31.01.2022 10:52:32
Yal
Hallo Chris,
man kann alle mit VBA machen, es ist aber nicht alles sinnvoll, mit VBA zu tun, da andere Werkzeug effektiver, leichter, stabiler sind.
In dem Fall empfehle ich Power Query (PQ).
Markiere deine Datenbereiche in "Quelle-Neu", wandle in einer aktiven Tabelle (Strg+n), gehe auf dem Reiter "Tabellentools" und benenne diese Tabelle in "kdNeu".
dasselbe auf Quelle-Alt --> "kdAlt" (Namenunterscheidung hilft bei der Erklärung)
Gehe auf die Tabelle "kdNeu", dann Menü "Daten", "aus Tabelle". Jetzt bist Du in PQ-Editor.
Auf die linke Vertikale graue Spalte, wo "Abfragen" steht gehe auf dem ">", um das Ding zu öffnen.
Mit Rechtklick auf die Abfrage "kdNeu", wähle "Duplizieren".
Klicke den Duplikat an, gehe auf dem rechten Bereich und andere den Namen der Abfrage "kdNeu (2)" in "kdAlt"
Klicke darunter auf dem Schritt "Quelle" und ändere in der Formelfenster die Name der Quelle in "kdAlt" (Achtung: Case sensitiv)
Gehe auf Menü "Start", "Abfrage zusammenführen", "Abfragen als neue Abfrage zusammenführen",
Wählt für den unteren Bereich die andere Tabelle.
Markiere in den Beide Tabellenvorschau die Spalte "KdNr" und wähle den Join-Art. An der Stelle lasst ich Dir selber nachdenken, was Du sehen möchtest ;-)
Falls Du dich verzettelst, siehe der letzten Eintrag in den "angewandete Schritten" rechts das "Einstellung"-Rädchen. Drauf klicken und anpassen.
Name der neue Abfrage in "Ergebnis" ändern.
Auf der Überschrift der neue Spalte "kdNeu" (ode "kdAlt", falls ich mich vertan habe), auf die auseindergehende Pfeile klicken, gewünschte Spalten auswählen (hier auch kann nachträglich justiert werden).
Anschliessend die Spalte zuviel entfernen.
auf Menü "Datei", "Schliessen & laden in..." auswählen, "nur Verbindung erstellen" anklicken.
Auf dem rechten Abfrageliste, Abfrage "Ergebnis" rechtsklicken, "Laden in...", diesmal "Tabelle" auswählen (hätten es vorher direkt gemacht wären die 3 Abfragen als neue Tabell gekommen).
Fertig
Möchtest Du
die Neu, die auch alt waren,
die Alt, die nicht mehr im neu sind,
die neu, die nicht alt waren?
Es spielt sich alles in diesem "Join-Art". Auf die Abfrage "Ergebnis" rechtklicken, "Bearbeiten", Abfrage duplizieren, andere Join-Art auswählen, usw.
Viel Spass beim Spielen. Das gleich per VBA? Vergiss es.
Jede geladen Abfrage lässt sich mit rechtsklick "Aktualisieren".
Das Ergebnis sieht so aus (aber selber machen ist besser ;-):
https://www.herber.de/bbs/user/150785.xlsx
VG
Yal
Anzeige
AW: Match-NoMatch
31.01.2022 12:20:47
Chris
Hallo Yal,
ui! Query ist für mich was ganz Neues. Das muss ich mir in Zeitlupe anschauen. Melde mich, in jedem Fall danke für die sehr ausführlich Erklärung!!
Gruß
Chris
AW: Match-NoMatch
31.01.2022 11:20:25
UweD
Hallo
deine Angaben widersprechen sich.
Einmal soll (wenn gefunden) G-K kopiert werden. In der Datei steht, die ganze Zeile A-K
Ich hab es mal so gemacht

Sub Abgleich()
Dim TbA As Worksheet, TbN As Worksheet, TbG As Worksheet
Dim LrA As Long, LrG As Long, i As Long, Zeile As Long, SP As Integer
Set TbA = Sheets("Quelle-Alt")
Set TbN = Sheets("Quelle-Neu")
Set TbG = Sheets("Ganz Neu")
SP = 6 'Spalte F
'reset, Löschen ab Zeile 2
TbG.UsedRange.Offset(1).Delete
LrA = TbA.Cells(TbA.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
For i = 2 To LrA
Zeile = WorksheetFunction.CountIf(TbN.Columns(SP), TbA.Cells(i, SP))
If Zeile > 0 Then
Zeile = WorksheetFunction.Match(TbA.Cells(i, SP), TbN.Columns(SP), 0)
TbA.Cells(i, SP).Offset(0, 1).Resize(1, 5).Copy _
TbN.Cells(Zeile, SP).Offset(0, 1).Resize(1, 5)
Else
LrG = TbG.Cells(TbG.Rows.Count, SP).End(xlUp).Row + 1
TbA.Rows(i).Copy TbG.Rows(LrG)
End If
Next
End Sub
LG UweD
Anzeige
AW: Match-NoMatch
31.01.2022 12:19:50
Chris
Hallo UweD,
danke für die Hilfe. Ich schaffe erst morgen zu schauen...
Melde mich.
Gruß
Chris
AW: Match-NoMatch
01.02.2022 09:45:52
Chris
Hallo UweD,
danke für das Makro.
...usedrange.offset(1) liefert einen Fehler, habe offset gelöscht. Jetzt läuft es und es ist das, was ich benötigt.
Frage:

Zeile = WorksheetFunction.CountIf(TbN.Columns(SP), TbA.Cells(i, SP))
If Zeile > 0 Then
Zeile = WorksheetFunction.Match(TbA.Cells(i, SP), TbN.Columns(SP), 0)
bedeutet: Überprüfe zuerst jeden Wert in Spalte 6 (Sheet Neu) mit denen in Spalte 6 (Sheet Alt), wenn dieser existiert, dann Match?
Würde hier nicht die 1 von ...CountIf reichen?
Habe es ohne Match probiert...geht dann nicht.
In jedem Fall Danke!
Chris
Anzeige
AW: Match-NoMatch
01.02.2022 10:43:35
Yal
Hallo Chris,

Zeile = WorksheetFunction.CountIf(TbN.Columns(SP), TbA.Cells(i, SP))
entspricht die Excelformel ZÄHLENWENN(), also wie oft ist die Werte TbA.Cells(i,SP) in der Spalte TbN.Columns(SP)
Wenn mehr als null, dann wird der Match auf alle Fälle etwas liefern. Wir wissen aber nicht wo, daher ist der Match weiterhin notwendig.
VG
Yal
AW: Match-NoMatch
01.02.2022 16:35:29
UweD
Hallo
&GT&GT ...usedrange.offset(1) liefert einen Fehler, habe offset gelöscht. Jetzt läuft es und es ist das, was ich benötigt.
wie heißt der Fehler?
Die Zeile soll den benutzen Bereich, verschoben um eine Zeile nach unten, löschen. Die Überschriften sollen also stehen bleiben.
Läuft bei mir problemlos.
Den Rest hat Yal ja schon erklärt.
LG UweD
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige