Excel in Zelleformel Tabellenblattindex benutzen statt Tabellenblattname?
Hallo,
ich habe eine Excelmappe mit mehreren Tabellenblättern.
Diese haben natürlich Name wie z.b. "Personal", "Umsatz", "Gewinn"
Wenn ich in eine Zelle eine Formel benutze und auf ein anderes Blatt zugreife dann benötige ich ja den Name z.b. ='Personal'!A1
Ich möchte aber nicht den Namen benutzen sondern den im Hintergrund Festgelegten Namen "Tabelle3" so wie in VBA Tabelle3.Range("A1") statt Worksheet("Personal").Range("A1")
Ist das in den Formeln auch möglich??? Oder gibt es dazu eine VBA-Funktion die das ermöglicht?
3 Antworten
Du kannst dir ja ein Array am Anfang des Programms programmieren, das alle Tabellenblätter der Reihe nach durchgeht und dann immer den neuen Namen abspeichert.
Im Array steht dann
tabelle 1 ------------ Personal
tabelle 2 ------------ Umsatz
tabelle 3------------- Gewinn
Hinterher kannst du dann wieder mit Worksheet(Array[2]).Range("A1") zugreifen auf Tabelle 2, was der Umsatz Tabelle entspricht.
Problem allgemein bei deinem Vorhaben ist, dass wenn jemand in der Excel die Reihenfolge per Drag and Drop vertauscht der Tabellenblätter, dann macht der Code was er will. Tabelle3.Range("A1") wäre dann zum Beispiel Personal, falls Personal dann an dritter Stelle steht.
Das hier: ='Personal'!A1 und das hier Worksheet("Personal").Range("A1") bleibt immer eindeutig.
Das Problem hast du aber schon verstanden oder?
Wenn du eine neue Excel startest, dann steht da zunächst
Tabelle1, Tabelle2, Tabelle3,
Jetzt schreibst du stattdessen
"Personal", "Umsatz", "Gewinn"
Jetzt kommt der böse Benutzer und verschiebt die Reihenfolge nach
"Gewinn", "Personal", "Umsatz"
Damit wäre auch das vertauscht:
Tabelle3, Tabelle1, Tabelle2
(Du siehst weiterhin nur "Gewinn", "Personal", "Umsatz")
Nun willst du eine neue Excelzelle ansprechen und zwar in deiner Schreibweise.
='Tabelle1'!A1
Das wäre ja eigentlich die erste sichtbare Tabelle. Tatsächlich ist es aber durch die vertauschte Reihenfolge nun Tabelle3, die ja am Anfang steht.
Das macht so keinen Sinn falls das gehen würde.
-------------
Mach doch in jedem Tabellenblatt als Überschrift z.B. "Personal" dann sieht es auch jeder welches Blatt gemeint ist und lass das so auf "Tabelle1".
Wir reden gerade aneinander vorbei. Mir geht es nicht um die Position im Reiter. Und nicht um die =Blatt() Funktion. Denn ja, dort würde sich das verschieben, wenn man die Reihenfolge ändert. Aber in VBA bleibt Personal immer "Tabelle3" mit dem Name "Personal" egal wo sie sich befindet. Und meine frage ist lediglich ob ich auf das "Tabelle3" (quasi die ID) in einer Formel die ich in eine Zelle schreibe zugreifen kann. So wie das in VBA möglich ist. Denn somit kann mir egal sein wie wer das Blatt benennt, denn die ID ändert sich nicht.
Kann Dir zwar bei VBA nicht helfen, sehe aber den Sinn nicht, Tabellenzugriffe mit nicht vorhandenen Tabellennamen erzeugen zu wollen.
Das wird nicht gehen, ohne dass Du zusätzlich programmieren wirst, dass Tabellenname XY, Tabelle Nr. 1 usw. sein soll.
Außer Chaos kann ich mir keinen Sinn darin vorstellen.
Warum dann nicht gleich die Standard-Tabellenbezeichnungen (Tabelle1, Tabelle2 usw.) lassen ?
Der Sinn ist einfach.
In meiner Mappe sind aktuell 20 Tabellenblätter die alle komplett gleich aufgebaut sind.
Die sollen in einem Blatt zusammengeführt werden. Im Reiter steht nicht Tab1, Tab2, Tab3 sondern der Projektname, damit man nicht ewig suchen musst.
Es kommen aber auch neue Tabellenblätter hinzu.
Deshalb will ich einfach eine Formel like =Tabelle1!A1, denn das kann ich beliebig nach untenziehen und mache aus der 1 ne Variable und dann zeih ich das nur nach unten und führe alle Daten zsm.
Das mache ich bis Tabelle50!A1, denn wenn ein neues Blatt angelegt wird, werden die Daten automatisch gezogen. Ich kann aber ein Projektnamen nicht "vorhersehen". Ich müsste bei jedem neuen Projekt selber in den Mappe und die Formel =ProjektXYZ!A1 anlegen.
Habe selbst eine Lösung gefunden. Ich habe eine Funktion geschrieben die das für mich macht.
=SHEETNAME(3) würde hier "Personal" ausgeben. Zudem ist es egal an welcher Position das Blatt "Personal" steht. Ob am Anfang oder am Ende, die 3 ist immer Personal, da es das 3. erstellte Blatt der Mappe ist/war.
Function SHEETNAME(TabIndex)
On Error Resume Next
Dim TabName(200) As Variant
TabName(1) = Tabelle1.Name
TabName(2) = Tabelle2.Name
TabName(3) = Tabelle3.Name
TabName(4) = Tabelle4.Name
TabName(5) = Tabelle5.Name
TabName(6) = Tabelle6.Name
TabName(7) = Tabelle7.Name
TabName(8) = Tabelle8.Name
TabName(9) = Tabelle9.Name
TabName(10) = Tabelle10.Name
TabName(11) = Tabelle11.Name
TabName(12) = Tabelle12.Name
TabName(13) = Tabelle13.Name
TabName(14) = Tabelle14.Name
TabName(15) = Tabelle15.Name
''...bis Beliebig
If TabIndex > 0 Then
SHEETNAME = TabName(TabIndex)
End If
End Function
ich möchte nicht in VBA den Namen weglassen sondern ich würde die Bezeichnung in einer Zelle in einer Formel verwenden. Also statt in Zelle B1 ='Personal'!A1 zu schreiben, möchte ich ='Tabelle3'!A1 schreiben, ohne den Namen im Reiter des Blattes zu ändern.