Anzeige
Archiv - Navigation
1924to1928
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- spielmin. finden, mit wenigsten

vba- spielmin. finden, mit wenigsten
26.03.2023 18:16:48
Fred

Hallo Excel Profis,
ich habe da letzte Nacht ein Makro dahin "gewürgt", das es in der Tabelle die Spielminuten durchgeht und mir die 3 Spielminuten anzeigt, in denen (inclusive der nächsten 7 Minuten) die wenigsten Treffer fallen.
Aber ich bekomme es einfach nicht hin, entsprechend 5 Werte zu liefern.
Also die 5 Spielminuten, die einschließlich der folgenden 7 Minuten die wenigsten Treffer haben.
mein derzeitiges Konstrukt:

Sub c_3Kleinst()
    Dim StartZelle As Range
    Dim AnzahlSpalten As Long
    Dim Titel As Long
    Dim Summe As Double
    Dim MinSumme1 As Double
    Dim MinSumme2 As Double
    Dim MinSumme3 As Double
    Dim MinTitel1 As Long
    Dim MinTitel2 As Long
    Dim MinTitel3 As Long
    
    Dim ws As Worksheet
    Set ws = Worksheets("1Hz")
    
    With ws.ListObjects("tab_1Hz")
        Set StartZelle = .ListColumns(7).Range ' Start in Spalte G
        AnzahlSpalten = .ListColumns.Count ' Anzahl der Spalten in der Tabelle
        
        ' Initialisiere die 3 minimalen Summen
        MinSumme1 = Application.WorksheetFunction.Sum(StartZelle.Resize(, 8))
        MinSumme2 = MinSumme1
        MinSumme3 = MinSumme1
        
        ' Initialisiere die Titel der 3 minimalen Summen
        MinTitel1 = 1
        MinTitel2 = 1
        MinTitel3 = 1
        
        ' Gehe alle Spalten von G bis CR durch
        For Titel = 7 To AnzahlSpalten
            ' Berechne die Summe der aktuellen Spalte plus den folgenden 7 Spalten
            Summe = Application.WorksheetFunction.Sum(StartZelle.Resize(, 8))
            
            ' Wenn die aktuelle Summe kleiner als die aktuell kleinste Summe ist, dann aktualisiere die Werte
            If Summe  MinSumme1 Then
                MinSumme3 = MinSumme2
                MinSumme2 = MinSumme1
                MinSumme1 = Summe
                
                MinTitel3 = MinTitel2
                MinTitel2 = MinTitel1
                MinTitel1 = Titel - 6 ' Korrigiere den Titel, da wir in Spalte G starten
            ElseIf Summe  MinSumme2 Then
                MinSumme3 = MinSumme2
                MinSumme2 = Summe
                
                MinTitel3 = MinTitel2
                MinTitel2 = Titel - 6 ' Korrigiere den Titel, da wir in Spalte G starten
            ElseIf Summe  MinSumme3 Then
                MinSumme3 = Summe
                
                MinTitel3 = Titel - 6 ' Korrigiere den Titel, da wir in Spalte G starten
            End If
            
            ' Verschiebe die Startzelle um eine Spalte nach rechts
            Set StartZelle = StartZelle.Offset(, 1)
        Next Titel
        
        ' Gib die Ergebnisse aus
        ws.Range("Da2").Value = MinTitel1
        ws.Range("Db2").Value = MinSumme1
        ws.Range("Da3").Value = MinTitel2
        ws.Range("Db3").Value = MinSumme2
        ws.Range("Da4").Value = MinTitel3
        ws.Range("Db4").Value = MinSumme3
    End With

End Sub

Ich bin schon irgendwie deshalb fix & foxi
https://www.herber.de/bbs/user/158448.xlsb
Kann ein Experte bitte mal drauf schauen und (wenn er durchblickt) mir die Lösung schreibt?!

Gruß
Fred

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba- spielmin. finden, mit wenigsten
26.03.2023 18:38:53
Fred
ausgang meiner Verwirrung war
Sub a_kleinst()

Dim StartTitel As Integer
Dim EndTitel As Integer
Dim Summe As Double
Dim MinSumme As Double
Dim TitelMitMinSumme As Integer
Dim StartZelle As Range

StartTitel = 1
EndTitel = 82
MinSumme = 1E+100

Set StartZelle = Worksheets("1Hz").ListObjects("tab_1Hz").ListColumns(7).Range

For Titel = StartTitel To EndTitel

    Summe = WorksheetFunction.Sum(StartZelle.Resize(, 8))
    
    If Summe  MinSumme Then
        MinSumme = Summe
        TitelMitMinSumme = Titel
    End If
    
    Set StartZelle = StartZelle.Offset(0, 1)
Next Titel

Worksheets("1Hz").Range("DA2").Value = TitelMitMinSumme
Worksheets("1Hz").Range("DB2").Value = MinSumme

End Sub

welches die Minute mit wenigsten Treffern anzeigt,- einschließlich der folgenden 7 Minuten
Gruss
Fred


Anzeige
AW: vba- spielmin. finden, mit wenigsten
26.03.2023 18:57:43
Fred
danach dieses Makro:
Sub a_5kleinst()

Dim StartTitel As Integer
Dim EndTitel As Integer
Dim Summe As Double
Dim MinSumme(1 To 5) As Double
Dim TitelMitMinSumme(1 To 5) As Integer
Dim StartZelle As Range
Dim i As Integer
Dim j As Integer

StartTitel = 1
EndTitel = 82

Set StartZelle = Worksheets("1Hz").ListObjects("tab_1Hz").ListColumns(7).Range

For Titel = StartTitel To EndTitel
Summe = WorksheetFunction.Sum(StartZelle.Resize(, 8))

For i = 1 To 5
    If Summe  MinSumme(i) Then
        For j = 5 To i + 1 Step -1
            MinSumme(j) = MinSumme(j - 1)
            TitelMitMinSumme(j) = TitelMitMinSumme(j - 1)
        Next j
        MinSumme(i) = Summe
        TitelMitMinSumme(i) = Titel
        Exit For
    End If
Next i

Set StartZelle = StartZelle.Offset(0, 1)
Next Titel

For i = 1 To 5
Worksheets("1Hz").Cells(i + 1, "DA").Value = TitelMitMinSumme(i)
Worksheets("1Hz").Cells(i + 1, "DB").Value = MinSumme(i)
Next i

End Sub
das ergab immer nur den Wert "0"


Anzeige
AW: vba- spielmin. finden, mit wenigsten
26.03.2023 19:13:50
Fred
Ist erledigt!
In meinem überarbeiteten Makro habe ich zwei Hauptänderungen vorgenommen:

Ich habe Arrays für die Werte von "MinSumme" und "TitelMitMinSumme" erstellt, um die fünf kleinsten Werte speichern zu können. Weil ja vorher nur eine einzelne Variable für "MinSumme" und "TitelMitMinSumme" verwendet wurde.

Ich habe dann eine Schleife hinzugefügt, die durch die fünf kleinsten Werte von "MinSumme" iteriert und für jeden Wert den entsprechenden Titel in "TitelMitMinSumme" speichert. Wenn ein neuer Wert gefunden wird, wird er in das Array an der entsprechenden Stelle eingefügt, und die anderen Werte werden entsprechend verschoben, um Platz für den neuen Wert zu machen. Diese Änderungen machten es möglich, die fünf kleinsten Werte und die zugehörigen Titel korrekt zu speichern und in die Spalten "DA" und "DB" auszugeben.
Sub a_5kleinst()


Dim StartTitel As Integer
Dim EndTitel As Integer
Dim Summe As Double
Dim MinSumme(1 To 5) As Double
Dim TitelMitMinSumme(1 To 5) As Integer
Dim i As Integer
Dim j As Integer
Dim StartZelle As Range
StartTitel = 1
EndTitel = 82

For j = 1 To 5
    MinSumme(j) = 1E+100
Next j

Set StartZelle = Worksheets("1Hz").ListObjects("tab_1Hz").ListColumns(7).Range

For Titel = StartTitel To EndTitel
    Summe = WorksheetFunction.Sum(StartZelle.Resize(, 8))

    For i = 1 To 5
        If Summe  MinSumme(i) Then
            For k = 5 To i + 1 Step -1
                MinSumme(k) = MinSumme(k - 1)
                TitelMitMinSumme(k) = TitelMitMinSumme(k - 1)
            Next k
            MinSumme(i) = Summe
            TitelMitMinSumme(i) = Titel
            Exit For
        End If
    Next i

    Set StartZelle = StartZelle.Offset(0, 1)
Next Titel

For i = 1 To 5
    Worksheets("1Hz").Cells(i + 1, "DA").Value = TitelMitMinSumme(i)
    Worksheets("1Hz").Cells(i + 1, "DB").Value = MinSumme(i)
Next i
End Sub

Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige