Discussion:
relativ ins vorhergehende Tabellenblatt referenzieren?
(zu alt für eine Antwort)
helge ogan
2005-09-21 23:09:39 UTC
Permalink
Hallo liebe Newsgroup,

ich bin hier nur zu Gast mit meiner Frage, die sicher für euch leicht
zu beantworten ist: Ich möchte von einem Tabellenblatt in ein Feld des
Tabellenblattes verweisen, das dem aktuellen Tabellenblatt voran geht
- unabhängig von dessen Namen. Es geht mir also um die relative
Referenzierung in ein anderes Tabellenblatt.

Geht das?

Ich konnte mir kaum vorstellen, dass diese Frage hier erstmalig
gestellt wird, fand aber trotz einiger Mühen bei Google keine
erschöpfende Antwort. Falls ich euch doch mit einer FAQ blästige freu
ich mich auch über einen Hinweis auf eine Antwortsammlung zu FAQs
hier, in der das vorkommt.

Dank und Gruß
helge
--
http://www.gebaeudefoto.de
Thomas Ramel
2005-09-22 05:04:46 UTC
Permalink
Grüezi helge

helge ogan schrieb am 22.09.2005
Post by helge ogan
ich bin hier nur zu Gast mit meiner Frage, die sicher für euch leicht
zu beantworten ist: Ich möchte von einem Tabellenblatt in ein Feld des
Tabellenblattes verweisen, das dem aktuellen Tabellenblatt voran geht
- unabhängig von dessen Namen. Es geht mir also um die relative
Referenzierung in ein anderes Tabellenblatt.
Geht das?
Das ist (vielleicht entgegen den Erwartungen) nicht ganz einfach.
Es stehen zwei Varianten zur Verfügung; einmal ohne und einmal mit VBA.

ohne VBA:
Definiere die folgenden Namen über
--> Menü 'Einfügen'
--> Name
--> Definieren

--> Namen in der Arbeitsmappe: 'x'
--> Bezieht sich auf: =ARBEITSMAPPE.ZUORDNEN(1+0*JETZT())
--> [Hinzufügen]

--> Namen in der Arbeitsmappe: 'y'
--> Bezieht sich auf: =DATEI.ZUORDNEN(76+0*JETZT())
--> [Hinzufügen]

--> Namen in der Arbeitsmappe: 't'
--> Bezieht sich auf:

=WECHSELN(INDEX(x;VERGLEICH(y;x)-1);LINKS(INDEX(x;1);FINDEN("]";INDEX(x;1)));"'")&"'!"

--> [Hinzufügen]
--> [OK]

Nun kannst Du in einer beliebigen Zelle die folgende Funktion einsetzen:

=WENN(VERGLEICH(y;x)=1;0;INDIREKT(t&"A1"))

Anstelle von 'A1' deinen Bezug einsetzen.


mit VBA:
Kopiere den folgenden Code in ein Modul einer Mappe:

Public Function VorNachTab(rngZelle As Range, _
Optional i As Integer = 1) As Variant
'© ***@mvps.org / 22.07.2005
'liefert den Werte einer Zele aus dem nächten Tabellenblatt
'der Versatz im Index kann über den zweiten Parameter gegeben werden
'Beispiele: =VorNachTab(C2) / VorNachTab(C2;2) / VorNachTab(C2;-2)
Application.Volatile
With Application.Caller.Parent
If .Index + i > .Parent.Sheets.Count Or .Index + i < 1 Then
VorNachTab = CVErr(xlErrRef)
Exit Function
End If
VorNachTab = Worksheets(.Index + i).Range(rngZelle.Address)
End With
End Function


Nun kannst Du die Funktion gemäss den Beispielen im Kommentar verwenden.




Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Alexander Wolff
2005-09-22 06:59:10 UTC
Permalink
Post by Thomas Ramel
Definiere die folgenden Namen über
--> Menü 'Einfügen'
--> Name
--> Definieren
--> Namen in der Arbeitsmappe: 'x'
--> Bezieht sich auf: =ARBEITSMAPPE.ZUORDNEN(1+0*JETZT())
--> [Hinzufügen]
--> Namen in der Arbeitsmappe: 'y'
--> Bezieht sich auf: =DATEI.ZUORDNEN(76+0*JETZT())
--> [Hinzufügen]
--> Namen in der Arbeitsmappe: 't'
=WECHSELN(INDEX(x;VERGLEICH(y;x)-1);LINKS(INDEX(x;1);FINDEN("]";INDEX(x;1)))
;"'")&"'!"
Post by Thomas Ramel
--> [Hinzufügen]
--> [OK]
Nun kannst Du in einer beliebigen Zelle die folgende Funktion
=WENN(VERGLEICH(y;x)=1;0;INDIREKT(t&"A1"))
Anstelle von 'A1' deinen Bezug einsetzen.
Ich erlaube mir, aus Smart Tools Weekly Excel vom 12.4.05 zu zitieren:
[Zitatbeginn]

Flexible 3D-Bezüge für Ihre Formeln
Versionen: Excel 2003, 2002/XP, 2000 und 97

Excel bietet bekanntlich die Möglichkeit, beliebigen Tabellenbereichen Namen
zuzuweisen, so dass Sie Bezüge wie "C10:D55" durch aussagekräftige Namen wie
"Umsatz2000" ersetzen können. Wirklich interessant wird es aber erst, wenn
Sie Namen Formeln oder Konstanten zuweisen, wodurch sich eine Fülle
zusätzlicher Anwendungsmöglichkeiten ergibt. Wir werden in SmartTools Excel
Weekly sicherlich noch öfters darauf eingehen. In diesem Tipp möchten wir
Ihnen zeigen, wie Sie mit Hilfe von Namen ganz einfach einen Bezug auf das
vorhergehende oder das nachfolgende Tabellenblatt herstellen können. Sie
definieren dabei die Namen "Vorher" und "Naechster" und erhalten als
Ergebnis immer den Inhalt der entsprechenden Zelle aus dem vorherigen oder
nächsten Tabellenblatt.

Also zum Beispiel: Ihre Arbeitsmappe besteht aus den Blättern "Tabelle1",
"Tabelle2" und "Tabelle3". Wenn Sie in Zelle A1 von "Tabelle2" die Formel

=Vorher

eingeben, erhalten Sie als Ergebnis den Inhalt von Zelle A1 aus "Tabelle1".
Die Formel

=Naechster

liefert dementsprechend den Inhalt der Zelle A1 aus "Tabelle3".

Um diese Funktionalität in einer Arbeitsmappe nutzen zu können, wählen Sie
das Menü EINFÜGEN-NAME-DEFINIEREN an, geben "Vorher" (ohne
Anführungszeichen) ein, wechseln in das Feld BEZIEHT SICH AUF und erfassen
hier die folgende Formel (am besten per Zwischenablage übernehmen):

=INDIREKT(INDEX(ARBEITSMAPPE.ZUORDNEN(1);
DATEI.ZUORDNEN(87)-1)&"!"&ADRESSE(ZEILE();SPALTE()))

Bestätigen Sie den Vorgang mit HINZUFÜGEN und weisen Sie dem Namen
"Naechster" diese Formel zu:

=INDIREKT(INDEX(ARBEITSMAPPE.ZUORDNEN(1);
DATEI.ZUORDNEN(87)+1)&"!"&ADRESSE(ZEILE();SPALTE()))

Sie können dann das Dialogfeld mit SCHLIEßEN verlassen und in Zukunft aus
jeder beliebigen Zelle durch einfache Eingabe eines der Namen jeweils auf
dieselbe Zelle im vorhergehenden oder nächsten Blatt zugreifen. Interessant
ist das beispielsweise bei der Budgetplanung: Wenn Sie in "Tabelle1" das
Budget des 1. Quartals angelegt haben und in "Tabelle2" das Budget des 2.
Quartals mit exakt demselben Tabellenaufbau anlegen, genügt die folgende
Formel, um den Betrag im 2. Quartal um 25% zu erhöhen:

=Vorher*1,25

Kurz zur Funktionsweise der Formeln in den Namensdefinitionen: Der wichtige
Trick an der Sache ist die Verwendung von ARBEITSMAPPE.ZUORDNEN und
DATEI.ZUORDNEN. Dabei handelt es sich um Funktionen, die Sie in der
Dokumentation von Excel 97 und 2000 vergeblich suchen werden, denn sie
stammen noch aus der Makrosprache der ersten Excel-Versionen bis 4.0. VBA
ist natürlich komfortabler und leistungsfähiger, aber VBA-Anweisungen werden
in Namensdefinitionen nicht akzeptiert. Die alten Makroanweisungen sind nur
noch aus Kompatibilitätsgründen in Excel 97 und 2000 vorhanden, können aber
(obwohl nicht dokumentiert) weiterhin in Namensformeln eingesetzt werden.
Dabei liefert ARBEITSMAPPE.ZUORDNEN(1) den Namen der ersten Tabelle samt
Dateinamen (zum Beispiel [TEST.XLS]Tabelle1) und DATEI.ZUORDNEN(87) die
Nummer der Tabelle, aus der Sie den Wert auslesen möchten.

[Zitatende]
Diese Lösung ergibt relative Bezüge zu den jeweils benachbarten Blättern.
--
Hallo + Gruss Alexander (WinXP Home SP1 - Office 2000 SP3) 6----5----7-2
Thomas Ramel
2005-09-22 09:28:22 UTC
Permalink
Grüezi Alexander

Alexander Wolff schrieb am 22.09.2005
[Zitat ExcelWeekly]
Stimmt; jetzt Wo du es sagst....
Diese Lösung ergibt relative Bezüge zu den jeweils benachbarten Blättern.
...nun hat der OP beide Varianten; einmal dieselbe Zelle und einmal
unabhängig vom 'Standort' der Formel.


Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
helge ogan
2005-09-22 13:33:05 UTC
Permalink
Thomas Ramel <***@MVPs.org> schrieb:

Hallo Thomas,
die Lösung gefällt mir am besten. VBA kenne ich bisher nur aus Access
und ich hake an deiner Formulierung "in ein Modul einer Mappe". Wenn
ich den VB-Editor offne, kann ich dort links
VBA-Project
-> MSxl Objekte
-> Diese Arbeitsmappe
-> Tabellenblatt 1
-> Tabellenblatt 2
usw.

Wenn ich deinen Code in eine dieser Abteilungen einfüge und in die
Zelle, in der ich die Funktion verwenden will

=VorNachTab(AL7; -1)

schreibe, erhalte ich den Fehler #Name?.

Muss dein Code vielleicht woanders hin? Kannst du nach dieser
sparsamen Beschreibung erkennen, wo ich den Fehler mache?

Soweit aber erstmal vielen Dank!!

helge
--
http://www.gebaeudefoto.de
Thomas Ramel
2005-09-22 13:44:33 UTC
Permalink
Grüezi helge

helge ogan schrieb am 22.09.2005
Post by helge ogan
die Lösung gefällt mir am besten. VBA kenne ich bisher nur aus Access
Das reicht vollständig aus.
Post by helge ogan
und ich hake an deiner Formulierung "in ein Modul einer Mappe". Wenn
ich den VB-Editor offne, kann ich dort links
VBA-Project
-> MSxl Objekte
-> Diese Arbeitsmappe
-> Tabellenblatt 1
-> Tabellenblatt 2
usw.
Das sind die Private Klassenmodule der Mappe und der einzelnen
Tabellenblätter.
In unserem Falle werden diese nicht benötigt (und daher nicht 'abgefüllt'),
da die Funktion ja in der gesamten Mappe zur Verfügung stehen soll.
Post by helge ogan
Wenn ich deinen Code in eine dieser Abteilungen einfüge und in die
Zelle, in der ich die Funktion verwenden will
=VorNachTab(AL7; -1)
schreibe, erhalte ich den Fehler #Name?.
Ja, weil er da noch am flachen Ort sitzt.
Post by helge ogan
Muss dein Code vielleicht woanders hin? Kannst du nach dieser
sparsamen Beschreibung erkennen, wo ich den Fehler mache?
Genauso wie in Access, wie Du siehst:
VBA-Editor öffnen und darauf achten, dass die richtige Mappe aktiv ist,
dann im VBA-Editor Einfügen --> Modul und den Code dann 1:1 in diese
geöffnete Fenster kopieren.
Schliesse nun den VBA-Editor mit Alt+F11 und schau im Funktions-Assistenten
unter der Rubrik 'Benutzerdefiniert' nach; dort steht die Funktion jetzt
zur Verfügung, wenn alles richtig gelaufen ist.
Post by helge ogan
Soweit aber erstmal vielen Dank!!
Aber gerne doch - viel Erfolg beim Einbau und der Verwendung.


Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
helge ogan
2005-09-22 18:04:47 UTC
Permalink
Post by Thomas Ramel
dort steht die Funktion jetzt
zur Verfügung, wenn alles richtig gelaufen ist.
Toll! Jetzt geht's. Danke nochmal, auch Alexander, ihr habt mir sehr
geholfen!

helge
--
http://www.gebaeudefoto.de
Thomas Ramel
2005-09-23 05:35:26 UTC
Permalink
Grüezi helge

helge ogan schrieb am 22.09.2005
Post by helge ogan
Post by Thomas Ramel
dort steht die Funktion jetzt
zur Verfügung, wenn alles richtig gelaufen ist.
Toll! Jetzt geht's. Danke nochmal, auch Alexander, ihr habt mir sehr
geholfen!
Fein; es freut uns, wenns dich weiter gebracht hat - vielen Dank auch fürs
Feedback.



Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Loading...