Frage von kalio, 71

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.

Expertenantwort
von Ninombre, Community-Experte für Excel, 32

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.

Expertenantwort
von Oubyi, Community-Experte für Excel, 36

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.

Kommentar von Oubyi ,

P.S.: Konnte nochmal kurz 'reinschauen.
@Ninombre (DH!) hat meinen angedachten Lösungsweg schon sehr gut umgesetzt und erklärt.

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 42

Versuch die Zellen in den Formeln mit $ zu fixieren (Bsp. $A$1) oder verwende die Funktion INDIREKT.

Kommentar von kalio ,

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.

Kommentar von Suboptimierer ,
=Tabelle1!$A$17
=INDIREKT("Tabelle1!A17")

(ungetestet)

Kommentar von kalio ,

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.

Kommentar von Suboptimierer ,

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")
Kommentar von kalio ,

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?


Kommentar von Suboptimierer ,

Was bekommst du denn für eine Fehlermeldung?
Was genau hast du versucht?

Kommentar von kalio ,

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.

Kommentar von Suboptimierer ,

Und welche Fehlermeldung bekommst du?
Kannst du testhalber die Datei mal als .xlsm-Datei speichern?

Kommentar von kalio ,

#Name?

Kommentar von Suboptimierer ,

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.

Kommentar von kalio ,

ist das die Exel-Arbeitsmappe mit Makros?

Kommentar von kalio ,

ich glaub, das ist mir zu hoch, ich hab keine Ahnung von Makros und programmieren, schade aber trotzdem Danke für die Hilfe

Kommentar von Suboptimierer ,

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?

Kommentar von Ninombre ,

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.

Kommentar von Suboptimierer ,

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.

Antwort
von kalio, 29

Hallo Subotimierer, ich hab jetzt das mit dem Makro versucht, aber es funktioniert leider nicht

Antwort
von jetzertle, 37

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.

Antwort
von kalio, 26

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.

Keine passende Antwort gefunden?

Fragen Sie die Community