Autor: Peter Haserodt  --- Aus Excel Standard - Gruppe: Tutorials

Matrix Station (7) (Endstation) - Oldie but Goldie

Autor: Peter Haserodt - Erstellt: ?      - Letzte Revision: ?Gruppenthema: 7 Folgen 1 2 3 4 5 6 7 Sie sind in Folge:7
Es ist noch nicht allzulange her, da waren Matrizen, vielmehr der Umgang mit Matrizen in Excel, weitgehend unbekannt.
Welche Gewalt Matrixberechnungen in Excel haben, war nur wenigen klar.
Dies war zu einer Zeit, als es noch keine Foren gab und wenn Wissen verteilt wurde, dann in den MS Newsgroups.
Eine Zeit, in welcher jeder schon dankbar war, wenn er ISDN hatte. Mann, wie die Zeit vergeht.

Zu dieser Zeit (ja, man könnte auch beginnen mit: Es war einmal ), schrieb in der MS Newsgroup ein gewisser Peter Dorigo eine Matrixformel, um die Quersumme einer Zahl zu berechnen.
(Peter Dorigo war meines Erachtens einer der Ersten im deutschsprachigen Raum, wenn nicht sogar der Erste, der Matrix in Excel verstand/nutzte)

Ich stand vor der Formel und war einfach nur perplex. Als Programmierer konnte ich mir zwar in etwa vorstellen, was dort passiert aber ich muß gestehen, dass es mich einige Zeit kostete, die Schönheit dieser Formel zu erkennen (und zu verstehen). Hinzukam, dass man sich natürlich noch mit den benutzten Funktionen in der Formel rumschlagen musste aber wenigstens da kamen mir meine VB Kenntnisse zur Hilfe.

Mittlerweile ist die Formel zur Quersumme verkürzt worden (ob zum besseren mag ich hier bezweifeln) aber dies tut der Ursprungsformel keinen Abbruch.

Und so möchte ich diese benutzen, um einen Abschluß in unsere Reise in das Matrixland zu finden und ihnen anhand dieses Kleinods die Lust am Matrix-Tüfteln noch zu versüßen.

Endstation: Ein Oldie im Visier

Aufgabe: Die Quersumme einer Zahl in einer Zelle zu berechnen.
Zusätzliches Handicap: Die Größe - besser die Länge - der Zahl ist unbekannt.
Die Lösung:
 
 ABCD
1    
2 Die ZahlQuersumme 
3 987630 
4 99999954 
5    
Formeln der Tabelle
C3 : {=SUMME(1*TEIL(B3;ZEILE(INDIREKT("1:"&LÄNGE(B3)));1))}
C4 : {=SUMME(1*TEIL(B4;ZEILE(INDIREKT("1:"&LÄNGE(B4)));1))}

Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
 

Die Formel hat es verdient, nochmals dargestellt zu werden:

{=SUMME(1*TEIL(B3;ZEILE(INDIREKT("1:"&LÄNGE(B3)));1))}

Aber wie gehe ich an eine solche Formel ran?
Sowohl beim Verstehen als auch beim Entwickeln gilt: von Innen nach außen.
Was sind denn die Aufgaben der Formel?
Ich muss jede einzelne Ziffer der Zahl ermitteln und diese am Ende summieren.
Klingt einfach und doch so schwer!

Eines kann man sich sofort erarbeiten, die Länge der Zahl.
Diese erhalte ich durch: Länge(B3)

Eine einzelne Ziffer ist auch kein Problem, wenn ich die Teil-Funktion kenne.
Teil(B3;2) gibt mir die zweite Ziffer - Leider aber als Text - da ich ja eine Textfunktion einsetze.
Deswegen muss ich diese noch mit 1 multiplizieren (eine Eigenheit von Excel, das ich einen Text multiplizieren kann und dadurch eine Zahl erzeuge, solange der Text eine Zahl ist - Bitte weitere Fragen dazu an MS ;-)

Die Summe: Das ist einfach, wenn ich jede einzelne Ziffer als Zahl erhalte, kann ich diese auch summieren.
Ich will mich hier auf B3 konzentrieren:

Ich habe die Ziffernfolge: 9876
Jedem ist klar, dass Summe(9;8;7;6) die Quersumme ergibt.
Als Matrix wäre dies : Summe({9;8;7;6})
(Erinnern Sie sich an das Auflösen? Wenn Sie markieren was in den Summenklammern steht, erhalte Sie genau diesen Ausdruck !!!)

Irgendwie muss ich diesen Ausdruck herstellen.
D.h.: Ich muss es schaffen, die Teil-Funktion so einzusetzen, dass diese mir nacheinander die einzelnen Ziffern zurückgibt.
Also Teil(B3;1;1), Teil(B3;2;1) usw... und dies als Matrix.

Hier setzt die Funktion Zeile() ein.
Ich muss das mittlere Argument der Teilfunktion dynamisch erstellen.
Mit Kenntnis der Länge von B3 wäre dies ein kleineres Problem, denn dann könnte ich in unserem Beispiel:
Zeile(1:4) benutzen um die Zahlen 1 bis 4 zu erhalten.
Denn Teil(B3;1,1), Teil(B3;2,1) , Teil(B3;3,1) , Teil(B3;4,1) würden mir das gewünschte liefern.

Aber ich habe ja gesagt, die Länge von B3 ist unbekannt.
Also noch eine Funktion, nämlich Indirekt!
Die erste Ziffer in B3 finde ich auf Position 1 - das ist logisch.
Die letzte Ziffer in B3 finde ich an der Position: Wie lang ist B3? Ist ja auch logisch !!!

Und jetzt das ganze zusammengesetzt ergibt unsere Wundermatrix.
 Peter Haserodt
  • Formelhilfe
  • Makroentwicklung
  • VBA-Programmierung
  • + + + + + + + + +

Ein kleiner Tip: Versuchen Sie eine Lösung mit Hilfsspalten zu entwickeln.
Damit verstehen Sie es noch besser.
Hmm, verstanden?

Oder finden Sie das besser:
 
 ABCDEFG
1       
2 9876     
3       
4  9876 
5  9876 
6  30    
7       
Formeln der Tabelle
C4 : =TEIL($B$2;1;1)
D4 : =TEIL($B$2;2;1)
E4 : =TEIL($B$2;3;1)
F4 : =TEIL($B$2;4;1)
C5 : =C4*1
D5 : =D4*1
E5 : =E4*1
F5 : =F4*1
C6 : =SUMME(C5:F5)
 

Dies überlasse ich nun ihnen.

Eine lange Reise geht zu Ende

Sie wurde länger als ich gedacht habe.
Und ich habe weniger gesagt als ich wollte und mehr als ich sollte.

Hat sie ihnen gefallen? Hat sie ihnen geholfen?

Ich würde mich über ein Feedback freuen.
Fragen stellen im Online-Excel Forum

Neu in Online-Excel: Online-Excel Newsletter


Weitere Artikel der Gruppe: Tutorials Aus Excel Standard
Nach oben