Kann man bei Exel automatisch auf eine bestimmtes Feld des vorherigen Tabellenblatts zugreifen ohne es direkt zu benennnen?
Ich brauche eine Formel für den Dienstplan. Ich kopiere immer die letzte Woche, gebe ihr eine neues Datum und ändere die Dienstzeiten. Aber der Stundenübertrag bezieht sich dann immernoch auf die falsche Woche. Ich brauche also zum Übertragen der +/-Stunden der Vorwoche eine Formel für "Ich bin das gleiche Feld wie A17 in der vorherigen Tabelle (Woche)" also nicht "Ich bin das gleiche Feld wie A17 in Woche A" sondern eine Formel, die einfach auf ein bestimmtes Feld der vorherigen Tabelle (Woche) zugreift, auch nachdem man die Tabelle ausgetauscht hat, damit ich nicht mehr jede Woche 20x manuell eingeben muss, dass er nun nicht mehr auf Woche A zurückgreift sondern auf Woche B.
6 Antworten
Das ist nicht so einfach möglich, da Excel immer einen Bezug benötigt. Du kannst zwar sagen =Tabelle1!$A$17 Du must Excel sagen wie das Tabellenblatt heißt auf das du zugreifen möchtest.
Ich habe das so gelöst, das ich ein Blatt pro Monat habe und die Formel dann einfach Kopiert habe. Auf dem Ersten Blatt habe ich eine Jahresübersicht die auf jedes Tabellenbaltt(Monat) zugreift.
Versuch die Zellen in den Formeln mit $ zu fixieren (Bsp. $A$1) oder verwende die Funktion INDIREKT.
Für mich sieht das so aus als müsste ich da den Namen des Tabellenblatts einfügen, aber genau das soll ja nicht sein, sondern es soll das vorherige Tabellenblatt sein, egal wie es gerade heißt.
Dafür würde ich empfehlen, ein Makro anzulegen.
Function PrevSheet() If ActiveSheet.Index = 1 Then PrevSheet = ActiveSheet.Name Else PrevSheet = Sheets(ActiveSheet.Index - 1).Name End If End Function
Auf A1 des Vorblatts kannst du dann wie folgt zugreifen:
=INDIREKT(prevsheet() & "!A1")
hab das jetzt versucht, aber die Formel funktioniert nicht. Muss ich außer A1 noch irgendwas verändern bzw dazu schreiben. Soll ich in die Klammer nach PrevSheet etwas reinschreiben?
Was bekommst du denn für eine Fehlermeldung?
Was genau hast du versucht?
ich habe unter Entwicklertools ein Makro angelegt wo komplett genau das drinsteht wie im oberen blauen Feld aus Ihrem Kommentar. In das Feld wo der Wert C5 der letzten Woche rein soll, hab ich diese Formel mit "indirekt" rein und nur A1 durch C5 ersetzt. Und ich habe die Makros aktiviert.
Und welche Fehlermeldung bekommst du?
Kannst du testhalber die Datei mal als .xlsm-Datei speichern?
Die Funktion scheint nicht erkannt zu werden. Zeichne mal ein Testmakro auf, in dem du irgendeine Dummyaktion durchführst (beispielsweise Zellbereich auswählen).
Dort wo das Makro erzeugt wird, kopierst du den Quelltext von oben hinein.
Wenn es dann noch nicht läuft, überprüfst du die Makro-Sicherheit
Entwicklertools → Code → Makrosicherh. und achtest nochmal darauf, die Datei als .xlsm gespeichert zu haben und zwar nicht im Netzwerk oder auf einem austauschbaren Datenträger und in keinem Systemverzeichnis.
Kannst du nicht auf jedem Tabellenblatt einfach den Namen des Vorblatts irgendwo hin schreiben?
Wenn du das z. B. in A1 schreibst, dann kannst du auf C5 des Vorblatts mit INDIREKT(A1 & "!" & C5) zugreifen.
Ich meine, musst du das Vorblatt unbedingt dynamisch ermitteln?
Dranbleiben, nicht so schnell hinwerfen...
Wo genau hast Du den Code für die function hinterlegt? Aus meiner Sicht muss er in ein Modul, nicht zu einem Tabellenblatt abgelegt werden.
Also im VBA Editor (nicht auf Makros, sondern Visual Basic klicken)
mit der rechten Maustaste > Einfügen > Modul
Dann darauf achten, dass nicht
sub
end sub
sondern: Function da steht.
Ja genau, die Funktion gehört in ein Modul unter dem VBA-Projekt in den Ordner "Module".
Der einfachste Weg, diese Struktur anzulegen ist, ein Makro aufzuzeichnen. An genau diese Stelle kann man dann den Code von oben kopieren.
Die Eigenschaft mit "vorheriges Datenblatt" geht nur mit einer Nummerierung in der Bezeichnung der Tabellenblätter, zumindest kenne ich sonst nur VBA Lösungen. -> s. Lösung von Suboptimierer
Wenn die Tabellenblätter Woche1, Woche 2 etc. heißen, sollten sie, wie von Oubyi schon angesprochen, am besten in Woche01, Woche02 umbenannt werden. Dann kann man einfach die letzten beiden Stelle des vollständigen Dateinamens abgreifen und -1 rechnen
=RECHTS(ZELLE("dateiname");2)-1
kann man dann bspw. so einbauen, um den Wert aus A1 des vorherigen Woche abzufragen:
=INDIREKT("Woche"&RECHTS(ZELLE("dateiname");2)-1&"!A1";WAHR)
Zwischen 1 und 2stelligen Zahlen zu unterscheiden wird fummelig
=INDIREKT("Woche"&WENN(ISTZAHL(RECHTS(ZELLE("dateiname");2)*1);RECHTS(ZELLE("dateiname");2);RECHTS(ZELLE("dateiname");1))-1&"!A1";WAHR)
Kurze Erläuterung:
wenn die zwei Stellen von rechts eine Zahl darstellen (Woche11) kann man diesen Wert verwenden, ansonsten nur eine Stelle von rechts.
Die Prüfung erfolgt mit ISTZAHL. Die Multiplikation mit *1 ist anscheinend notwendig (zumindest bei mir), weil Excel einen Teil einer anderen Zelle (rechts) sonst als Text interpretiert.
Die Tabellenblätter heißen z.B. 19.09.-23.09.16 Sie haben also ein Datum, sonst finde ich mich ja nicht mehr zurecht.
Wie heißen den die Tabellenblätter genau?
Woche17, Woche18 usw.?
Mit führenden Nullen (Woche01)(wäre besser)?
Dann wüsste ich eine Möglichkeit automatisch von Woche18 auf Woche17 zu verweisen.
Also sag mir genau wie das aufgebaut ist.
Ich kann mich allerdings erst morgen früh wieder melden, muss jetzt weg.
P.S.: Konnte nochmal kurz 'reinschauen.
@Ninombre (DH!) hat meinen angedachten Lösungsweg schon sehr gut umgesetzt und erklärt.
Tut mir leid, aber das verstehe ich nicht. Könntest du mal eine genaue Formel aufschreiben für "Ich bin A17 aus dem vorherigen Tabellenblatt", natürlich ohne das ich das Tabellenblatt konkret benennen muss.