Diagramm dynamisch erweitern
#1
Hallo,

ich möchte ein Diagramm basierend auf einer sich in Intervallen ändernden Tabelle dynamisch anpassen. Bisher sind 10 Werte in der Tabelle und im zugehörigen Diagramm korrekt abgebildet.

In Spalte A wird der Timestamp gelistet, in Spalte B der zugehörige Temperaturwert. In der ersten Zeile befindet sich die Überschrift.

Folgendes habe ich bisher erfolglos versucht:

1. \Formeln \ Namensmanager \ Neu \
=> Name: "mein_Timestamp"
=> Bezieht sich auf: "=BEREICH.VERSCHIEBEN(Tabelle1!$A$2;0;0;ANZAHL2(Tabelle1!$A$2:$A$1000);1)"

2.  \Formeln \ Namensmanager \ Neu \
=> Name: "meine_Temp"
=> Bezieht sich auf: "=BEREICH.VERSCHIEBEN(Tabelle1!$B$2;0;0;ANZAHL2(Tabelle1!$B$2:$B$1000);1)"

Normalerweise müsste sich das zugehörige Diagramm bei einem neuen (elften) Eintrag anpassen. Dies passiert leider nicht. Woran könnte das liegen?

Danke!
Top
#2
Moin

Den Blödsinn mit BEREICH.VERSCHIEBEN() braucht man schon lange nicht mehr.
Mache aus der Liste eine formatierte Tabelle (STRG-T). Wichtig: Es dürfen keine leeren Zeilen enthalten sein.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • Wanderfalke
Top
#3
Danke, shift-del. Das funktioniert soweit.

Wie bekomme ich es hin, dass bei Verringerung der Werte die Tabelle (genauer Tabellenbereich) sich ebenfalls verringern.

Bsp.: Meine o.g. Tabelle hat statt 10 Einträge nur noch 7. Im Moment bleibt der Tabellenbereich bei 10 stehen und das Diagramm skaliert sich nicht zurück.

VG!
Top
#4
Hallo,

die 3 leeren Zeilen in der Tabelle nicht bloß auf leer setzen, sondern entfernen!
(Von links her auf die zu entfernende Tabellenzeile zeigen mit dem Mauszeiger - der Mauszeiger verwandelt sich dabei in einen waagrechten schwarzen Pfeil - dann linke Maustaste drücken - es wird dadurch exakt nur der Zeilenbereich innerhalb der Tabelle markiert - rechte Maustaste drücken - den Befehl zum Löschen von Tabellenzeilen wählen)
Mit lieben Grüßen
Anton.

Windows 10 64bit
Office365 32bit
[-] Folgende(r) 1 Nutzer sagt Danke an EA1950 für diesen Beitrag:
  • Wanderfalke
Top
#5
Hallo Anton,

danke für Deine Antwort.

Allerdings möchte ich dies per Makro durchführen - und hier stehe ich vor dem nächsten Problem:

Wie ermittle ich den letzten Zeileneintrag in einer formatierten Tabelle?  Im Normalfalle funktioniert bspw. dieser Code ohne Probleme:

Sub letzte_zeile()
Dim letzteZeile As Integer
  'Hier wir die letzte Zeile der Spalte A ermittelt
  letzteZeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
  MsgBox letzteZeile
End Sub


VG!
Top
#6
Hallo,

wenn du mit "formatierten" Tabelle eine strukturierte Tabelle meinst, die man zB. mit Strg+T einfügen kann:

Eine solche Tabelle schimpft sich im Excel-VBA als ein Objekt vom Klassentyp "ListObject":
ein solches Objekt besitzt eine Reihe von "Sub"-Objekten, aus denen es zusammengesetzt ist (zB.: ListRows, ListColumns). Diese besitzen wieder Range-Objekte.
Ferner hat es auch einen "Name"

Jedes Arbeitsblatt besitzt eine dazugehörige Auflistung "ListObjects", wobei das einzelne ListObject über seine Nummer (ID) bzw. seinen Namen angesprochen werden kann:
zB. ActiveSheet.ListObjects(1)  oder ActiveSheet.ListObjects("Tabelle1"), falls "Tabelle1" der Name dieser strukt.Tabelle ist (nicht zu verwechseln mit dem Arbeitsblattnamen!!).

Angenommen im aktiven Arbeitsblatt befinde sich nur eine struktur.Tabelle namens "Tabelle1". Diese kann wie vorhin erwähnt angesprochen werden.
Sie besitzt eine Kopfzeile, die sich im Zellbereich ActiveSheet.ListObjects(1).HeaderRowRange befindet.
Sie besitzt Tabellenzeilen ActiveSheet.ListObjects(1).ListRows, deren Anzahl mit ActiveSheet.ListObjects(1).ListRows.Count ermittelt werden können.

Um zB. die letzte Tabellenzeile der struktur.Tabelle namens "Tabelle1" im aktiven Arbeitsblatt zu entfernen, kann man dies über das folgende Makro tun:
Dim lstObj As ListObject
dim lstRow as ListRow, rngZeile as Range
Dim lstZeilen as Long
set lstObj = ActiveSheet.ListObjets("Tabelle1")
lstzeilen = lstObj.ListRows.Count
set lstRow = lstObj.ListRows(lstZeilen)  'Die letzte Tabellenzeile
lstRow.Delete 'Entfernt die letzte Tabellenzeile
Mit lieben Grüßen
Anton.

Windows 10 64bit
Office365 32bit
[-] Folgende(r) 1 Nutzer sagt Danke an EA1950 für diesen Beitrag:
  • Wanderfalke
Top
#7
Hallo EA1950,

besten Dank für deine superverständliche und ausführliche Anleitung! Damit hat es final funktioniert.

VG!
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste