Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Maximumsumme von Spaltenwerten
#1
Servus,

ich habe folgendes Problem und hoffe jemand kann mir dabei weiterhelfen.
Es geht um Tabellen, die mehr Zeilen als Spalten beinhalten.
Zum einfacheren Verständnis sagen wir mal eine 20 *10 Matrix.

Jetzt soll die gößtmögliche Summe aus jeweils einem Wert aus jeder Spalte gebildet werden, wobei jedoch aus jeder Zeile auch nur ein Wert vorkommen kann.

Einfaches Summieren der Spaltenmaxima ist also nicht möglich, da in einer Zeile mehrere Spaltenmaxima vorkommen könnten.

Ich hoffe ich hab es verständlich genug erklärt.


Grüße
Antworten Top
#2
Hallo,

eine ganz einfache Variante wäre diese Formel (bei einem auszuwertenden Bereich von A2:C4 - geprüft):

PHP-Code:
=SUMME(MAX(A2:A4);MAX(B2:B4);MAX(C2:C4)) 

Vermutlich gibt es noch kürzere Lösungen mit Index und Matrixformeln usw.

Grüße

Norbert
Antworten Top
#3
Das beinhaltet aber noch nicht die Bedingung, dass nur ein Wert aus einer Zeile angenommen werden darf.
Antworten Top
#4
=SUMME(NACHZEILE(A1:J20;LAMBDA(arr;MAX(arr))))
=SUMME(NACHSPALTE(A1:J20;LAMBDA(arr;MAX(arr))))


selbsterklärend, nur mit der 365 Insider Beta

Deine Limitation, dass ein zu summierender Wert sowohl in seiner Zeile wie auch seiner Spalte allein steht, funktioniert nur bei quadratischen Matrizen (also 10x10 oder 20x20, aber nicht 10x20). Deshalb folge ich Dir nicht.

0 1 0 0
1 0 0 0
0 0 0 1
0 0 1 0
wäre dann erlaubt,

0 1 0 0
1 0 0 0
0 1 0 0
0 0 1 0
nicht! (1 stellt einen zu summierenden Wert, also hier ein erlaubtes "Folgemaximum", dar)
Antworten Top
#5
Moin

Wie wäre es mit einem konkreten Beispiel mit Wunschergebnis?
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#6
6 2 4            
3 2 5
2 3 7
3 2 8
3 6 9

Hab mal ne 5x3 Matrix hier genommen.
Nehmen wir mal als Beispiel, wir haben 5 Personen, welche als die Zeilen dargestellt werden und wir haben 3 Tätigkeiten, welche durch die Spalten dargestellt werden.

Die Matrixeinträge stellen nun dar, wie Person X in Tätigkeit Y eine Leistung abruft und je höher die Zahl, desto besser.

Ich versuche jetzt die Kombination zu finden, wo die größtmögliche Leistung abgerufen wird, wobei eine Tätigkeit nur einmal ausgeübt wird und eine Person nur eine Tätigkeit zur gleichen Zeit ausüben kann. Daher soll nur ein Wert aus je einer Zeile und einer Spalte genommen werden.

In dem obrigen Beispiel wäre es damit: 6+6+8=20

6 2 4
3 2 5
2 3 7
3 2 8
3 6 9
Antworten Top
#7
Hi

Um sicher die beste Kombi zu finden gibt es eigentlich nur die Möglichkeit alle Kombinationen zu testen. 
Ob überhaupt und in welcher Zeit das Möglich ist, hängt von der Anzahl der Kombi's ab. Also wie groß ist deine Matrix denn nun.

(VBA oder Solver bieten sich hier an)

Gruß Elex
Antworten Top
#8
Hallo,

hier trage ich noch eine VBA - Lösung nach:

Code:
Sub Makro_MaxSumme()
Dim x As Long
Dim y As Long
Dim j As Long
Dim k As Long
Dim z As Long
Dim zl As Long
Dim s As Long
Dim Bereich As Range
'dieser Test läuft im der Zahlenmatrix von A2 (s. "z") bis letzte benutzte Spalte bis zur Zeile 13 (s."zl")
    z = 2 'erste Zeile der Matrix - ggf. korrigieren
    zl = 13 ' letzte Zeile der Matrix an die Liste anpassen
    s = 1 'Spalte
    k = zl + 1 'Unter der lezten Zeile werden die Max - Ergebnisse eingetragen
        j = Tabelle1.Cells(z, Columns.Count).End(xlToLeft).Column
        Tabelle1.Rows(z & ":" & zl).EntireRow.Hidden = False
        Do Until s = j + 1
        x = Tabelle1.Application.WorksheetFunction.Max(Range(Cells(z, s), Cells(zl, s)).SpecialCells(12))
            Tabelle1.Cells(k, s).Value = x
                For y = z To zl
                    Select Case True
                    Case Tabelle1.Cells(y, s).Value = x
                    Tabelle1.Rows(y).EntireRow.Hidden = True
                    Case Else
                    End Select
                    Next
                s = s + 1
        Loop
    s = 1
    Set Bereich = Tabelle1.Range(Cells(k, s), Cells(k, j + 1))
    'die Summe = Ergebnis wird in die Zelle A15 geschrieben:
    Tabelle1.Range("A15").Value = Application.WorksheetFunction.Sum(Bereich)
End Sub

Der Code durchläuft einfach jede Spalte und findet die Max - Zahl, - anschließend blendet er diese Zeile aus und durchläuft die nächste Spalte, findet wieder die Max - Zahl ohne Berücksichtigung der ausgeblendeten Zeile und blendet diese Zeile ebenfalls aus bis zur letzten benutzen oder definierten Spalte. Anschließend werden die Max - Zahlen summiert und in die gewünschte Zelle (hier "A15") eingetragen. Meine Test - Matrix im Beispiel umfasst die Zellen "A2 bis F13". Den Code habe ich getestet. Die entsprechenden Zeilen und ggf. Spalten müssen bei den Variablen auf Deine Tabelle angepasst werden, ebenso die verwendete Tabelle1.

Grüße
Norbert
Antworten Top
#9
@Norbert: Wenn Du für den ersten Treffer eine 8 hast und sich in den ausgeblendeten Zellen eine 7 verbirgt und die nächste noch zulässige Zeile/Spalte als Maximum eine 6 ausweist, bist Du nur einen denkbaren Pfad im Ergebnisraum gegangen. Die anderen Pfade bleiben versperrt.
Antworten Top
#10
Hallo LCohen,

danke, dass Du Dir die Mühe gemacht hast den von mir geposteten Code anzuschauen. - Für mich sind solche Feedbacks sehr interessant, da ich noch ein blutiger Anfänger in Sachen VBA bin. Nun habe ich mir die Vorgabe von Erikzo noch einmal genau durchgelesen und meine, dass Du vermutlich Recht hast mit Deiiner Aussage:
Zitat:Jetzt soll die gößtmögliche Summe aus jeweils einem Wert aus jeder Spalte gebildet werden, wobei jedoch aus jeder Zeile auch nur ein Wert vorkommen kann.

Der Code ermittelt zwar die jeweiligen Max - Werte aus jeder Spalte und schließt die Zeile der Ermittlung jeweils für die Ermittlung in der nächsten Spalte aus, wie es vorgegeben war, - das muss aber noch nicht heißen, dass dadurch am Ende die größtmögliche Summe gebildet wird! Hier wüßte ich auf Anhieb nicht, wie dies dann im Code umzusetzen wäre.

Danke dennoch für den Hinweis.

Grüße
Norbert
Antworten Top


Gehe zu:


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