Spaltensumme als Matrixformel - die Berechnung des Nettobarwerts einer Tabelle
Gepostet am: Jan 31, 2011 10:56:15 AM
Wer die Spaltensumme einer Matrix bilden möchte kann ja bekanntlicherweise die Summe über die einzelnen Spalten bilden und diese nach rechts ziehen. Soweit die Standardlösung. Aber es geht auch mit sogenannten Matrixformeln
"normale" Matrixlösung
Zelle
A3-C3
A4-C4
Formel
{=$A$1:$C$1+$A$2:$C$2}
{=SUMME(INDEX($A$1:$C$2;;SPALTE($1:$1)))}
Achtung, Matrixformel enthalten!
Die geschweiften Klammern{} werden nicht eingegeben.
Verlassen Sie den Zelleneditor mit Strg+Shift + Enter, statt Enter alleine.
Die erste Lösung dieser zwei Lösungsvorschläge kann bei größeren Matrizen zu sehr langen Eingaben führen, da jede Zeile der Matrix eigens eingegeben werden muss. Die zweite Lösung hat in meinen Augen den Nachteil, dass sie nicht sonderlich leicht lesbar ist und die vielen Klammern leicht zu Fehlern führen. Aus diesem Grund habe ich entsprechende Matrix-Formeln für die Spaltensumme und Zeilensumme entwickelt:
VBA-Formeln
Public Function SpaltenSumme(myRange As Range, Optional btrans As Boolean = False) As Variant Dim iCol As Integer Dim Ergebnis() As Double ReDim Ergebnis(myRange.Columns.Count - 1) For iCol = 1 To myRange.Columns.Count Ergebnis(iCol - 1) = Application.WorksheetFunction.Sum(myRange.Columns(iCol)) Next If btrans = False Then SpaltenSumme = Ergebnis() Else SpaltenSumme = Application.WorksheetFunction.Transpose(Ergebnis()) End If End Function Public Function ZeilenSumme(myRange As Range, Optional btrans As Boolean = True) As Variant Dim iRow As Integer Dim Ergebnis() As Double ReDim Ergebnis(myRange.Rows.Count - 1) For iRow = 1 To myRange.Rows.Count Ergebnis(iRow - 1) = Application.WorksheetFunction.Sum(myRange.Rows(iRow)) Next If btrans = True Then ZeilenSumme = Application.WorksheetFunction.Transpose(Ergebnis()) Else ZeilenSumme = Ergebnis() End If End Function
Beispiele für die Anwendung: [Investitionsrechnung - Bruttomethode, stark verkürzt durch Spaltensumme]