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

VLookup funktioniert nur bei selber Reihenfolge der Werte

VLookup funktioniert nur bei selber Reihenfolge der Werte
03.11.2023 09:20:53
Finndus
Hallo zusammen,

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

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

Betreff
Datum
Anwender
Anzeige
AW: VLookup funktioniert nur bei selber Reihenfolge der Werte
03.11.2023 09:23:37
Finndus
Edit: Es sollen natürlich nicht die alten Nummern auf die neue Liste gezogen werden, sondern das jeweilige Datum aus Spalte D zu den Nummern die auf der neuen Liste vorhanden sind.

Sorry :)
AW: VLookup funktioniert nur bei selber Reihenfolge der Werte
03.11.2023 09:32:57
onur
Der Code ohne die Datei bringt nix - wie sollen wir da irgendwas überprüfen oder neu entwickeln?
AW: VLookup funktioniert nur bei selber Reihenfolge der Werte
03.11.2023 12:38:41
daniel
Hi
der VLookUp funktioniert schon richtig.
du hast da nur ein paar Böcke eingebaut.
Fangen wir mal an:

1. Startzeile 2 oder 3 (Beginn der Daten) ? im Code 3, in der Datei 2

2. in den Beispieltabellen stehen Zahlen. Du wandelst aber die Suchbegriffe in Text um, da du vorgibst:
Dim strSearch As String
Der VLookUp unterscheidet streng zwischen Text und Zahl, dh wenn du nach "123" suchst, bekommst du bei 123 keinen Treffer. du musst strSearch als Variant deklarieren.

3. auch dein zweiter Versuch mit Index und Application.Match ist völlig daneben.
wenn, dann so:
Cells(i, 4).Value = Application.Index(bereich.Columns(4), Application.Match(Cells(i, 1).Value, bereich.columns(1), 0))


du solltest, wenn du mit mehreren Tabellenblättern oder Dateien hantierst, vor jedem Range oder Cells immer Workbook und Worksheet angeben.
ohne die Angabe referenzierst du sonst auf das Aktive Blatt und da ist nicht garantiert, dass das immer das gewünschte ist, besonders dann, wenn man im Einzelstepmodus testet und dann auch mal parallel in der Datei umherschaut, was passiert.
Also besser immer vollständig referenzieren.

Gruß Daniel
Anzeige
AW: VLookup funktioniert nur bei selber Reihenfolge der Werte
03.11.2023 14:14:10
Finndus
Hi Daniel,

Tipp Nr. 1 und Nr. 3 waren es! Tausend Dank für die nette Hilfe.
Das i einmal 2 und einmal 3 war bitte ich zu entschuldigen. In meinem Fall stehen die Werte tatsächlich erst in Zeile 3.

Für alle die evtl mal etwas ähnliches machen wollen hier der funktionierende Code:

Sub VLookupAusAndererDatei()


Dim strArbeitsblatt As String
Dim strPathVortag As String
Dim wbVortag As Workbook
Dim i As Integer

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 Variant 'das war falsch...
strSearch = wbVortag.Worksheets(1).Range("A" & i) 'und das war auch falsch. Danke Daniel :)

Range("D" & i).value = Application.VLookup(strSearch, bereich, 4, False)

Next i


wbVortag.Close


End Sub

Private Function getLetzteZeile(ByVal Tabelle1 As String) As Integer
Dim letzteZeile As Integer

letzteZeile = Worksheets("Export 1").Cells(Rows.Count, 1).End(xlUp).Row

getLetzteZeile = letzteZeile
End Function

Anzeige
AW: VLookup funktioniert nur bei selber Reihenfolge der Werte
03.11.2023 09:48:23
Finndus
Sorry, hier mal zwei Beispieldateien - die Originale kann ich leider nicht rausgeben:

Gestriger Tag: https://www.herber.de/bbs/user/164000.xlsx
--> diese Datei soll geöffnet werden und mithilfe Sverweis oder Index/Vergleich nach der KW gesucht werden

Aktueller Tag: https://www.herber.de/bbs/user/164002.xlsx
--> Aus dieser Datei springe ich ab. Die Nummern sind in einer anderen Reihenfolge angeordnet.
AW: VLookup funktioniert nur bei selber Reihenfolge der Werte
03.11.2023 10:48:44
Finndus
Nochmal eine Korrektur: Die Datei des Vortages benötigt das Dateiformat xlsm:

Datei des Vortags: https://www.herber.de/bbs/user/164005.xlsm
Anzeige
AW: VLookup funktioniert nur bei selber Reihenfolge der Werte
03.11.2023 11:24:24
onur
Und das Makro ist wo? Im aktuellen Tag? Wenn ja, warum xlsx?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige