VLookup funktioniert nur bei selber Reihenfolge der Werte
03.11.2023 09:20:53
Finndus
ich hoffe hier auf eine Lösung meines ungewöhnlichen Problems und wäre dankbar über jeden Tipp.
Die Ausgangsituation sieht wie folgt aus: Ich pflege täglich eine Liste die mehrere Materialnummern und dazu allerhand zugehörige Informationen enthält. Jeden Tag ziehe ich mir aus SAP einen Export und es kommen neue Nummern dazu und alte verschwinden. Ich möchte gerne das Eintrittsdatum der jeweiligen Nummer (diese steht in Spalte A) in Spalte D "Kalenderwoche" eintragen. Die Formel dafür habe ich, die funktioniert. Nun sollen die alten Nummern, die also auf der Liste des Vortags bereits vorhanden waren mit einem Sverweis oder Index/ Vergleich zuerst auf die neue gezogen werden, indem ich über folgende Funktion aufgefordert werde die Liste des Vortags zu öffnen damit dort dann der Sverweis oder Index/Vergleich nach den Daten suchen kann. So sieht das ganze aus:
Sub datumsAngabe_1()
Dim strArbeitsblatt As String
Dim strPathVortag As String
Dim wbVortag As Workbook
Dim i As Integer
'Vortags-Datei auswählen und laden
Dim fd As Office.FileDialog
strArbeitsblatt = "Export 1"
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Clear
.Filters.Add "Excel-Dateien", "*.xlsm?", 1
.Title = "Bitte die Liste des VORTAGS öffnen"
.AllowMultiSelect = False
If .Show = True Then
strPathVortag = .SelectedItems(1)
Else
Exit Sub
End If
End With
Set wbVortag = Workbooks.Open(strPathVortag)
ThisWorkbook.Activate
letzteZeile = getLetzteZeile(strArbeitsblatt)
Dim bereich As Range
Set bereich = wbVortag.Worksheets(1).Columns("A:D")
For i = 3 To letzteZeile
Dim strSearch As String
strSearch = Range("A" & i)
Range("D" & i).value = Application.VLookup(strSearch, bereich, 4, False)
'ODER
Cells(i, 4).value = Application.Index(strSearch, Application.Match(Cells(i, 1).value, bereich), 0)
Next i
'Vortags-Datei schließen
wbVortag.Close
End Sub
Private Function getLetzteZeile(ByVal Tabelle1 As String) As Integer
Dim letzteZeile As Integer
'Hier wird die letzte Zeile der ersten Spalte ermittelt
letzteZeile = Worksheets("Export 1").Cells(Rows.Count, 1).End(xlUp).Row
getLetzteZeile = letzteZeile
End Function
Jetzt das Problem: Sverweis und Index/Vergleich funktionieren NUR wenn die Nummern in der aktuellen Liste und der des Vortags in exakt selber Reihenfolge stehen. Das ergibt keinen Sinn, ist doch genau dass der Zweck des Sverweises, nach Informationen entlang einer gesamten Spalte zu suchen. Könnte es evtl an dem index i liegen? Ich trete auf der Stelle und freue mich über einen regen Austausch dazu.
Danke und Liebe Grüße
Finn