Kompliziertes Filtern möglich??
#1
Aloha an Alle,

ich suche einen Weg die eine Liste zu Sortieren anhand von "Block-Segmenten"
Ich möchte Anhand des ersten Wertes unter Loading den "Block" nach Größe sortieren.
Gibt es dazu einen Weg in Excel??
Skizze im Anhang

LG Dave


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#2
Was sollen wir denn mit einer SKIZZE deiner Datei ?
Antworten Top
#3
Moin!
Mir reicht die Skizze, um zu beurteilen, dass der "Tabellenaufbau" … suboptimal ist.
Ich würde die Skizze ausdrucken, die Blöcke schneiden, auf dem Schreibtisch verschieben und wieder zusammenkleben.

Ja, ich weiß, war böse.

Leerzeilen zwischen den Blöcken und Überschriften/Zusammenfassungen pro Block haben in einer Excel-Tabelle rein gar nichts verloren!

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • shift-del
Antworten Top
#4
Müsste man trotzdem mit Excel365 hinkriegen können.
Aber ich werde die Datei bestimmt nicht für ihn anhand des Bildes nachbauen.
Antworten Top
#5
Hi an alle,

ja ich weiß, die Kommentare sind ja gerechtfertigt (wenn auch manchmal Böse). 
Zu meiner Verteidigung: Ist auch nicht meine Liste, ich habe nur die undankbare Aufgabe diese zu füllen und zu Sortieren.
Keine Sorge, Datei ist im Anhang.

Wenn es möglich ist, bin ich für jede Hilfe dankbar.
Wenn es nicht möglich ist, habe ich wenigstens eine Grundlage zu Argumentieren.

Danke im vorfeld.

LG
Dave


Angehängte Dateien
.xlsx   Project work flow & dates_07.10.2024.xlsx (Größe: 23,22 KB / Downloads: 16)
Antworten Top
#6
Wieso stehen denn plötzlich mehrere Werte bei "Loading" ??? Welcher ist denn jetzt relevant?
Antworten Top
#7
Hallo Dave,

in ein allgemeines Modul:
Code:
Option Explicit
    Private arrLoading()

Sub StartSortBlockweise()
    Dim i&, j&, k&
    With Tabelle1
        For i = 2 To .Cells(Rows.Count, 6).End(xlUp).Row Step 9
            k = k + 1
            ReDim Preserve arrLoading(1 To 2, 1 To k)
            arrLoading(1, k) = .Cells(i + 2, 17)
            arrLoading(2, k) = "A" & i & ":S" & i + 8
        Next i
        arrLoading = Application.Transpose(arrLoading)
        BubbleSort 1, 0, arrLoading
        Ausgabe
    End With
End Sub

Private Sub Ausgabe()
    Dim i&, j&: j = 2
    With Tabelle2
        For i = 1 To UBound(arrLoading)
            Tabelle1.Range(arrLoading(i, 2)).Copy
            Tabelle2.Cells(j, 1).PasteSpecial xlPasteAll
            j = j + 8
        Next i
    End With
End Sub

Private Function BubbleSort(Spalte As Long, SortAsc As Integer, arr As Variant)
    Dim iTemp, i&, j&, k&
    With Tabelle1
        For i = 1 To UBound(arr)
            For j = i + 1 To UBound(arr)
                If SortAsc = 1 Then
                    If arr(i, Spalte) > arr(j, Spalte) Then
                        For k = 1 To UBound(arr, 2)
                            iTemp = arr(i, k)
                            arr(i, k) = arr(j, k)
                            arr(j, k) = iTemp
                        Next k
                    End If
                Else
                    If arr(i, Spalte) < arr(j, Spalte) Then
                        For k = 1 To UBound(arr, 2)
                            iTemp = arr(i, k)
                            arr(i, k) = arr(j, k)
                            arr(j, k) = iTemp
                        Next k
                    End If
                End If
            Next j
        Next i
        BubbleSort = arr
    End With
End Function
lege vorher für die Ausgabe ein neues Tabelleblatt an.

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Egon12 für diesen Beitrag:
  • GKDave
Antworten Top
#8
Hallo,

da du Excel365 hast, habe ich dir im Arbeitsblatt "Tabelle2" in Zelle A2 folgende Formel eingefügt:
Code:
=LET(
    Mat; Tabelle1!$A$2:$S$55;
    load; SPALTENWAHL(Mat; 17);
    bl; ZEILENUMBRUCH(load; 9);
    blAnf; SEQUENZ(ZEILEN(bl); 1; 1; 9);
    blnr; HSTAPELN(blAnf; WEGLASSEN(bl; ; 1));
    blnrSort; SORTIEREN(blnr; 3);
    blzlnr; NACHZEILE(
        blnrSort;
        LAMBDA(zl;
            LET(sp; INDEX(zl; 1; 1); TEXTVERKETTEN("|"; 1; SEQUENZ(1; 9; sp)))
        )
    );
    zlSort; ZUSPALTE(TEXTTEILEN(TEXTVERKETTEN("|"; 1; blzlnr); "|"));
    MATRIXERSTELLEN(
        ZEILEN(zlSort);
        SPALTEN(Mat);
        LAMBDA(i; j;
            LET(
                zli; INDEX(zlSort; i; 1);
                wrt; INDEX(Mat; zli; j);
                WENN(ISTLEER(wrt); ""; wrt)
            )
        )
    )
)

Diese Formel greift auf den Zellbereich A2:S55 des Arbeitsblattes "Tabelle1" zu und sortiert diesen Bereich nach dem jeweils ersten Loading-Wert jedes 9-Zeilen Zellblockes (Resultatbereich ebenfalls A2:S55). Da die Formel keine Zellformatierungen mitkopiert, habe ich diese 1x vom Arbeitsblatt "Tabelle1" ins Blatt "Tabelle2" kopiert.

Modifizierte Datei liegt bei.


Angehängte Dateien
.xlsx   GKDave_Project work flow & dates_07.10.2024.xlsx (Größe: 25,95 KB / Downloads: 3)
Mit lieben Grüßen
Anton.

Windows 10 64bit
Office365 32bit
[-] Folgende(r) 1 Nutzer sagt Danke an EA1950 für diesen Beitrag:
  • GKDave
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste