Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1528to1532
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 Index und Match für mehrere Kriterien

VBA Index und Match für mehrere Kriterien
14.12.2016 16:08:28
Jendrik
Hi,
also vorweg - für gewöhnlich finde ich Lösungen für derartige Probleme, aber aktuell stehe ich einfach auf dem Schlauch und verstehe nicht, wieso der Code nicht funktioniert.
Vielleicht übersehe ich etwas, habe einen falsche Gedankengang - however.

Ziel ist es, dass ich mittels VBA unter Nutzung von Index und Match nach 2 oder mehr Kriterien  _
suche und einen zugehörigen Wert auslese.
Ich habe also eine Haupttabelle und mehrere Hilfstabellen.

Ein Abgleich, vor der Nutzung des Index/Vergleichs erfolgt durch eine Countifs-Anweisung und führt bisher zum korrekten Ergebnis.
Hier mal ein Auszug.
Deklarationen und Zuweisungen von Variablen spare ich mir, da diese alle funktionieren und Inhalte aufweisen, die korrekt sind.
Zum Verständnis:
Die Tabelle, mit der Abgeglichen wird, besteht aus 8 Spalten, von denen aber für den vorliegenden Fall nur 4 von Belang sind (siehe *). Code*, VTyp, NTyp, VPlatz*, NPlatz, Material*, Gruppe, Dauer*
Ich habe also einen Datensatz, aus dem ich alle relevanten Werte extrahiere und vergleiche dann, ob bestimmte Kriterien auf diesen Datensatz zutreffen und ob es eine oder mehrere Ergebnisse für diese Suche gibt. Es gibt also noch weitere Elseif-Abgleich.
Soweit funktionieren die Abgleiche wunderbar, lediglich wenn ich dann einen "Match" habe und laut countifs eben in die Anweisung eingelassen werde und dann auf Basis der identischen Suchparameter, die ich auch für Countifs genutzt habe, eben einen Wert zuordnen möchte (ähnlich Sverweis, nur mit mehr Kriterien), dann erhalte ich einen leeren String als Ausgabe.
// Alternativ habe ich versucht mit Application.Index oder WorksheetFunction.Index (sowie . match) zu arbeiten
// Auch fest zugewiesene Ranges oder das Ausschreiben des Worksheets in Form von "Worksheets("Zuweisung.Aufwand")"
// Alles brachte bisher kein korrektes Ergebnis.
// Code* (D), VTyp(E), NTyp (F), VPlatz*(G), NPlatz(H), Material*(I), Gruppe(J), Dauer* (K)
// Die Formel in Excel =INDEX(K5:K22;VERGLEICH("040_F01"&"REST";D5:D22&I5:I22;0);0) wiederum liefert das korrekte Ergebnis "650"

Dim ws1,ws2,ws3 as Worksheet
Dim rest, material, code as String
Dim grp as Variant
Set ws1 = Worksheets("Zuweisung.Aufwand")
Set ws2 = Worksheets("LG_SAP_LT22")
Set ws3 = Worksheets("Zuweisung.Lagerplätze")
Parameter im vorliegenden Fall:
lastrow2 = 22 ' (überprüft, ist korrekt)
Code = "040_F01" ' (überprüft, ist korrekt)
rest = "REST" ' (überprüft, ist korrekt)
grp = ""
If ...
ElseIf Application.CountIfs(ws1.Range("D5:D" & lastrow2), Code, ws1.Range("I5:I" & lastrow2),  _
rest) = 1 Then
grp = WorksheetFunction.Index(ws1.Range("K5:K" & lastrow2), WorksheetFunction.Match(Code & rest, _
ws1.Range("D5:D" & lastrow2) & ws1.Range("I5:I" & lastrow2), 0), 1)
End if
Nun ist die Frage, was genau ich falsch mache?
Ich kann mir eigentlich nur vorstellen, dass der Parameter "1" am Ende des Indexes fehlerhaft ist, allerdings gebe ich in Excel direkt diesen Parameter auch nicht an und erhalte trotzdem ein Ergebnis. Auch mit "1" erhalte ich eins - in VBA mit keinem der Varianten.
Wenn irgendjemand eine IDee hat und/oder alternative Lösungen (bitte nur Lösungen, die ich direkt in VBA implementieren kann, Formeln die irgendwo abgelegt werden sollen nicht zum tragen kommen).
Schöne Grüße
Jendrik

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Index und Match für mehrere Kriterien
14.12.2016 16:42:00
Jendrik
Ok, also ...
sofern jemand ne Idee hat, was bei mir konkret falsch ist, darf gerne weiter auf die Frage geantwortet werden - es interessiert mich jedenfalls, was an meinem Gedankengang falsch ist. Bzw. In wie fern ich die Syntax falsch interpretiere.
Ich habe das Problem nun so gelöst, dass ich Index/Vergleich durch eine Sumifs-Funktion ersetzt habe und im vorliegenden Fall natürlich auch zum entsprechenden Ergebnis führt.
Ich bin mir sicher, ich habe irgendwas an der Syntax falsch verstanden. ;)

If ...
ElseIf Application.CountIfs(ws1.Range("D5:D" & lastrow2), Code, ws1.Range("I5:I" & lastrow2),  _
rest) = 1 Then
grp = Application.SumIfs(ws1.Range("K5:K" & lastrow2), ws1.Range("D5:D" & lastrow2), Code, _
ws1.Range("I5:I" & lastrow2), rest)
End if 

Schöne Grüße
Jendrik
Anzeige

320 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige