Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1968to1972
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

VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä

VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
22.03.2024 17:07:50
Georgi
Hallo Forum, ich stehe auf dem Schlauch und bekomme folgendes nicht gelöst:
Ich möchte mit einer for / next -Schleife jeden Wert der Spalte S von Datei1, in der Datei2 Spalte S prüfen, ob der Wert vorhanden ist.
Wenn der Wert nicht vorhanden ist, soll die ganze Zeile der Tabelle in Datei1, in der sich der Wert der Spalte S befindet, an das Ende der Tabelle in Datei2 angehängt werden.

Wenn der Wert in der Datei2 schon vorhanden ist, muss überprüft werden, ob sich in der Zelle rechts daneben, also in Spalte T der Datei2, schon ein Wert vorhanden ist. Wenn nicht, müssen die Werte der Spalten T bis V der jeweiligen Zeile, von der Datei1 in die Datei2 übertragen werden und zwar natürlich in die entsprechende Zeile, wo sich der Wert der Spalte S befindet.

Ich hoffe, das ist jetzt nicht zu kompliziert erklärt und jemand kann mir helfen.

Viele Grüße
Georgi
AW: VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
22.03.2024 17:28:29
Georgi
Nachtrag: um es etwas zu vereinfachen, es muss keine Lösung Dateiübergreifend sein, es kann auch in Tabelle1 und Tabelle2 stattfinden.
AW: VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
22.03.2024 17:40:32
Yal
Hallo Georgi,

das Problem lässt sich am besten mit Power Query lösen. Idealerweise postest Du 2 -anonymisierte- Dateien, dann kann man basteln.

Werfe einen Auge auf diese Anleitungseite, inkl. Videos. Dann bekommst Du eine Idee, was möglich ist: https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/

Mit einer Tabelle (Menü "Einfügen", "Tabelle") auf deine Daten in Datei2 kannst Du
die Einträge, bei dem Spalte T leer ist isolieren ("Dat2_Tleer"),
prüfen ggü Datei1 ("Datei1"), ergibt "Dat2_ergänzt".
dann zu den Einträge, bei dem T nicht leer sind ("Dat2_Tvoll"), hinzufügen.
Diese neue Zusammenfassung ("Zusam1") ggü Datei1 stellen, um die Einträge von Datei1 zu isolieren, die nicht in Datei2 sind ("Dat1_neu"),
und diese Menge zu "Zusam1" hinzufügen ("Zusam2") um das Ergebnis zu bilden.

Userbild
(Gestaltet mit https://Arrows.app )

Alles klar? :-)

VG
Yal


Anzeige
AW: VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
22.03.2024 19:42:44
Georgi
Hallo Yal,

wow, das Power-Query ist viel zu wuchtig für meine 2 kleinen Excel-Tabellen :-)
Trotzdem Danke für die Info, denn es ist schon interessant, was alles so geht.

Viele Grüße
Georg
AW: VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
22.03.2024 17:37:13
ralf_b
Dein Anliegen ist gefühlt das Zweithäufigste was nachgefragt wird. Kaum zu glauben das man mit einer "Excel gut"- Einschätzung, dann nicht mal bissle das Internet durchwühlt oder nur hier im Archiv oder ne Ki befragst. Denn deine Frage wurde schon x-mal beantwortet. Wie wärs wenn du entsprechende Infos zusammenträgst und falls du wider Erwarten keine funktionierende Lösung gefunden oder angepasst hast, schauen wir gemeinsam über deine Versuche und lösen den Knoten.
Anzeige
AW: VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
22.03.2024 17:58:40
Piet
Hallo Georg

da stellt sich mir eine wichtige Frage: - sind die Zeilen in Tabelle1 + 2 genau gleich identisch??
Wenn du schreibst, das ein Wert NICHT vorkommen kann, wird es auch Zeilenversatz geben. Oder??
Sind die Werte in Spalte S Unikate, die nur einmal vorkommen, oder kommen sie mehrfach vor??

Ich denke mit einer For Next Schleife und 1:1 Zeilenvergleich wird das nicht hinhauen!
Ich schicke dir mal ein Makro mit For Next und Find Such-Methode. Das wird eher klappen.

mfg Piet

Option Explicit

Dim AC As Range, lz1 As Long
Dim rFind As Range, lz2 As Long


'Vergleich über Find Methode

Sub Spalte_S_vergleichen()
Dim Tb2 As Worksheet, Txt, n, m
Set Tb2 = Worksheets("Tabelle2")
lz2 = Tb2.Cells(Rows.Count, "S").End(xlUp).Row + 1

With Worksheets("Tabelle1") 'Spalte S=19
lz1 = .Cells(Rows.Count, "S").End(xlUp).Row
For Each AC In .Range("S2:S" & lz1)
Set rFind = Tb2.Columns("S").Find(What:=AC, After:=Tb2.Range("S1"), LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not rFind Is Nothing Then
If rFind.Offset(0, 1) = Empty Then
AC.Offset(0, 1).Resize(1, 3).Copy
rFind.Offset(0, 1).PasteSpecial xlPasteValues
n = n + 1 'Zeilen T-V ausgefüllt
End If
ElseIf rFind Is Nothing Then
.Rows(AC.Row).Copy
Tb2.Rows(lz2).PasteSpecial xlPasteValues
lz2 = lz2 + 1: m = m + 1 'Zeilen angehangen
End If
Next AC
Application.CutCopyMode = False

If n > 0 Then Txt = n & " Zeilen T-V ausgefüllt" & vbLf
If m > 0 Then Txt = Txt & m & " Zeilen inten angehangen"
MsgBox Txt
End With
End Sub
Anzeige
AW: VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
22.03.2024 18:45:42
Yal
Hallo zusammen,

inspiriert von der guten Vorarbeitet von Piet, hier eine -sehr ähnliche- Lösung über 2 Dictionary

Sub Spalte_S_vergleichen()

Dim ws As Worksheet
Dim Z As Range 'Z wie Zelle
Dim Dat2_Tvoll
Dim Dat2_Tleer
Dim Cnt(2) As Long

Set Dat2_Tleer = CreateObject("Scripting.Dictionary") 'Besser wäre: "Extras", "Verweise..", Haken bei "Microsoft Scripting Runtime"
Set Dat2_Tvoll = CreateObject("Scripting.Dictionary")

'Populating the dictionaries
Set ws = Worksheets("Tabelle2")
For Each Z In Range(ws.Range("S2"), ws.Cells(Rows.Count, "S").End(xlUp))
If Z.Offset(0, 1).Value = "" Then
Dat2_Tleer(Z.Value) = Z.Row
Else
Dat2_Tvoll(Z.Value) = Z.Row
End If
Next
'Checking Tabelle1
With Worksheets("Tabelle1")
For Each Z In Range(.Range("S2"), .Cells(Rows.Count, "S").End(xlUp))
If Dat2_Tleer.exists(Z.Value) Then
ws.Cells(Dat2_Tleer(Z.Value), "S").Resize(1, 4).Value = Z.Resize(1, 4).Value 'Werte übertragen. S,T,U,V: 4 Spalten
Cnt(0) = Cnt(0) + 1
ElseIf Not Dat2_Tvoll.exists(Z.Value) Then
ws.Cells(Rows.Count, "S").End(xlUp).Range("A2:D2").Value = Z.Resize(1, 4).Value 'A2:D2 ist relativ zu der letztbefüllten Zelle in S
Cnt(1) = Cnt(1) + 1
Else
Cnt(2) = Cnt(2) + 1
End If
Next
End With
'Statistics
MsgBox Cnt(0) & " Zeilen ergänzt," & vbLf _
& Cnt(1) & " Zeilen hinzugefügt," & vbLf _
& Cnt(2) & " Zeilen bereits vorhanden."
Set Dat2_Tleer = Nothing
Set Dat2_Tvoll = Nothing
End Sub


VG
Yal
Anzeige
AW: VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
22.03.2024 19:46:57
Georgi
Hallo Yal nochmal,

ja das sieht dem von Piets Lösungsvorschlag sehr ähnlich, habe da auch (noch) die gleichen Verständnisprobleme :-)

Vielen Dank und erneute Grüsse
Georg
AW: VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
28.03.2024 16:19:32
Georgi
Hallo Yal,

die Version von Piet funktioniert bei mir, bei Deiner bekomme ich einen Laufzeitfehler, den ich nicht beseitigen konnte.
Trotzdem vielen Dank für Deine Hilfe.

Viele Grüße
Georgi
AW: VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
23.03.2024 17:33:43
Piet
Hallo

ich hatte genau die richtige Nase mit der Kombination For Next und Find Methode.
Alternativ kann man auch zwei verschachtelte For Next Schleifen für Tabelle 1+2 nehmen.

Unter Zeilenversatz verstehe ich, das der Indexwert von Tabelle1 nicht immer in der gleichen Zeile bei Tabelle2 steht!
Sonst könnte man mit nur einer For Next Schleife die Zeilen 1:1 vergleichen. Das ist hier aber nicht möglich!

Die andere Bedinung wird von meinem Makro auch erfüllt. Es wird nur kopiert, wenn die Spalte T leer ist.
Oder wenn es den Indexwert nicht gibt wird er in Tabelle2 unten angehangen.
Ob der Code von Yal besser ist kann ich nicht sagen. Keine Datei zum testen!

mfg Piet

Anzeige
AW: VBA: Suche Wert in Datei1,prüfe ob Wert in Datei2,Zeile anhä
22.03.2024 19:33:17
Georgi
Hallo Piet,

vielen Dank für Deinen Lösungsvorschlag!
Da brauche ich einige Zeit um alles zu verstehen / nachvollziehen zu können.

Zu Deinen Fragen:
1. Nein, ausser den Spalten-Überschriften sind die Tabellen nicht gleich. Daher wollte ich auch fehlende Zeilen unten anhängen.
Die einzelnen Werte in Spalte S, sind die jeweiligen Indikatoren, ob es diese Zeile in der Datei 2 schon gibt.
2. Einen Zeilenversatz wollte ich damit aus dem Weg gehen, in dem ich die fehlende Zeile "einfach" unten anhänge.
3. Ja, die Werte in Spalte S sind und dürfen nur Unikate sein.
Wenn es den Indikatorwert der Spalte S in Tabelle2 gibt, muss nur in Spalte T der Tabelle2 geschaut werden, ob da schon ein Wert eingetragen ist. Wenn das der Fall ist, ist keine weitere Aktion in dieser Zeile nötig (ansonsten halt von T bis V aus Tabelle1 kopieren).

Daher war mein Gedanke mit einer for / next- Schleife die Werte der Spalte S in Tabelle1 zu durchlaufen und zu schauen, ob es in Tabelle2 den Wert (auch Spalte S) schon gibt, um dann in Spalte T zu schauen, ob da was eingetragen ist. Dazu müsste vorher die Zeile in Tabelle2 ermittelt werden, wo der Wert (Suchbegriff) in Spalte S steht, damit man da was in die Spalten T bis V kopieren kann.
Das entspricht dem, was Du als "For Next und Find Such-Methode" betitelst :-)

Ich werde mich mit Deinem Lösungsvorschlag weiter beschäftigen, weiss aber noch nicht, ob ich das umgesetzt bekomme (s.o.).
Daher lasse ich die Frage noch offen und schliesse sie dann, wenn ich es hinbekommen habe.

Viele Grüsse
Georg


Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige