Dynamisches Diagramm "istleer" ignorienen

Arek100

Cadet 4th Year
Registriert
Nov. 2011
Beiträge
75
Guten Morgen Experten,

nach langen suchen und probieren habe ich es geschafft ein dynamisches Anzeigen in einem Diagramm zu verwirklichen (3 Tage ;))

Die Daten werden aus verschieden Tabellen in einer Tabelle zusammengefasst und aus dieser Tabelle/Daten verschiedene Diagramme erstellt.

Bis jetzt wurde in der letzten Tabelle, die Spalten wenn neue Daten vorhanden waren nach unten kopiert, so wie auch die Daten/Bezüge in den Diagrammen manuell angepasst. Es geht um die Möglichkeit die Diagramme sobald in den anderen Tabellen Daten vorhanden sind, in der letzten Tabelle zu übernehmen und in den Diagrammen dazustellen ohne jedesmal manuell eingreifen zu müssen.

Dazu habe ich diese Formel gemacht: =WENN(ISTLEER(Track_History!A325);"";Track_History!A325)

Ist es möglich wenn ich Im Namens-Manager diese Formel benutze:
=BEREICH.VERSCHIEBEN(Graph!$A$1;ANZAHL2(Graph!$A:$A)-1;0;-MIN(Länge; ANZAHL2(Graph!$A:$A)-1);1)
das die istleer Formel ignoriert wird. In A:A wird als Ergebnis Datum erzeugt.

Es geht um die Möglichkeit die Diagramme sobald in den anderen Tabellen Daten vorhanden sind diese in den Diagrammen zu übernehmen ohne jedesmal die Spalten nach unten zu kopieren.

Danke für Tipps im voraus
Arek
 
Das hört sich sehr kompliziert an. Wahrscheinlich wäre eine Makrolösung idealer.
 
Zuletzt bearbeitet:
Kannst du bitte mal eine Beispielexcelmappe reinstellen damit man das Problem genauer betrachten kann? Das wäre sehr hilfreich, um das Problem genauer analysieren zu können. Dann könnte man sich drum kümmern. :-)
 
Ich sehe hier zwei Moeglichkeiten (ohne VBA):
1) Extra Tabelle die die Daten fuer die Diagramme aufbereitet, so dass es immer passt.
Dann muessen auch entsprechend viele Rechenzellen vorhanden sein, wie maximal Daten eingefuegt werden.
Entsprechend muss der Bereich im Diagramm ausgewaehlt werden.

2) Definiere ueber den Namensmanager die Bereiche fuer die Diagramme mit Indirekt() und Anzahl().
Je nachdem, ob der Bereich auf die Mappe oder das Arbeitsblatt bezogen ist, musst du dann folgendes bei den Diagrammen angeben:
"='datei.xlsx'!Bereichsname" oder "=Arbeitsblatt!Bereichsname"

Beispiel fuer den Bereich "A1:A200":
=INDIREKT("Arbeitsblatt!A1:A"&Anzahl(Arbeitsblatt!A:A))
 
Hallo, habe es nicht geschafft. Anbei die Tabelle zurückgesetzt vor der Anfrage hier. Wenn geht`s schaut es an, gerne mit benötigten umbau.
Zum Aufbau: mit einem Makro werden die Daten aus einem csv-file in Tabellen Form verarbeitet. In der Tabelle Graph sind die Daten mit denen ich Arbeiten möchte.

Danke
 

Anhänge

Wenn ich das ganze richtig verstehe willst Du folgendes:

1. In der Tabelle "GRAPH" stehen in Spalten und Zeilen Werte, die in den Diagrammen rechts daneben angezeigt werden sollen.

2. Allerdings willst Du nicht alle Werte in den Diagrammen sehen sondern nur eine bestimmte Auswahl.

3. Diese Auswahl beschränkt sich auf ausgewählte Spalten und Zeilen und sind die letzten 30 Einträge der Tabelle "GRAPH" (plus einem evtl. Offset von x Leerzeilen)

4. Der angezeigte Datenbereich der Diagramme soll sich automatisch anpassen, sobald in der Tabelle GRAPH neue Datenzeilen hinzugefügt werden.

Habe ich das so einigermasen richtig verstanden?
 
Hi Gameforce,

1. Ja
2. Ja
3. Die Auswahl der zu ermittelnden Werte erfolgt, von letzen Wert, Variabel (aktuell über Zelle AD317) nach oben.
4. Ja. Das habe ich versucht über =WENN(ISTLEER(Track_History!A325);"";Track_History!A325) usw. zu lösen. Aber diese Formeln werden in den Diagrammen obwohl "Leer/Formel" weiterverarbeitet mit wahrscheinlich "0".

Mir ging es jetzt um eine Möglichkeit dass die Formel Ignoriert wird solange keine echten Werte/Zahlen aus Track_History kommen/stehen.
 
Ich habe folgende beiden SUBs in deine Excelmappe eingebaut. Deine Mappe habeich bearbeitet dieser Nachricht beigefügt. Zudem befindet sich auf der Tabelle "Graph" eine Taste. Wenn Du diese Taste anklickst, dann wird der Datenbereich des Diagramms 10 neu gesetzt. Du kannst jetzt mal versuchen in der Tabelle GRAPH neue Werte einzufügen und dann die Taste drücken, um den Bereich neu zu setzen und das Diagramm neu berechnen und anzeigen zu lassen.

Wäre das ungefähr in Deinem Sinne?

Sub Datenbereich_ermitteln()
On Error Resume Next

Dim Tabelle1 As String
Dim LZ As Long
Dim EZ As Long
Dim Spalte1 As Long
Dim AnzahlZeilen As Long
Dim Bereich As Range

Dim Bereich1 As Range
Dim Bereich2 As Range
Dim Bereich3 As Range
Dim Bereich4 As Range


Tabelle1 = "Graph"
Spalte1 = 1
LZ = LetzteZeile(Tabelle1, Spalte1)
AnzahlZeilen = CLng(Worksheets(Tabelle1).Cells(317, 30).Value)
EZ = LZ - AnzahlZeilen
If (EZ < 1) Then EZ = 1

'* Datenbereich für das Diagramms als RANGE-Objekt definieren ****
Set Bereich1 = Worksheets(Tabelle1).Range("$A$1")
Set Bereich2 = Worksheets(Tabelle1).Range("$F$1:$J$1")
Set Bereich3 = Worksheets(Tabelle1).Range("$A$" & EZ & ":$A$" & LZ)
Set Bereich4 = Worksheets(Tabelle1).Range("$F$" & EZ & ":$J$" & LZ)
Set Bereich = Union(Bereich1, Bereich2, Bereich3, Bereich4)
'****

'* Datenbereich des Diagramms über das RANGE-Objekt setzen **
ActiveSheet.ChartObjects("Diagramm 10").Activate
ActiveChart.SetSourceData Source:=Bereich
'****


End Sub

Function LetzteZeile(Tabelle As String, Spalte As Long) As Long
On Error Resume Next
Dim Ergebnis As Long
Dim Inhalt As String

Ergebnis = 1
Do
Ergebnis = Ergebnis + 1
Inhalt = Trim(Worksheets(Tabelle).Cells(Ergebnis, Spalte).Value & "")
Loop While (Inhalt <> "")
LetzteZeile = Ergebnis - 1

End Function
 

Anhänge

  • Gefällt mir
Reaktionen: Arek100
Nur ein kleiner Hinweis für Dich: Du solltest in dem Datenbereich keine Leerzeilen dazwischen haben (was ja wohl auch nicht ist) . Sonst schlägt die Funktion LEZTEZEILE fehl.
 
Schade, Funktioniert doch nicht. Wenn ich mit istleer die Zeilen füttere und herunterziehe wird trotzdem die letzte istleer Zeile ausgewertet wenn ich mir die Daten im Names-Manager anschaue (Aktuell 15 letzte in der Variablen).

Start_Graph.jpg
Keine Ahnung warum es zu Hause zu funktionieren schien.
 
Sorry für den vor schnellen Schuss. In der Kopie von oben funktioniert es. Im Original noch nicht. Muss mir das genauer anschauen was ich falsch gemacht habe.

Danke noch mal :daumen:
 
Hi,

ich glaube denn Fehler gefunden zu haben. Sas mal wieder vor dem Rechner ;). Ich habe neue Tabellenblätter hinzugefügt, Diagramme und Daten sind jetzt getrennt.


AnzahlZeilen = CLng(Worksheets(Tabelle1).Cells(317, 30).Value)

wie muss ich das Ändern das in einen anderen Tabellenblatt in der Zelle A1,1 nach "Cells(1,1).Value" geschaut wird? Also wie trage es ein wenn das Makro nach der Variablen in einen anderen Sheet schauen soll als der Knopf mit dem das Makro gestartet wird (z.B. wenn das neue Tabellenblatt "Daten_Diagramme" heißt).

Danke
 
Du ersetzt den Begriff Tabelle1 mit dem Tabellennamen und das in Hochkommas. Z.B. lautet Deine neue Tabelle Daten_Diagramme" und die Anzahl der Zeilen in dieser Tabelle steht in Zelle A1. Dann würde diese Zeile so ausehen:


AnzahlZeilen = CLng(Worksheets("Daten_Diagramme").Cells(1, 1).Value)
 
  • Gefällt mir
Reaktionen: Arek100
Hi, da ich neues Tabellenblatt erstellt habe wo die Diagramme jetzt separat erscheinen Fehlen die Diagramme jetzt, wo das Makro ausgeführt wird Und deswegen scheint es nicht zu Funktionieren

Ich glaube, dass das hier das letzte Problem darstellt:

ActiveSheet.ChartObjects("Diagramm 10").Activate
ActiveChart.SetSourceData Source:=Bereich

Kann ich dieser Anweisung sagen, dass das Diagramm 10 jetzt in Tabelle x zu finden ist?
Habe in dem neuen Tabellenblatt dem richtigen Diagramm die Bezeichnung „Diagramm 10“ erstmal gegeben.
 
Du kannst zur Sicherheit zunächst einmal das Tabellenblatt, welches aktiv sein soll aktivieren mit:


Worksheets("Daten_Diagramme").Activate

dann kannst Du die beiden Zeilen darunter anhängen:

ActiveSheet.ChartObjects("Diagramm 10").Activate
ActiveChart.SetSourceData Source:=Bereich


Ja, Du musst schauen wie das Diagramm heisst und dann entweder den Namen im Code anpassen, oder Du Nnderst den Namen des Diagramms um. Allerdings musst Du aufpassen, das mehrere Diagramme nicht identische Namen haben (Excel müsste Dich daruf hinweisen).

Du könntest das Ganze mit dem "aktivieren" auch lassen und den Bereich direkt ändern mit folgender Zeile (Achtung: von mir nicht getestet):

Worksheets("Daten_Diagramme").ChartObjects("Diagramm 10").SetSourceData Source:=Bereich
 
Hi,

erstmal einen großen dank von Mir für deine Unterstützung. Habe aber noch ein Problem mit einem Diagramm. Hast du vielleicht noch eine Idee wie ich diese eine Line entfernen kann. Sie erscheint immer beim nächsten ausführen des Makros
 

Anhänge

Ist ja witzig, sobald ich einen Bereich wegnehme zerschießt es das Diagramm. Auch eine andere Reihenfolge bringt keinen Erfolg. Das ist ja ein kniffliges Problem....
Hab noch keine Lösung woran das liegt.

Diese grüne Linie ist die Spalte K "Total Backlog"
 
Ich kann die Linie in Diagramm löschen, kommt aber nach Makro wieder.
Es sollte ein Diagramm mit "nur" Backlog der einzelnen Gruppen sein und ein zweites (rechst) mit dem totalen Backlog. Wenn ich in dem Makro den Bereich verkleinere, die Breite von k auf j setzte fehlt der total Backlog. Wäre die Frage ob man nur für das eine Diagramm einen Bereich K:K definieren könnte?
 
Frage: Das Makro ermittelt anhand der Variablen den Bereich. Kann ich mir auch die Werte der Zellen zurück geben lassen die das Makro ermittelt hat? Also Variable steht auf 10 das Marko schreibt in Zelle BA1 die letzte ermittelte Zelle und in BA2 die oberste. So könnte man das Problem umgeben mit den Diagrammen (leichter auch neue erstellen, Beispiel unterste A300 – 10 also A290)? Diagramm hold sich die Daten aus dem Bereich A290-300; C290-x usw.
 
Zurück
Oben