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 hat Ahnung
    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. WENN-Funktion mit mehreren Bedingungen

    in Microsoft Excel Hilfe
    WENN-Funktion mit mehreren Bedingungen: Guten Morgen, ich würde gerne eine Funktion erstellen, die die Werte einer Zelle untersucht. Ist der Wert unter 5, so soll ein "nein" erscheinen und das Feld rot werden Ist der Wert zwischen 5...
  3. Zellbezug mit MONAT(HEUTE()) Funktion

    in Microsoft Excel Hilfe
    Zellbezug mit MONAT(HEUTE()) Funktion: Hallo Forum, ich habe eine Exceltabelle, mit der ich meine Finanzen festhalte. Auf einer Übersichtsseite stehen die Einnahmen/Ausgaben für verschiedene Bereiche. In der Spalte Q möchte ich den...
  4. Daten aus anderer Mappe

    in Microsoft Excel Hilfe
    Daten aus anderer Mappe: Hallo zusammen, ich habe für die bessere Verständlichkeit eine Excel erstellt, die mein Problem beschreibt. In Tabelle 2 sind verschiede Formen dargestellt, denen mehrere Eigenschaften zugeordnet...
  5. Funktionen Filter, Spaltenwahl und Übernehmen

    in Microsoft Excel Hilfe
    Funktionen Filter, Spaltenwahl und Übernehmen: Guten Abend Liebe Forenmitglieder, es ist für Euch wahrscheinlich ein leichtes, aber ich komm gerade nicht dahinter. Und auch verschiedene Videos führten in meinen Augen nicht weit genug. Wie...
  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