Clever-Excel-Forum

Normale Version: VBA Split-Arrays nach VLOOKUP Fkt sortieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Zusammen,

ich benötige einen Rat zu folgender Problemstellung. 
Ich habe eine Gruppe von Typenschlüsseln denen jeweils ein Datum zugeordnet ist, in jeweils einer Zelle zusammengefasst. 

Beispiel:   G20 01.01.2022,  G21 02.01.2022,  G22 03.01.2022, G31 02.09.2021 [attachment=46841]

G20 G21 G22 G30           Ziel --> G30 G20 G21 G22 G30
G22 G30 G20                  Ziel --> G30 G20 G22
G30 G20 G25
G24 G21 G20
G31
G20 G29 G24

Nun möchte ich die Typenschlüssel in der Zelle entsprechend ihres zugehörigen Datums sortieren oder mindestens das Kürzel mit dem jeweils frühesten Datum je Zelle ermitteln.  
Ich habe mit der Split-FKT die Typenschlüssen separiert und per VLOOKUP die zugehörigen Daten verbunden. Aber ich weis nicht wie ich die VLOOKUP Ergebnisse sortiere und dieses wieder auf die Typenschlüssel verweisen kann. 

Ich hoffe jemand kennt eine Ähnliche Aufgabenstellung und kann mir weiter helfen.

Besten Dank

code in originaler Datei soweit:
Sub trennen()
Dim SOPmin As Date
Dim deri As String

For k = 0 To 5 'Tabelle3.Cells(Tabelle3.Rows.Count, 5).End(xlUp).Row 'Anzahl Zeilen mit Derivaten ermitteln
On Error Resume Next

For i = 0 To UBound(Split(Tabelle3.Cells(9 + k, 7), " ")) 'Anzahl Splitbereiche ermitteln
On Error Resume Next
If IsError(WorksheetFunction.VLookup(Split(Tabelle3.Cells(9 + k, 7), " ")(i), Tabelle18.Range("A2:D310"), 4, 0)) Then
SOPmin = Date * 2
Else
SOPmin = WorksheetFunction.VLookup(Split(Tabelle3.Cells(9 + k, 7), " ")(i), Tabelle18.Range("A2:D310"), 4, 0)
End If

Tabelle11.Cells(2 + k, 6 + i) = SOPmin
'Tabelle11.Cells(2 + k, 5) =
Debug.Print WorksheetFunction.Min(SOPmin)
Next i
Next k
End Sub

Andreas
Hallo

Wenn Sortieren dabei ist wird es auch mit VBA schon mal aufwendig. Löse ich dann lieber mit PowerQuery.

Gruß Elex
Gelobt sei Excel 365 oder Web:

office-hilfe.com/support/threads/spalten-einer-zeile-sortieren-und-das-gleich-fuer-mehrere-zeilen.55595/

(ist von Anfang 2022, als es noch kein TEXTTEILEN gab. Funktion wird dadurch kürzer!)

EDIT: Ich sehe grad, dort gibt es nur 
Zelle in Zeile und 
Zeile in Zeile, aber nicht
Zelle in Zelle ... muss noch nachgeliefert werden.
Hi Elex, 

besten Dank das ist genau die Lösung aber wie bekomme ich diese Abfrage über Power-Query hin. Irgendetwas übersehe ich. 
Gruß
Hier noch das Sortieren in jeder Zelle einer Spalte A1:A6 (wie bei Dir) für sich nachgereicht (mit der TEXTTEILEN2D-Funktion):

=NACHZEILE(A1:A6;LAMBDA(arr;GLÄTTEN(TEXTVERKETTEN(" ";;SORTIEREN(
LAMBDA(z;LET(
j;MAX(LÄNGE(z)-LÄNGE(WECHSELN(z;" ";))+1);
i;LAMBDA(t;n;y;FINDEN("#";WECHSELN(" "&t&"#";" ";"#";SEQUENZ(;n)+y)));
TEIL(z;i(z;j;0);i(z;j;1)-i(z;j;0))))(arr)

;;;1)))))
Hi Andreas 

Zitat:besten Dank das ist genau die Lösung aber wie bekomme ich diese Abfrage über Power-Query hin. Irgendetwas übersehe ich. 
Wie sind deine Kenntnisse zu PQ. Wie weit kommst du.

@LCohen
Ich glaube die Frage ist in der #1 Bsp.Datei nicht gut dargestellt.
In #1 steht  Beispiel:   G20 01.01.2022,  G21 02.01.2022,  G22 03.01.2022, G31 02.09.2021
Die Rohdaten sind in einer Zelle. Siehe meine PQ Datei.

Gruß Elex
Danke, Elex. Ich hatte seine Datei gar nicht geöffnet und daher die abweichende Reihenfolge nicht gesehen. Ich habe mir jetzt 'nen schlanken Fuß gemacht und Datümer(zahlen) zwischen 9999 und 100000 angenommen (also exakt 5stellig, kann man natürlich auch ordentlich tun mit TEXT(...;"JJJJMMTT")). Die (SVERWEIS) habe ich vor die zugehörigen Gxx verkettet, danach sortiert, und danach beim ZurückTEXTVERKETTEN mit TEIL weggelassen.

=NACHZEILE(A2:A7;LAMBDA(arr;GLÄTTEN(TEXTVERKETTEN(" ";;TEIL(SORTIEREN(
LAMBDA(z;LET(
j;MAX(LÄNGE(z)-LÄNGE(WECHSELN(z;" ";))+1);
i;LAMBDA(t;n;y;FINDEN("#";WECHSELN(" "&t&"#";" ";"#";SEQUENZ(;n)+y)));
k;TEIL(z;i(z;j;0);i(z;j;1)-i(z;j;0));
SVERWEIS(k;D2:E13;2)&k))(arr);;;1);6;9)))))
Hallo

Ja, in einem aktuellen Excel könnte dann in B2 die Formel auch so aussehen. Bezogen auf meine Bsp.Datei in#2.

=NACHZEILE(A2:A4;LAMBDA(arr;LET(a;TEXTTEILEN(GLÄTTEN(arr);;", ");n;TEXTNACH(a;" ");v;TEXTVOR(a;" ");TEXTVERKETTEN(" ";;SORTIERENNACH(v;1*n)))))

Gruß Elex
Ich habe mich halt an seine (normalisierte!) Form gehalten.

Klar, dass es mit den Zwischenschritten dann länger wird, weil die Formel auch die Beziehungen beider Bereiche verarbeitet.

Interessant ist aber, dass Du das TEXTTEILEN_2D auch so viel kürzer hinbekommen hast! Vielleicht kannst Du ja mal erläutern, warum ... 
aus einem nicht funktionierenden TEXTTEILEN allein 
es durch Hinzunahme von TEXTVOR und TEXTNACH plötzlich klappt.
So denke ich.

Textteilen(G20 01.03.2022, G24 02.02.2022,   G26 03.02.2022, G31 02.09.2021)
ergibt.
G20 01.03.2022
G24 02.02.2022
G26 03.02.2022
G31 02.09.2021
 
Textvor und Textnach in v und n speichern.
v
G20
G24
G26
G31
 
n
01.03.2022
02.02.2022
03.02.2022
02.09.2021
 
Das es jetzt zwei separate Arrays sind ist Sortierennach egal.
Seiten: 1 2