Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1956to1960
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

makro - spalten finden, mit minimalsten Werten

makro - spalten finden, mit minimalsten Werten
18.12.2023 21:53:09
Fred
Hallo Excel-Experten,
ich habe mir da ein Makro gebastelt,- und verbastelt.
Ich habe eine Tabelle mir u.a. mit den SpaltenTiteln 1,2,3 .... 90
die Werte stehen ab der 8 Zeile
Es soll ermittelt werden, welche 10 nacheinander folgende Spalten die kleinste Summe beinhaltet.,- aus dem Datenbereich G8 :CR letzte Zeile
Eintrag in AM1 = die ermittelten Spalten
Eintrag in Q1 = minimalste Summe

Mein bisheriges Konstrukt:
Sub FindeMinSummenSpalten()

Dim ws As Worksheet
Dim dataRange As Range
Dim startColumn As Integer
Dim minSum As Double
Dim minSumColumns As Range
Dim minSumTitle As String
Dim minSumValue As Double

Set ws = ThisWorkbook.Sheets("1Hz")
Set dataRange = ws.Range("G8:CR" & ws.Cells(ws.Rows.Count, "G").End(xlUp).Row)

' Variablen initialisieren
minSum = WorksheetFunction.Sum(dataRange.Rows(1))
Set minSumColumns = dataRange.Columns(1).Resize(, 10)

' Durch jeden Satz von 10 Spalten iterieren
For startColumn = 1 To dataRange.Columns.Count - 9
Dim currentSum As Double
Set currentColumns = dataRange.Columns(startColumn).Resize(, 10)
currentSum = WorksheetFunction.Sum(currentColumns.Rows(1))

' Überprüfen, ob die aktuelle Summe kleiner als die minimale Summe ist
If currentSum minSum Then
minSum = currentSum
Set minSumColumns = currentColumns
End If
Next startColumn


minSumTitle = ws.Cells(7, minSumColumns.Column).Value & " bis " & ws.Cells(7, minSumColumns.Column + 9).Value

minSumValue = WorksheetFunction.Sum(minSumColumns.Rows(1))

ws.Range("AM1").Value = minSumTitle
ws.Range("AQ1").Value = minSumValue
End Sub


Kann ein Experte bitte mal auf die Beispielmappe schauen und mir eventuell eine Lösung vorschlagen?!
https://www.herber.de/bbs/user/165272.xlsb

Gruss
Fred



4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: makro - spalten finden, mit minimalsten Werten
18.12.2023 23:30:40
Fred
Pfff.....
ich glaube, nun habe ich es passend.
Im ursprünglichen Makro wurde ja nur die erste Zeile der currentColumns-Bereichs berücksichtigt "(currentColumns.Rows(1).Value)". Das führte zu falschen Ergebnis.
In der neuen Version wird nun durch jede Zeile der aktuellen 10 Spalten iteriert "(For Each currentRow In currentColumns.Rows)", während im ursprünglichen Makro nur die erste Zeile dieser Spalten betrachtet wurde "(For Each currentRow In currentColumns.Rows(1))"
Sub FindMinSumColumns()

Dim ws As Worksheet
Dim dataRange As Range
Dim startColumn As Integer
Dim minSum As Double
Dim minSumColumns As Range
Dim minSumTitle As String
Dim minSumValue As Double
Dim currentSum As Double

Set ws = ThisWorkbook.Sheets("1Hz")

Set dataRange = ws.Range("G8:CR" & ws.Cells(ws.Rows.Count, "G").End(xlUp).Row)

' Variablen initialisieren
minSum = WorksheetFunction.Sum(ws.Range("G8:P8").Value)
Set minSumColumns = ws.Range("G8:P8")

' Durch jeden Satz von 10 Spalten iterieren
For startColumn = 1 To dataRange.Columns.Count - 9
Set currentColumns = dataRange.Columns(startColumn).Resize(, 10)
For Each currentRow In currentColumns.Rows
currentSum = WorksheetFunction.Sum(currentColumns.Value)

' Überprüfen, ob die aktuelle Summe kleiner als die minimale Summe ist
If currentSum minSum Then
minSum = currentSum
Set minSumColumns = currentColumns
End If
Next currentRow
Next startColumn

minSumTitle = ws.Cells(7, minSumColumns.Column).Value & " bis " & ws.Cells(7, minSumColumns.Column + 9).Value
minSumValue = minSum

ws.Range("AM1").Value = minSumTitle
ws.Range("AQ1").Value = minSumValue
End Sub

.
Anzeige
AW: makro - spalten finden, mit minimalsten Werten
19.12.2023 00:34:23
Fred
... man, man maaan.
Es hat sich nun rausgestellt, das das Makro nur die richtigen Ergebnisse ermittelt, wenn in einer der Zellen G8:P8 zum Beispiel der Wert 100 oder andere hohe Zahl eingetragen ist.
Keine Ahnung (davon aber viel) wie ich das richtig löse.
https://www.herber.de/bbs/user/165385.xlsb
Kann mal jemand bitte drauf schauen?!


Gruss
Fred



AW: makro - spalten finden, mit minimalsten Werten
19.12.2023 09:58:46
MCO
Hallo Fred!

Wenn du nicht mehr auf Zeilen prüfen will, kann die Schleife natürlich entfallen.
Außerdem macht es wenig Sinn, den INI-Wert schon aus dem Bereich zu füllen, auch wenn es jetzt dein Ergebnis erstmal nicht beeinflusst hat.

Die Zwischenergebnisse lass ich mal in den Direktbereich schreiben (STRG+G), darin siehst du , dass "1" korrekt ist.

Zusammengefasst sieht das Makro so aus:

Sub FindMinSumColumns()

Dim ws As Worksheet
Dim dataRange As Range
Dim startColumn As Integer
Dim minSum As Double
Dim minSumColumns As Range
Dim minSumTitle As String
Dim minSumValue As Double
Dim currentSum As Double

Set ws = ThisWorkbook.Sheets("1Hz") ' Arbeitsblatt festlegen
Set dataRange = ws.Range("G8:CR" & ws.Cells(ws.Rows.Count, "G").End(xlUp).Row) ' Datenbereich festlegen (letzte Zeile anpassen, wenn nötig)

' Variablen initialisieren
minSum = 999 'WorksheetFunction.Sum(ws.Range("G8:P8").Value) ' Mit der Summe der ersten 10 Spalten initialisieren
Set minSumColumns = ws.Range("G8:P8")

For startColumn = 1 To dataRange.Columns.Count - 9
Set currentcolumns = dataRange.Columns(startColumn).Resize(, 10)
currentSum = WorksheetFunction.Sum(currentcolumns.Value)
Debug.Print currentcolumns.Address(0, 0), WorksheetFunction.Sum(currentcolumns.Value)

' Überprüfen, ob die aktuelle Summe kleiner als die minimale Summe ist
If currentSum minSum Then
minSum = currentSum
Set minSumColumns = currentcolumns
End If
Next startColumn

' Titel der Spalten mit der minimalen Summe erstellen
minSumTitle = ws.Cells(7, minSumColumns.Column).Value & " bis " & ws.Cells(7, minSumColumns.Column + 9).Value
minSumValue = minSum ' Wert der minimalen Summe erhalten

ws.Range("AM1").Value = minSumTitle ' Titel in Zelle AM1 schreiben
ws.Range("AQ1").Value = minSumValue ' Wert in Zelle AQ1 schreiben
End Sub


Gruß, MCO
Anzeige
AW: makro - spalten finden, mit minimalsten Werten
19.12.2023 14:22:20
Fred
Großer Sport, MCO !
Ich saß über ne Stunde an deiner Version ... und bin dann eingenickt (letzten Nächte mit meiner kranken Mutter waren hart ...)
Ich sehe den wesentlichen Unterschied zwischen meiner fehlerhaften und deiner funktionierenden Version in der Initialisierung der Variable minSum. In meinem Konstrukt wird sie mit der Summe der ersten 10 Spalten initialisiert, während in deiner Version eine feste Zahl (999) als Platzhalter verwendet wird. Der korrekte Ansatz besteht wohl darin, die Variable auf einen großen Wert zu initialisieren und dann während der Iteration die tatsächliche Summe zu berechnen, wie es bei Dir umgesetzt ist.
...
Ich habe als erstes im Web gelesen (als ich dein Makro analysieren wollte), das "die iterative Natur von Softwareentwicklung und Fehlerbehebung oft bedeutet, dass verschiedene Ansätze ausprobiert werden müssen, bevor die optimale Lösung gefunden wird" -- wie wahr ...
Vielen, vielen Dank für dein Mühe und Kompetenz!!

Gruss
Fred

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige