Archiv des LibreOffice- und OpenOffice.org-Wiki

[ÜberSicht] [TitelIndex] [WortIndex] [SeiteFinden

Editieren

Um eine Zelle oder deren Inhalt anzusprechen, benutzt man normalerweise die konkrete Zelladresse, also etwa E13 bzw. $E$13. Nicht immer ist diese Adresse bekannt, bzw. sie hängt von bestimmten Faktoren ab.

Calc bietet zwei Funktionen an, mit denen man flexibel Zelladressen ansprechen kann: VERSCHIEBEN und INDIREKT. Meist benötigt man zusätzlich weitere Funktionen, um Zeilen-, Spalten-, Tabellen-Informationen abzurufen und Verkettungs-Funktionen, um Zelladressen zusammenzusetzen.

1. Das "Zellfenster" VERSCHIEBEN()

Mit der Funktion VERSCHIEBEN bezieht man sich auf eine Zelle, welche ausgehend von einer Bezugszelle um eine bestimmte Anzahl Zeilen und/oder Spalten vesetzt ist. Sowohl positive als auch negative Verschiebungswerte sind möglich.

1.1. Auf den Inhalt einer Zelle zugreifen, die sich in einem bestimmten Abstandsverhältnis zu einer Bezugszelle befindet

A

B

C

D

E

F

1

1

9

17

25

33

41

2

2

10

18

26

34

42

3

3

11

19

27

35

43

4

4

12

20

28

36

44

5

5

13

21

29

37

45

6

6

14

22

30

38

46

7

8

28

=VERSCHIEBUNG(A1;3;3)

9

17

=VERSCHIEBUNG(E6;-5;-2)

1.2. Ganze Zell-Bereiche bearbeiten, die in einem bestimmten Abstandsverhältnis zu finden sind

VERSCHIEBUNG hat noch zwei weitere Parameter, die im Zusammenenspiel mit anderen Funktionen interessant sind: Höhe und Breite. Damit bezieht sich die Verschiebung nicht nur auf eine einzelne Zelle, sondern auf einen Zellbereich, der am Verschiebepunkt beginnt und eine bestimmte Anzahl Zellen hoch und breit ist.

A

B

C

D

E

F

1

1

9

17

25

33

41

2

2

10

18

26

34

42

3

3

11

19

27

35

43

4

4

12

20

28

36

44

5

5

13

21

29

37

45

6

6

14

22

30

38

46

7

8

252

=SUMME(VERSCHIEBUNG(A1;2;2;3;3))

9

252

=SUMME(C3:E5)

10

1

=ZÄHLENWENN(VERSCHIEBUNG(A1;2;2;3;3);20))

11

1

=ZÄHLENWENN (C3:E5)

1.3. Dito, aber ausgehend von der aktuellen Zelle

Im vorigen Beispiel haben wir als Bezugspunkt eine konkrete Zelladresse (A1) mitgegeben. Stattdessen kann man natürlich auch diese Bezugs-Zelladresse mit weiteren Funktionen zusammensetzen.

Zum Beispiel liefert: =SUMME(VERSCHIEBUNG(INDIREKT(ADRESSE(ZEILE();SPALTE()));-7;3;3;3)) die Summe eines 3x3 Zellen grossen Bereichs, der 7 Zeilen oberhalb und 3 Spalten rechts der aktuellen Zelle beginnt.

2. INDIREKT() auf eine Zelle zugreifen

2.1. Auf den Inhalt einer Zelle zugreifen, deren Adresse als Text in einer bekannten Zelle steht

INDIREKT erwartet die Nennung einer Zelladresse, um deren Inhalt zurückzugeben. Allerdings ergibt die Schreibweise =INDIREKT("D1") wenig Sinn, da man ja genausogut =D1 schreiben kann. Der Sinn von INDIREKT erschließt sich erst, wenn die Zelladresse – im Beispiel D1 – nicht direkt übergeben wird, sondern zum Beispiel aus einer anderen Zelle gelesen oder mittels weiterer Funktionen zusammengesetzt wird.

Wenn also die Zelladresse – immer noch D1 aus unserem Beispiel – als Textstring z.B. in A1 steht, so würde man INDIREKT so formulieren:
=INDIREKT(A1)
Das Ergebnis ist dann der Wert aus Zelle D1.

A

B

C

D

1

D1

17

25

33

2

3

33

=INDIREKT(A1)

2.2. Eine Zelle in einem definierten Abstand von der aktuellen Zelle

Mit INDIREKT ist es auch möglich, eine Verschiebung zu definieren, die von der aktuellen Zelladresse ausgeht. Dazu muss zunächst die aktuelle Adresse ermittelt werden:

=ADRESSE(ZEILE();SPALTE())

Die Verschiebung wird nun definiert, indem die aktuelle ZEILE und die aktuelle SPALTE um einen Korrekturwert verändert wird:
SPALTE()+/-Korrekturwert
ZEILE()+/-Korrekturwert.

Die ganze Formel heißt dann z.B.:

=INDIREKT(ADRESSE(ZEILE()-3;SPALTE()+5))

und liefert den Inhalt derjenigen Zelle, die 3 Zeilen weiter oben und 5 Spalten weiter rechts als die aktuelle Zelle steht.

2.3. Eine zu verwendende Zelladresse mittels VERKETTEN() zusammensetzen

Auch mit Text-Funktionen kann eine Bezugsadresse für INDIREKT zusammengestellt werden.

2.3.1. Innerhalb einer Datei

=INDIREKT(VERKETTEN("A";"1"))

liefert den Inhalt von Zelle A1 der aktuellen Tabelle.

=INDIREKT(VERKETTEN("Tabelle3.";"A";"1"))

liefert den Inhalt von Zelle A1 der Tabelle3.

2.3.2. Datei-übergreifend

Auf den Inhalt einer Zelle aus einer anderen Datei kann man ebenfalls mit INDIREKT zugreifen:

=INDIREKT("'file:///c:/Verzeichnis/Datei.sxw'#$Tabelle1.A1")

bzw. sie zusammensetzen:

Datei: Versand.sxc

 

Datei: Adressen.sxc

A

B

 

A

B

C

1

Verzeichnis: 

C:/Verzeichnis/

 

1

101

Heinz

Karstr

2

Datei: 

Adressen.sxc

 

2

102

Fritz

Seeweg

3

Tabelle: 

Tab2

 

3

103

Anna

Brühlstr

4

Datei: 

Adressen.sxc

 

4

5

Zelle: 

C3

 

5

6

 

6

7

Brühlstr.

=INDIREKT(VERKETTEN("'file:///";B1;B2;"'#$";B3;".";B4))

 

7

2.3.3. Bereichs-Definition per Formel festlegen

Seit Version 2.0 von OpenOffice.org kann man auch einen Bereich per Formel zusammensetzen:

A

B

C

D

1

45

1

4

7

2

B1

2

5

8

3

D3

3

6

9

Die Formel in A1 summiert einen Bereich, dessen Koordinaten in den Zellen A2 und A3 zu finden sind:

=SUMME(INDIREKT(A2&":"&A3))

2.4. "Ganz absolute" Adressen

Wenn man AbsoluteAdressen in der Art $E$1 definiert, so bedeutet absolut die Bindung an den Zellinhalt, nicht an die Adresse. Wird nachträglich vor Spalte E eine Spalte eingefügt und der Inhalt von E1 rutscht dadurch nach F1, so werden alle Zellbezüge, die bisher auf $E$1 verwiesen, automatisch in $F$1 geändert. Im Normalfall ist das auch so gewünscht.

Es gibt jedoch Fälle, bei denen man das "Zellfenster" absolut fix haben möchte. Verschiebt sich eine Spalte, so soll der Inhalt derjenigen Zelle angezeigt werden, welche an die Stelle von – in unserem Beispiel E1 – rückt.

Die Formel

=INDIREKT("Tabelle1.E1")

bzw.

=INDIREKT(ADRESSE(1;5;4;"Tabelle1"))

liefert immer den jeweiligen Inhalt von Zelle E1 aus Tabelle1, egal wie viele Zeilen/Spalten vor E1 eingefügt oder gelöscht werden.

2.5. Excel®-Kompatibilität

Wenn mit INDIREKT() Zellen einer anderen Tabelle adressiert werden sollen, benötigt OpenOffice.org diese Schreibweise:

=INDIREKT("Tabellenname.A1")

...während in Excel® diese Schreibweise benutzt wird:

=INDIREKT("Tabellenname!A1")

Dies führt zu Kompatibilitätsproblemen, wenn Dateien zwischen diesen Programmen ausgetauscht werden. Wie das gelöst werden kann, erfahren Sie auf der Seite ExcelKompatibilität im Abschnitt Adressierungen.

3. Zell-Positions-Infos

=ZEILE()
Ermittelt die aktuelle Zeile
=SPALTE()
Ermittelt die aktuelle Spalte
=ADRESSE(ZEILE();SPALTE())
Ermittelt die aktuelle Adresse
=TABELLE()
Ermittelt die aktuelle Tabelle

3.1. Flexible Tabellen-Namen

Während man aus ZEILE() plus SPALTE() eine gültige Adresse generieren (z.B. =ADRESSE(ZEILE()+3;SPALTE())+2) und darüber mit INDIREKT auf den Zellinhalt zugreifen kann, ohne eine konkrete Zelladresse zu benutzen, ist es mit der Tabelle nicht so einfach. Die Funktion TABELLE() liefert lediglich die Position der Tabelle innerhalb der Datei, nicht aber den Namen. Den benötigt man aber, um z.B. auf den Inhalt einer Zelle zuzugreifen.

Den Namen der aktuellen Tabelle erhält man über die Funktion ZELLE(). Diese liefert je nach übergebenem Parameter verschiedene Informationen. Der Parameter FILENAME liefert den vollständigen Datei- und Tabellennamen:

=ZELLE("FILENAME")

liefert eine Ausgabe wie:

'file:///home/ich/verweis.ods'#$Tabelle1

Daraus kann man nun mit Textfunktionen den Tabellennamen herausfiltern:

=TEIL(ZELLE("FILENAME");FINDEN("$";ZELLE("FILENAME"))+1;LÄNGE(ZELLE("FILENAME")))

...und für die Verwendung mit INDIREKT() wieder zusammensetzen:

=INDIREKT(VERKETTEN(TEIL(ZELLE("FILENAME");FINDEN("$";ZELLE("FILENAME"))+1;LÄNGE(ZELLE("FILENAME")));".";"A1"))

4. Wie viele Zeilen, Spalten, Tabellen, Bereiche ?

Mit =ZEILEN(C4:H12) oder ZEILEN(Adressen) (wenn ein Name für einen Zellbereich vergeben wurde) wird die Anzahl Zeilen des Bereichs ermittelt.

Mit =SPALTEN(C4:H12) oder SPALTEN(Adressen) (wenn ein Name für einen Zellbereich vergeben wurde) wird die Anzahl Spalten des Bereichs ermittelt.

Mit TABELLEN() wird die Anzahl Tabellen des aktuellen Dokumentes ermittelt.

Auch eine Anzahl Bereiche kann ermittelt werden. Wobei ermittelt nicht der richtige Ausdruck ist. Die Bereiche müssen in der Funktion aufgelistet werden, entweder als Zellbezüge:
=BEREICHE(A1:A3;B1:B4;C1:E2;D3:F4), Ergebnis:4
oder als benannte Zellbereiche oder auch Datenbereiche:
=BEREICHE(Name1;Name2;Name3;Name4;Name5;Name6), Ergebnis: 6.

5. Siehe auch


KategorieCalc


LizenzBedingungen | AnbieterKennzeichnung | DatenschutzErklärung | Stand: 2013-04-28