In der Vorlesung ertönt plötzlich das Wort „klausurrelevant“. Alle erwachen aus dem Tiefschlaf, 200 Kulis klicken, 7 Bierflaschen fallen um, in der letzten Reihe wird ein Lagerfeuer ausgetreten.

Ein bisschen kniffelig war es. Ein bisschen probieren musste ich schon.

Die Aufgabe: in einer Zeile soll ein „x“ an einer oder mehreren Positionen stehen. Die erste Position (von links) soll ermittelt werden und aus einer anderen Zeile (der Überschriftszeile), der entsprechende Wert hierzu angezeigt werden.

Den Wert zu finden, ist nicht schwierig:

=VERGLEICH("x";E165:W165;0)

Den zugehörigen Wert zu ermitteln, auch nicht:

=INDEX($E$162:$W$162;VERGLEICH("x";E165:W165;0))

Da die leeren Zellen einen Fehler erzeugen würden, kann dieser noch abgefangen werden:

=WENNFEHLER(INDEX($E$162:$W$162;VERGLEICH("x";E165:W165;0));"")

Klappt!

Allerdings: In anderen Blöcken werden Zahlen eingetragen. Welche ist die erste Spalte, in der eine Zahl steht?

Die Funktion

=VERGLEICH(">0";E111:S111;0)

versagt jedoch. Allerdings … nach einigen Versuchen:

=VERGLEICH(WAHR;INDEX(ISTZAHL(E109:W109);0);0)

funktioniert! Und man kann die Überschrift suchen über:

=INDEX($E$108:$W$108;VERGLEICH(WAHR;INDEX(ISTZAHL(E109:W109);0);0))

und schließlich:

=WENNFEHLER(INDEX($E$108:$W$108;VERGLEICH(WAHR;INDEX(ISTZAHL(E109:W109);0);0));"")

Da diese Formulare dynamisch per VBA erzeugt werden, stellt es nun keine große Herausforderung mehr dar, diese in VBA-Code umzuwandeln:

.FormulaR1C1 = "=IFERROR(INDEX(R" & intAktuelleZeilenNummer & "C5:R" & intAktuelleZeilenNummer  & "C23,MATCH(""x"",RC[-20]:RC[-2],0)),"""")"

und analog:

.FormulaR1C1 = "=IFERROR(INDEX(R" & intAktuelleZeilenNummer & "C5:R" & intAktuelleZeilenNummer & "C23,MATCH(TRUE,INDEX(ISNUMBER(RC[-20]:RC[-2]),0),0)),"""")"

Bei Hagenbeck gewesen. Drei Stunden im Streichelzoo gestanden – nix passiert! Selbst die dicke Ziege wurde mehr befummelt als ich!

Man muss einfach immer genau hinschauen. Immer!

Ich habe eine Excelliste, in der trage ich Informationen zu meinen Schulungen ein. Ich habe eine Spalte „Stunden außerhalb“, in der ich bislang Texte eingetragen habe wie „2 x 24“ oder „3 x 10“. Nun hätte ich gerne die Summe der Tage ermittelt, also die Zahlen, die vor dem „x“ stehen summiert. Nichts leichter als das:

=LINKS(I351;SUCHEN(„x“;I351)-2)

liefert die Zahlen. Allerdings: steht kein Text in der Zelle, so liefert SUCHEN(„x“;I351) einen Fehler. Der kann bequem mit WENNFEHLER abgefangen werden:

=WENNFEHLER(LINKS(I351;SUCHEN(„x“;I351)-2);““)

Das Ergebnis:

Darauf setzte ich eine Pivottabelle auf und ändere den Vorschlag „ANZAHL“ in „SUMME“:

Eine Fehlermeldung ist die Folge. Vielleicht hängt es mit dem „“ der Funktion WENNFEHLER zusammen? Ich ändere die Formel in:

=WENNFEHLER(LINKS(I351;SUCHEN(„x“;I351)-2);0)

Die leeren Zellen werden mit einer „0“ aufgefüllt. Sieht nicht schön aus. Also ändere ich das Zahlenformat in ein benutzerdefiniertes:

0;-0;;

Und wundere mich erneut. Alles ist weg!

Langsam dämmert es mir: klar – die Funktion LINKS liefert einen Text. Das heißt: der Text „2“ wird durch das benutzerdefinierte Zahlenformat weggeblendet. Und: Excel erkennt keine Zahlen für die Pivottabelle, die summiert werden könnten. Also noch einmal die Formel anpassen. Der Text muss in eine Zahl konvertiert werden: mit WERT, mit „–“ oder mit „*1“

=WENNFEHLER(WERT(LINKS(I351;SUCHEN(„x“;I351)-2));0)

Und dann kann die Pivottabelle auch summieren:

Aktualisieren nicht vergessen!

Sauer macht lustig, der Wald lacht sich tot!

Der Problem mit dem Datum hat mich gestern noch beschäftigt.

In der Zelle D3 steht nichts. Erstaunlicherweise liefert =JAHR(D3) keinen Fehler (wie ich vermutet hätte), sondern 1900. Warum?

Die Antwort: Schreiben Sie in eine Zelle das Datum 05.01.1900. Subtrahieren Sie von diesem Datum die Zahl 1. Setzen die Formel fort. Nach dem 01. Januar 1900 folgt der 00. Januar 1900. Dann ein Fehler:

Und das ist der Grund, warum man von einer leeren Zelle die Jahresinformation auslesen kann. Auch JAHR(0) liefert das Jahr 1900. Steht in der Zelle allerdings ein leerer Text („“) oder #NV, dann ist ein Fehler die Folge:

Das heißt im Umkehrschluss: WENNFEHLER(JAHR(D3);““) fängt keinen Fehler ab, wenn die Zelle D3 nicht gefüllt ist. Lediglich wenn in der Zelle kein Datum, also Text steht. Mit WENNFEHLER kann man diese Information also nicht abfangen.

Heute lebe ich. Morgen putze ich vielleicht.

Ich habe mich heute sehr amüsiert. Ich war in einer großen Firma, die Sie auch kennen. Dort haben mir Mitarbeiter eine große Exceltabelle gezeigt, mit der Bitte, ihnen die Formeln zu erklären und möglicherweise zu verbessern. Das Grundproblem tauchte an sehr vielen Stellen auf: In zwei unterschiedlichen Spalten stehen Datumsangaben. Allerdings: nicht in jeder Zelle.

Es sollen die Datumsdifferenzen berechnet werden. Allerdings nicht Ende – Anfang, da die leeren Zellen ein Ergebnis verfälschen würden. Nun hat ein Kollege – wahrscheinlich über Jahre – verschiedene Formeln eingetragen:

  • =WENN(D2>=1;D2-C2;““)

Ist okay – hier habe ich nichts zu nörgeln.

  • =WENN(D2>=1;D2-C2;“ „)

Das Leerzeichen stört mich; würde ich nicht machen – besser: „“.

  • =WENN(D2>=1;DATEDIF(C2;D2;“d“);““)

Warum einfach, wenn es auch umständlich geht. D2-C2 entspricht DATEDIF(C2;D2;“d“).

  • =WENNFEHLER(D2-C2;““)

Ganz schlecht: D2-C2 liefert keinen Fehler, wenn eine der beiden Zellen leer ist. Das Ergebnis ist beispielsweise -42780.

  • =WENN(ISTFEHLER(D2-C2);““;D2-C2)

Bis Excel 2003 gab es noch nicht die Funktion WENNFEHLER – bis dahin musste man WENN(ISTFEHLER(… schreiben. Falsch und überflüssig!

  • =WENN(UND(C2<>““;D2<>““);D2-C2;““)

Gut: beide Zellen werden überprüft!

Die Funktion ISTZAHL habe ich in der Tabelle nicht gefunden.

Wir haben uns amüsiert, weil das gleiche Problem von einem Anwender auf verschiedene Arten gelöst wurde. Das ist nicht konsistent und auch nicht nachzuvollziehen. Aber man kann ja mal vermuten, was die Ursache des Formelwandels war …