Office: Iterierend aufgerufene Funktion beenden (bei Array-Sortierung)

Helfe beim Thema Iterierend aufgerufene Funktion beenden (bei Array-Sortierung) in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich habe eine Funktion geschrieben, die mir eine bestimmte eingelesene "Spalte" in einem zweidimensionalen Array sortieren soll. Das... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von enorix, 5. April 2023.

  1. enorix Neuer User

    Iterierend aufgerufene Funktion beenden (bei Array-Sortierung)


    Hallo zusammen,

    ich habe eine Funktion geschrieben, die mir eine bestimmte eingelesene "Spalte" in einem zweidimensionalen Array sortieren soll. Das funktioniert grundsätzlich auch soweit sehr gut.
    Die Funktion ruft sich quasi immer wieder selbst auf und sortiert von neuem. Das Problem ist am Ende leider, dass die iterativ aufgerufenen Funktionen auch wieder verlassen werden wollen. Das möchte ich vorzeitig abbrechen, sobald der letzte Wert in meinem Array sortiert wurde. Kann mir jemand einen Tipp geben, wie ich das anstellen kann. Hier mal mein Code:

    Code:
    Sub TestSortierung()
        Dim arr_MyArr                   As Variant
        
        arr_MyArr = Worksheets(1).Range("A1:E20")
        ReDim Preserve arr_MyArr(1 To UBound(arr_MyArr), 1 To UBound(arr_MyArr, 2))
        arr_MyArr = fct_SortArray(Application.WorksheetFunction.Transpose(arr_MyArr), 5, False)
        
        Worksheets(1).Range("I1") = arr_MyArr
        
    End Sub
    
    Function fct_SortArray(ByVal arr_SortingArrayInput As Variant, ByVal int_SortCol As Integer, ByVal bool_SortAsc As Boolean) As Variant
        Dim arr_Temp()                As Variant
        
        
        int_NextArrCounter = 1
        For int_ArrCounter = LBound(arr_SortingArrayInput, 2) To UBound(arr_SortingArrayInput, 2)
            ReDim Preserve arr_Temp(1 To UBound(arr_SortingArrayInput), 1 To UBound(arr_SortingArrayInput, 2))
            
            int_NextArrCounter = int_NextArrCounter + 1
            
            If int_NextArrCounter > UBound(arr_SortingArrayInput, 2) Then
                Exit For
            End If
            
            If arr_SortingArrayInput(int_SortCol, int_ArrCounter) <= arr_SortingArrayInput(int_SortCol, int_NextArrCounter) Then
                For i = 1 To int_SortCol
                    arr_Temp(i, int_ArrCounter) = arr_SortingArrayInput(i, int_ArrCounter)
                Next
                For i = 1 To int_SortCol
                    arr_Temp(i, int_NextArrCounter) = arr_SortingArrayInput(i, int_NextArrCounter)
                Next
            Else
                For i = 1 To int_SortCol
                    arr_Temp(i, int_ArrCounter) = arr_SortingArrayInput(i, int_NextArrCounter)
                Next
                For i = 1 To int_SortCol
                    arr_Temp(i, int_NextArrCounter) = arr_SortingArrayInput(i, int_ArrCounter)
                Next
                For i = 1 To int_SortCol
                    For x = int_NextArrCounter + 1 To UBound(arr_SortingArrayInput, 2)
                        arr_Temp(i, x) = arr_SortingArrayInput(i, x)
                    Next
                Next
                If pub_SortFinished = True Then Exit Function
                arr_Temp = fct_SortArray(arr_Temp, int_SortCol, True)
                If pub_SortFinished = True Then
                    fct_SortArray = arr_Temp
                    Exit Function
                End If
            End If
        Next
        
        fct_SortArray = arr_Temp
        
    End Function
    Danke vorab schon mal.
     
    enorix, 5. April 2023
    #1
  2. Lutz Fricke Erfahrener User
    Hallo enorix,

    grundsätzlich irritiert mich die Aufgabenstellung... Warum soll eine Sortierung itterieren?
    Falls Du nach mehreren Spalten sortieren möchtest gibt es da diverse Quicksort-Routinen, die das erledigen.

    Am Ende der For-Schleife fragst Du die Variable pub_SortFinished ab, die du aber im restliche Code nie anfasst, geschweige denn zu Beginn definierst.
    Sollte diese Variable True werden, verlässt Du die Funktion ohne dein arr_Temp in die Variable fct_SortArray zu schreiben, damit kehrst Du zurück ohne ein Ergebnis. Sicherlich sollte da ein Exit For stehen...

    Gruß,
    Lutz
     
    Lutz Fricke, 6. April 2023
    #2
  3. RPP63_neu
    RPP63_neu Erfahrener User
    Moin!
    Darf ich fragen, warum das Rad neu erfunden werden soll?
    Schließlich gibt es die Range.Sort-Methode.
    Vielleicht(?) bin ich aber nur zu faul, das Besondere an dem Array-Gedöns zu erkennen.

    Gruß Ralf
     
    RPP63_neu, 6. April 2023
    #3
Thema:

Iterierend aufgerufene Funktion beenden (bei Array-Sortierung)

Die Seite wird geladen...
  1. Iterierend aufgerufene Funktion beenden (bei Array-Sortierung) - Similar Threads - Iterierend aufgerufene Funktion

  2. Probleme mit bedingter Formatierung

    in Microsoft Excel Hilfe
    Probleme mit bedingter Formatierung: Hallo ihr Lieben, folgende Herausforderung: Ich möchte die Formatierung des Wertes in B7 (bzw. auch alle weiteren Werte in Spalte B) nach folgenden Bedingungen anpassen: 1. WENN C7<0,05 DANN...
  3. neue Filter Funktion

    in Microsoft Excel Hilfe
    neue Filter Funktion: Hallo zusammen, wieder habe ich für meine Nebenkostenabrechnung (privat) ein paar Änderungen gemacht. Soweit so gut Nun habe ich , für mich, die neue Filter Funktion entdeckt. Wow ist richtig...
  4. Zahlenreihe addieren

    in Microsoft Excel Hilfe
    Zahlenreihe addieren: Hallo, ich habe folgende Zahlenreihe: -5; -9; -11; 35; -2; -4; -8; 33; -3; -6; -9 Jetzt würde ich gerne mit einer Funktion nur die Zahlen von rechts nach links, ab dem letzten Eintrag -9,...
  5. DropDown Auswahl mit 2 Funktionen

    in Microsoft Excel Hilfe
    DropDown Auswahl mit 2 Funktionen: Liebes Forum-Team, ich habe eine Tabelle mit Kundendaten, die von mehreren Mitarbeitern befüllt wird. Ich möchte, dass der Mitarbeiter seinen Namen im DropDown Auswahl auswählt, Aber im...
  6. Prüfen von welcher Funktion aus aufgerufen worden ist

    in Microsoft Excel Hilfe
    Prüfen von welcher Funktion aus aufgerufen worden ist: Hallo liebe Forenmitglieder, ich hätte eine Frage bezüglich der Aufrufe in Vba. Es geht mir um die Frage ob folgendes möglich ist: Ich will in einer Funktion "A" Code ausführen lassen, abhängig...
  7. Das aufgerufene Objekt wurde von den Clients getrennt

    in Microsoft Excel Hilfe
    Das aufgerufene Objekt wurde von den Clients getrennt: Hallo, vielleicht kennt jemand ja hier das Problem der Hilfetext sagt mir irgendwie nix. Ich habe ein Makro aufgebaut, welches mit einem Formular startet. In dem Formular kann muss der User über...
  8. Warten bis aufgerufener Code fertig ist

    in Microsoft Excel Hilfe
    Warten bis aufgerufener Code fertig ist: Hallo, Ich habe eine VBA Programmierung, die einen anderen VBA Code mit einer Zeitverzögerung aufruft. Code: Application.OnTime Now + TimeSerial(0, 0, 4), "VBA_Code" Das Problem dabei ist,...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden