Excel-Diagramm: Linie abbrechen lassen

Hallo Ex-cel-perten!

Ich hab ein Layout-Problem zu einem Excel-Diagramm:

Die Werte des Diagramms werden aus einer Tabelle entnommen, die wöchentlich um eine Zeile wächst. Die Tabelle wird ein Jahr lang geführt, also habe ich am Ende 52 Datensätze.
Das Diagramm ist ein einfaches Liniendiagramm. Ich möchte, dass die Linie automatisch verlängert wird, wenn (montags) der neue Wert in die Tabelle eingetragen wurde. Das Diagramm soll also auf der x-Achse (schon zu Beginn!) alle 52 Wochen anzeigen, wobei die Linie nach dem jeweils aktuellen Wert abbricht.

Ich möchte nicht jede Woche die Datenquelle der Datenreihe neu eingeben.
Ich hab mal versucht, für die fehlenden Wochen den Wert „0“ einzutragen, sieht aber auch blöd aus, da im Diagramm der letzte „richtige“ Wert dann mit der ersten Null verbunden wird.

Da gibt es doch sicherlich eine bessere Lösung?!?

Viele Grüße,
Moe

Hallo,

habs grad mal mit dem Diagramm-Assistenten getestet. Das Diagramm kommt automatisch so, wie Du es haben willst. Lass einfach die nicht verwendeten Felder leer, trage also keine 0 ein.

Gruß
Wolfgang

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Du hast recht - neues Problem…
Hi Wolfgang!

Stimmt, wenn man keine Werte eingetragen hat, bricht die Linie ab.
Das Problem ist:
In Spalte B trage ich per Hand wöchentlich einen Wert ein.
In Spalte C wird in der n-ten Zeile die Summe der ersten n Zellen von Spalte B ermittelt, und zwar per WENN-Formel (hier z.B. der Inhalt von C8):

=WENN(B8="";"";SUMME(B$1:B8))

Das Diagramm greift auf Spalte C zu, genauer: auf C1:C52. Da die Felder nicht wirklich leer sind, sondern nur per Formel (mit Anweisung „“) kein Zeichen hineingeschrieben wird, erkennt der Diagramm-Assistent dies scheinbar als Wert 0 an und führt die Linie entsprechend fort.

Tja, und nun? Vielleicht kann man die WENN-Formel entsprechend ändern?!

Moe

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Die Werte des Diagramms werden aus einer Tabelle entnommen,
die wöchentlich um eine Zeile wächst. Die Tabelle wird ein
Jahr lang geführt, also habe ich am Ende 52 Datensätze.

Ich möchte nicht jede Woche die Datenquelle der Datenreihe neu
eingeben.

Hi Moe,
mit Alt-F11 in den Editor wechseln, doppelt auf „Diese Arbeitsmappe“ klicken und folgenden Code reinkopieren.
Deine Daten werden in C1:C52 erwartet. Solltest du unterhalb C52 noch Daten in Spalte C haben, so mach die Apostrophe bei 'r=0 und der For r = Schleife weg und abostrophiere r = Cells(Rows.Count…
Achja, logo, in deinem Diagramm musst du dich dann auf den Bereich „Quelle“ beziehen anstatt auf z.B.: $c$1:blush:c$12.
Gruß
Reinhard

Private Sub Workbook\_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column 3 Or Target.Row \> 52 Then Exit Sub
Dim r As Long
Dim Quellname As String
Dim Zelle As Range
Dim Löschen As Boolean
Quellname = "Quelle"
Löschen = False
Set nms = ActiveWorkbook.Names
Set wks = Worksheets(1)
For r = 1 To nms.Count
 If nms(r).Name = Quellname Then Löschen = True
Next
If Löschen = True Then ActiveWorkbook.Names(Quellname).Delete
r = Cells(Rows.Count, 3).End(xlUp).Row
'r=0
'For Each Zelle In Range("c1:c52")
' If Zelle.Value "" Then r = r + 1
'Next Zelle
Names.Add Name:=Quellname, RefersTo:="=Tabelle1!$c$1:blush:c$" & r
'For r = 1 To nms.Count
' wks.Cells(r, 5).Value = nms(r).Name
' wks.Cells(r, 6).Value = nms(r).RefersToRange.Address
'Next r
Set nms = Nothing
Set wks = Nothing
End Sub

Hallo Reinhard,

Hi Moe,
mit Alt-F11 in den Editor wechseln, doppelt auf „Diese
Arbeitsmappe“ klicken und folgenden Code reinkopieren.
Deine Daten werden in C1:C52 erwartet. Solltest du unterhalb
C52 noch Daten in Spalte C haben, so mach die Apostrophe bei
'r=0 und der For r = Schleife weg und abostrophiere r =
Cells(Rows.Count…

hab ich gemacht, den Code hab ich unverändert übernommen.

Achja, logo, in deinem Diagramm musst du dich dann auf den
Bereich „Quelle“ beziehen anstatt auf z.B.: $c$1:blush:c$12.

Wo genau? Wenn ich unter Diagramm-Datenquelle-Datenbereich „Quelle“ eingebe, kommt die Meldung „kein gültiger Bezug“. Ich hab auch „=Quelle“, mit und ohne Anführungsstriche etc. versucht. Gespeichert war’s auch.

Gruß
Reinhard

Gruß, Moe

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal
Target As Range)
If Target.Column 3 Or Target.Row > 52 Then Exit
Sub
Dim r As Long
Dim Quellname As String
Dim Zelle As Range
Dim Löschen As Boolean
Quellname = „Quelle“
Löschen = False
Set nms = ActiveWorkbook.Names
Set wks = Worksheets(1)
For r = 1 To nms.Count
If nms®.Name = Quellname Then Löschen = True
Next
If Löschen = True Then ActiveWorkbook.Names(Quellname).Delete
r = Cells(Rows.Count, 3).End(xlUp).Row
'r=0
'For Each Zelle In Range(„c1:c52“)
’ If Zelle.Value „“ Then r = r + 1
'Next Zelle
Names.Add Name:=Quellname, RefersTo:="=Tabelle1!$c$1:blush:c$" & r
'For r = 1 To nms.Count
’ wks.Cells(r, 5).Value = nms®.Name
’ wks.Cells(r, 6).Value = nms®.RefersToRange.Address
'Next r
Set nms = Nothing
Set wks = Nothing
End Sub

Danke schon mal für die viele Arbeit!!!

Hi Moe,
im DiagrammAssistenten im Schritt 2 von 4 wo nach Datenbereich gefragt wird, musst du eingeben bzw.abändern auf
=Tabelle1!Quelle
dann klappt es.
Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like

Hi Wolfgang!
Irgendwie krieg ich es nicht hin, wieder Fehlermeldung (diesmal „die Formel ist ungültig“).
Ich hab dir die Tabelle mal zugemailt. Falls ich dir zu nervig werde, kannst du sie natürlich direkt löschen…

Danke schon mal und viele Grüße,
Moe

Hi Wolfgang!

tztz Reinhard *gg*

Irgendwie krieg ich es nicht hin, wieder Fehlermeldung
(diesmal „die Formel ist ungültig“).
Ich hab dir die Tabelle mal zugemailt. Falls ich dir zu nervig
werde, kannst du sie natürlich direkt löschen…

Hi Moe,
es kamen da zwei sachen zusammen,
a–mein makro hat immer c1:c52 ausgewählt, da es auch deine wenn-Formel als Zellinhalt ansah und dann korrekt alles bis C52 auswählte, da es für das Makro volle zellen waren.
b–Ich mach nie Diagramme, deshalb war mir unklar das man zwar einmalig =Tabelle1!Quelle als Datenquelle eingeben kann und das auch funktioniert, aber dass dann Excel nicht Quelle abspeichert sondern den Wert also $C$1:blush:C$7.
c–Das Makro überwachte nur EINGABEN in Spalte C, aber da dortige Änderungen durch die Wenn(B2=…)-Formel reinschlichen, wurde es nicht aktiv. Jetzt überwachst es Spalten B und C von 1 bis 52 auf Änderungen.

Gut, hab alles korrigiert und getestet anhand deiner Tabelle,
also geh wieder in den Editor , doppelt auf DieseArbeitsmappe kilcken, dann was dort steht löschen und nachfolgenden Code eingeben.
Er ist auch übersichtlicher weil Bereichsnamenfestlegung wegfällt :smile:
Gruß
Reinhard

Private Sub Workbook\_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If (Target.Column 3 And Target.Column 2) Or Target.Row \> 52 \_
 Then Exit Sub
Application.ScreenUpdating = False
Dim r As Long
Dim Zelle As Range
r = 0
For Each Zelle In Range("c1:c52")
 If Zelle.Value "" Then r = r + 1
Next Zelle
Sheets("Diagramm1").Select
 ActiveChart.SetSourceData Source:=Sheets("Tabelle1") \_
 .Range("$c$1:blush:c$" & r), PlotBy:=xlColumns
 Sheets("Tabelle1").Select
Application.ScreenUpdating = True
End Sub
1 Like

Jauuu! Klappt!
Hi Reinhard (sorry…)
Klasse, jetzt läuft’s so wie ich’s wollte.
Schade, dass man nur einen Stern pro Artikel vergeben kann!
Danke nochmal und viele Grüße,
Moe

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Moe

Ich benutze für Liniendiagramme den folgenden Trick:

In die Wertetabelle schreibe die Formel

= Wenn(Daten"";Daten;NV())

Also, wenn Du Daten geschrieben hast, dann werden sie genommen, wenn nicht, dann wird der Fehlerwert #NV erzeugt.

Bei Liniendiagrammen hat das zur Folge, dass die Linie abbricht. Funktioniert allerdings nicht bei Säulendiagrammen.

gruss
Thomas

1 Like