VBA Vergleich zweier Spalten
Hallo,
ich bräuchte einen VBA Code, der zwei Spalten unterschiedlicher Länge vergleicht, und zwar folgender Struktur (siehe Bild unten):
Spalten A und E sollen verglichen werden, und zwar
innerhalb verschiedener Einkäufe sollen Produkte verglichen werden (gleiche Produkte können vorkommen):
- in der Spalte B soll der Wert aus Spalte F geschrieben werden, falls vorhanden
- falls nicht vorhanden dann "nicht vorhanden" reinschreiben
- in der Spalte G soll "nicht vorhanden" geschrieben werden, falls das Produkt oder der Einkauf in der Spalte A nicht vorhanden ist.
Kann mir jemand helfen?
LG anfaenger-vba
ich bräuchte einen VBA Code, der zwei Spalten unterschiedlicher Länge vergleicht, und zwar folgender Struktur (siehe Bild unten):
Spalten A und E sollen verglichen werden, und zwar
innerhalb verschiedener Einkäufe sollen Produkte verglichen werden (gleiche Produkte können vorkommen):
- in der Spalte B soll der Wert aus Spalte F geschrieben werden, falls vorhanden
- falls nicht vorhanden dann "nicht vorhanden" reinschreiben
- in der Spalte G soll "nicht vorhanden" geschrieben werden, falls das Produkt oder der Einkauf in der Spalte A nicht vorhanden ist.
Kann mir jemand helfen?
LG anfaenger-vba
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3388793761
Url: https://administrator.de/forum/vba-vergleich-zweier-spalten-3388793761.html
Ausgedruckt am: 22.04.2025 um 03:04 Uhr
6 Kommentare
Neuester Kommentar
Moin,
Geht obe VB, ganz klassisch mit einem SVERWEIS() in Kombination mit einer WENNV()
edit: Wobei du ja innerhalb einer Einkaufswoche prüfen möchtest. Das hatte ich glatt überlesen
Gruß
em-pie
Geht obe VB, ganz klassisch mit einem SVERWEIS() in Kombination mit einer WENNV()
- https://support.microsoft.com/de-de/office/sverweis-funktion-0bbc8083-26 ...
- https://www.excel-insights.de/excel-funktionen/excel-wennnv-funktion-nv- ...
edit: Wobei du ja innerhalb einer Einkaufswoche prüfen möchtest. Das hatte ich glatt überlesen
Gruß
em-pie
Servus @anfaenger-vba .
Wer hat sich denn diesen verkorksten Daten-Aufbau ausgedacht??
Da wäre dringend mal eine "Reformatierung" angesagt
, dann würde auch dieser Abgleich wegfallen bzw- wäre wesentlich effizienter ...
Hier das Demo-Sheet für deine Aufgabe (korrigiert):
compare_columns_3388793761.zip
Grüße Uwe
#edit# Sheet korrigiert und an deine Anforderungen angepasst.
Wer hat sich denn diesen verkorksten Daten-Aufbau ausgedacht??
Da wäre dringend mal eine "Reformatierung" angesagt
Hier das Demo-Sheet für deine Aufgabe (korrigiert):
compare_columns_3388793761.zip
Option Compare Text
Option Explicit
Sub Compare()
Dim cell As Range, rngSearch As Range, f As Range, itm As Range, rngStart As Range
Const NOTFOUNDTXT = "nicht gefunden"
With ActiveSheet
Set rngStart = .Range("A2")
For Each cell In .Range("A2:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
If cell.Value Like "Einkauf *" Then
Set rngSearch = FindSearchRange(cell.Value, "Einkauf *", .Range("E:E"))
For Each itm In .Range(rngStart, cell.Offset(-1, 0))
If Not rngSearch Is Nothing Then
Set f = rngSearch.Find(itm.Value)
If Not f Is Nothing Then
itm.Offset(0, 1).Value = f.Offset(0, 1).Value
Else
itm.Offset(0, 1).Value = NOTFOUNDTXT
End If
Else
itm.Offset(0, 1).Value = NOTFOUNDTXT
End If
Next
Set rngStart = cell.Offset(1, 0)
End If
Next
Set rngStart = .Range("E1")
For Each cell In .Range("E1:E" & .Cells(Rows.Count, "E").End(xlUp).Row)
If cell.Value Like "Einkauf *" Then
Set rngSearch = FindSearchRange(cell.Value, "Einkauf *", .Range("A:A"))
For Each itm In .Range(rngStart, cell.Offset(-1, 0))
If rngSearch Is Nothing Then
itm.Offset(0, 2).Value = NOTFOUNDTXT
Else
Set f = rngSearch.Find(itm.Value)
If f Is Nothing Then
itm.Offset(0, 2).Value = NOTFOUNDTXT
End If
End If
Next
Set rngStart = cell.Offset(1, 0)
End If
Next
End With
End Sub
Function FindSearchRange(strSearchStart As String, strSearchEnd As String, rngCol As Range) As Range
Dim r1 As Range, r2 As Range
Set r1 = rngCol.Find(strSearchStart)
If strSearchStart = "" Or r1 Is Nothing Then
Set FindSearchRange = Nothing
Exit Function
End If
Set r1 = r1.Offset(-1, 0)
Set r2 = Range(r1, Cells(1, rngCol.Column)).Find(strSearchEnd, SearchDirection:=xlPrevious)
If Not r2 Is Nothing Then
Set r2 = r2.Offset(1, 0)
Else
Set r2 = Cells(1, rngCol.Column)
End If
Set FindSearchRange = Range(r1, r2)
End Function
Grüße Uwe
#edit# Sheet korrigiert und an deine Anforderungen angepasst.
Ach so, ich dachte alles was unter den Fetten Überschriften auf der rechten Seite steht gehört jeweils zu der Überschrift , dann hatte ich das nur falsch interpretiert die Beschreibung war aber leider auch nicht sonderlich präzise ...
Das lässt sich aber leicht anpassen.
Aber mal ehrlich, sowas gehört heutzutage eh in ne Datenbank.
#edit# Sheet mit Code wurde oben nach deinen Anforderungen angepasst und Bild mit Ergebnissen ebenfalls, prüfe ob es nun stimmt.
Das lässt sich aber leicht anpassen.
Aber mal ehrlich, sowas gehört heutzutage eh in ne Datenbank.
#edit# Sheet mit Code wurde oben nach deinen Anforderungen angepasst und Bild mit Ergebnissen ebenfalls, prüfe ob es nun stimmt.