Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1720to1724
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Letzte Datenpunkte beschriften
14.11.2019 11:25:18
immer
Bestes Forum,
Für eine einzelne Datenreihe habe ich hinbekommen nur den letzten Datenpunkt zu beschriften.
Wie klappt dies für alle Datenreihen im Diagramm?
Besten Dank, Thomas

Sub ltztr_Dtpkt()
Dim p, r As Integer
Dim i%
ActiveSheet.ChartObjects("Diagramm 1").Activate
' r = ActiveChart.SeriesCollection.Count
' MsgBox r
'For i = 1 To r
p = ActiveChart.SeriesCollection(1).Points.Count
'    MsgBox k
With ActiveChart.SeriesCollection(1).Points(p)
.HasDataLabel = True
End With
ActiveChart.SeriesCollection(1).DataLabels(p).Select
Selection.ShowSeriesName = True
Selection.ShowValue = True
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 255, 255)
.Solid
End With
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
End With
'    Next i
'    Next r
End Sub

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Letzte Datenpunkte beschriften
14.11.2019 11:47:39
Beverly
Hi,
meinst du so etwas:
Sub ltztr_Dtpkt()
Dim p, r As Integer
Dim i%
With ActiveSheet.ChartObjects("Diagramm 1").Chart
For i = 1 To .SeriesCollection.Count
p = .SeriesCollection(i).Points.Count
With .SeriesCollection(i).Points(p)
.HasDataLabel = True
With .DataLabel
.ShowSeriesName = True
.ShowValue = True
.Interior.Color = 255
With .Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
End With
End With
End With
Next i
End With
End Sub


AW: Letzte Datenpunkte beschriften
14.11.2019 12:09:21
immer
Merci Beverly,
funzzt, wenn die Datenreihen gleich viele Datenpunkte aufweisen.
Dies ist nicht immer der Fall.
Danke, Thomas
Anzeige
AW: Letzte Datenpunkte beschriften
14.11.2019 12:40:18
Beverly
Hi Thomas,
ich sehe nicht wo da das Problem liegt - die Nummer des letzten Datenpunktes wird doch auf die Variable p geschrieben und mit With .SeriesCollection(i).Points(p) wird folglich auch der letzte Datenpunkt angesprochen.
https://www.herber.de/bbs/user/133216.xlsm


AW: Letzte Datenpunkte beschriften
14.11.2019 14:52:20
immer
Danke Karin
hast recht.
Bei meinem Test war der letzte Datenpunkt der Reihe leer.
Jetzt hatte ich natürlich, bei der test.xlsm, nicht alle probs bedacht die sich ergeben können
Zwischenzeitlich folgender Stand:
Das Diagramm ist ein eigenes Blatt
Die Datenreihen können sich erweitern (anfangs alle Datenpunkte löschen, dann die letzten beschriften)
Es dürfen nicht alle Datenreihen das Prozedere durchlaufen, sie befinden sich aber in einem zusammenhängenden Bereich.
Versuche gerade das Original so ab zu specken, dass ich es hochladen kann.
Vielleicht kannst du mir aber auch, an deinem Beispiel, behilflich sein.
Danke, Thomas
Anzeige
AW: Letzte Datenpunkte beschriften
14.11.2019 15:25:40
Beverly
Hi Thomas,
da ich deine Bedingungen nicht kenne, nach denen bestimmte Datenreihen nicht berücksichtigt werden dürfen, habe ich einfach mal angenommen, es sei die Datenreihe die "Reihe 2" heißt - die Bedingung(en) musst du entsprechend anpssen.
Sub ltztr_Dtpkt()
Dim p, r As Integer
Dim i%
With Charts("Diagramm1")
For i = 1 To .SeriesCollection.Count
If .SeriesCollection(i).Name  "Reihe 2" Then
.SeriesCollection(i).HasDataLabels = True
.SeriesCollection(i).DataLabels.Delete
p = .SeriesCollection(i).Points.Count
With .SeriesCollection(i).Points(p)
.HasDataLabel = True
With .DataLabel
.ShowSeriesName = True
.ShowValue = True
.Interior.Color = 255
With .Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
End With
End With
End With
End If
Next i
End With
End Sub


Anzeige
AW: Letzte Datenpunkte beschriften
14.11.2019 16:19:15
immer
Hallo Karin,
hilft weiter, indem das Diagrammblatt angesprochen wird.
Nur ist meine Datenstruktur sehr unübersichtlich, weil ich, über Jahre, immer wieder daran rumgebastelt habe.
So kommen immer neue Überraschungen ans Licht.
Werde morgen und übers W'ende versuchen mir wieder einen Überblick zu verschaffen.
Die abgespeckte Datei wäre jetzt fertig. Ich weiss allerdings nicht, ob ich dich damit behelligen darf.
Danke, Thomas
AW: Letzte Datenpunkte beschriften
14.11.2019 16:30:30
Beverly
Hi Thomas,
lade die Mappe ruhig hoch und - vor allem - beschreibe genau, woran man erkennt, dass eine Datenreihe ausgenommen werden soll.


Anzeige
AW: Letzte Datenpunkte beschriften
14.11.2019 18:06:17
immer
Hi Karin,
Erklärungen hoffentlich verständlich in der Datei.
btw. die Datenreihen sind sehr unübersichtlich, sorry.
https://www.herber.de/bbs/user/133225.xlsm
Danke für deine Unterstützung, Thomas
AW: Letzte Datenpunkte beschriften
14.11.2019 18:17:34
Beverly
Hi Thomas,
so richtig verstehe ich nicht was du da machen willst - die Datenreihen "Probe1 PT" und "Probe 2 PT" (ich nehme an, dass das diejenigen sind, auf die sich deine Frage bezieht) bestehen doch nur aus einem einzigen Datenpunkt. Die musst du doch nicht ständig neu beschriften sondern es reicht, wenn du das einmalig von Hand ausführst.


Anzeige
AW: Letzte Datenpunkte beschriften
14.11.2019 19:09:20
immer
Guten Abend Karin,
Die senkrechten Linien sind die kritischen und stellen Schnittpukte, der Liniendiagramme, mit der x-Achse dar.
Kommen aus dem Blatt Daten Zeile 14.
Wenn da dein vorlletztes Makro
Sub ltztr_Dtpkt2()
Dim p, r As Integer
Dim i%
'    With ActiveSheet.ChartObjects("DiagrammFT").Chart
'Charts("DiagrammFT").Activate
'Charts("DiagrammFT").Select
With Charts("DiagrammFT")
For i = 1 To .SeriesCollection.Count
p = .SeriesCollection(i).Points.Count
With .SeriesCollection(i).Points(p)
.HasDataLabel = True
With .DataLabel
.ShowSeriesName = True
.ShowValue = True
.Interior.Color = RGB(255, 255, 255)
With .Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
End With
End With
End With
Next i
End With
End Sub
drüberläuft kommt eine Beschriftung hinzu.
Außerdem wird beim Liniendiagramm Probe 1 der letzte Datenpunkt nicht beschriftet, weil in Daten(B6) NV() durch eine Formel vorgegeben ist.
Mit der Reihenzuordnung für die Ausnahmen habe ich Probleme, weil soviele "leere Reihen" existieren.
Danke für deine Geduld, Thomas
Anzeige
AW: Letzte Datenpunkte beschriften
14.11.2019 19:49:02
Beverly
Hi Thomas,
also betrifft es die Datenreihen "Probe1" und "Probe 2"?
Dann versuche es mal so:
Sub ltztr_Dtpkt2()
Dim p, r As Integer
Dim i%
Dim strY As String
Dim rngY As Range
With Charts("DiagrammFT")
For i = 1 To .SeriesCollection.Count
If .SeriesCollection(i).Name = "Probe1" Or _
.SeriesCollection(i).Name = "Probe 2" Then
.SeriesCollection(i).HasDataLabels = True
.SeriesCollection(i).DataLabels.Delete
strY = Split(.SeriesCollection(i).Formula, ",")(2)
Set rngY = Range(strY)
For p = rngY.Cells.Count To 1 Step -1
If Not IsError(Range(strY).Cells(p).Value) Then
Exit For
End If
Next p
With .SeriesCollection(i).Points(p)
.HasDataLabel = True
With .DataLabel
.ShowSeriesName = True
.ShowValue = True
.Interior.Color = RGB(255, 255, 255)
With .Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
End With
End With
End With
End If
Next i
End With
End Sub


Anzeige
AW: Letzte Datenpunkte beschriften
15.11.2019 00:26:01
immer
Wow, das schaut gut aus.
Bin grade nach hause gekommen und teste morgen weiter.
Insgesamt sind 7 Proben möglich
muss ich dann hier
strY = Split(.SeriesCollection(i).Formula, ",")(2)
etwas ändern? (2 =Anzahl Datenreihen)
bzw. wie bekomme ich die Anzahl der Datenreihen als Variable?
Gute Nacht und Danke, Thomas
AW: Letzte Datenpunkte beschriften
15.11.2019 08:26:16
Beverly
Hi Thomas,
es gibt verschiedene Möglichkeiten festzustellen, ob ein Datenpunkt einen Zahlenwert (oder einen Fehlerwert) enthält. Man kann z.B. die Values der Datenreihe in ein Array schreiben und dieses dann in einer Schleife durchlaufen.
Oder man kann aus der Datenereihenformel den Zellbereich ermitteln, in welchem die Y-Werte stehen und diesen Zellbereich dann mit demselben Ziel durchlaufen. Die Datenreihenformel siehst du in der Bearbeitungsleiste wenn du eine Datenreihe markiert hast.
An dieser Codezeile musst du also nichts ändern, denn damit wird der Zellbereich für die Y-Werte aus der Datenreihenformel der laufenden Datenreihe extrahiert - Split(.SeriesCollection(i).Formula, ",")(1) extrahiert den Zellbereich der X-Werte und Split(.SeriesCollection(i).Formula, ",")(2) den Zellbereich der Y-Werte jeweils als String. In der nächsten For-Schleife wird dann jede Zelle dieses Bereichs von der letzten bis zur ersten durchlaufen und geprüft, ob sie einen Zahlenwert enthält - wenn ja, dann die Schleife verlassen weil dies der letzte Punkt (bzw. von hinten der erste) ist, der beschriftet werden soll.
Wenn du mehr als nur 2 Datenreihen hast die beschriftet werden sollen bietet sich statt einer If-Anweisung eine Select Case-Anweisung an, weil es damit einfacher ist:
       For i = 1 To .SeriesCollection.Count
Select Case .SeriesCollection(i).Name
Case "Probe1", "Probe 2"    '



Anzeige
AW: Letzte Datenpunkte beschriften
15.11.2019 11:26:14
immer
Hallo Karin,
danke für deine ausführliche Erklärungen.
Jetzt wollte ich die Case-Anweisung variabel halten, denn es steht dort nicht immer Probe 1, Probe 2..
Case "Probe1", "Probe 2" '<== hier alle Namen aufführen
Kann ich bei Case direkt Bezug auf die Zelle nehmen bzw. mit Namen arbeiten?
Wenn ja, wie sähe die Syntax dazu aus.
Meine try und error Versuche sind bisher gescheitert
Nochmals vielen Dank für deine Hilfe, Thomas
AW: Letzte Datenpunkte beschriften
15.11.2019 12:27:37
Beverly
Hi Thomas,
selbstverständlich kannst du auch mit Zellbezügen arbeiten, gleichgültig ob sie per Namen definiert sind oder direkte Zellangaben sind - musst dich halt nur per Range("DerName1") darauf beziehen und wenn es sich um direkte Zellangaben handelt dann Worksheets("xxxx").Range("xx")


Anzeige
AW: Letzte Datenpunkte beschriften
15.11.2019 12:41:26
immer
Hi Karin,
habe mich schon rangetastet
Case Sheets("0°_60°C").Range("b9").Value, Sheets("0°_60°C").Range("c9").Value, _ Sheets("0°_60°C").Range("d9").Value
klappt es auch.
Wenn ich die restlichen bis h9 hinzufüge, meckert Vba
With .SeriesCollection(i).Points(p)
Objekt unterstützt diese Eigenschaft oder Methode nicht
Mit Namen ist es viel übersichtlicher. Aber wie schreibe ich die in die Case Anweisung?
Thomas
AW: Letzte Datenpunkte beschriten
15.11.2019 12:46:56
immer
Sorry falsche Fehlermeldung
With .SeriesCollection(i).Points(p)
"Der Parameter ist ungültig"
Thomas
AW: Letzte Datenpunkte beschriten
15.11.2019 15:29:42
Beverly
Hi Thomas,
der Fehler tritt auf, wenn in einer der Spalten in Tabelle "Daten" auschließlich Fehlerwerte stehen. Weshalb es zu einem Fehler kommt kann man prüfen, indem man den Code im Einzelschrittmodus durchläuft und sich die Inhalte der Variablen in der betreffenden Codezeile anschaut - was bei dir i und p wären. Die Variable i ist immer belegt, da der Zähler ja von der letzten bis zur erstern Datenreihe läuft und somit nur die Datenreihen angesprochen werden die im Diagramm auch tatsächlich vorhanden sind. Also muss der Fehler bei der Variablen p liegen - und siehe da: wenn die Datenreihe nur Fehlerwerte beinhaltet beträgt p am Ende des Schleifendruchlaufs 0 und einen Datenpunkt 0 gibt es selbstverständlich nicht, ergo besagte Fehlermeldung. Aus diesem Grund muss noch eine Prüfung eingebaut werden, dass p immer größer 0 sein muss.
                Case Worksheets("0°_60°C").Range("B9"), Worksheets("0°_60°C").Range("C9"), _
Worksheets("0°_60°C").Range("D9"), Worksheets("0°_60°C").Range("E9"), _
Worksheets("0°_60°C").Range("F9"), Worksheets("0°_60°C").Range("G9"), _
Worksheets("0°_60°C").Range("H9")
strY = Split(.SeriesCollection(i).Formula, ",")(2)
Set rngY = Range(strY)
For p = rngY.Cells.Count To 1 Step -1
If Not IsError(Range(strY).Cells(p).Value) Then
Exit For
End If
Next p
If p > 0 Then
.SeriesCollection(i).HasDataLabels = True
.SeriesCollection(i).DataLabels.Delete
With .SeriesCollection(i).Points(p)
.HasDataLabel = True
With .DataLabel
.ShowSeriesName = True
.ShowValue = True
.Interior.Color = RGB(255, 255, 255)
With .Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
End With
End With
End With
End If
End Select

Dabei kann man auch noch das Hinzufügen und wieder Löschen der Beschriftungslabel innerhalb der Fehlerbehandlung ausführen, weil dies andernfalls ja nicht erforderlich ist und den Code nur ausbremst.
Wenn du nicht die Zellbezüge sondern die definierten Namen in die Case-Zeile schreiben willst, dann halt einfach
Case Range("DeinName1"), Range("DeinName2"), Range("DeinName3") usw.


AW: Letzte Datenpunkte beschriten
16.11.2019 18:19:22
immer
Hi Karin,
ein Prob geklöst, der Fehler mit den komplett NV() Datenreihen wird durch If p > 0 Then abgefangen.
Das Folgeproblem habe ich im DiagrammFT beschrieben.
https://www.herber.de/bbs/user/133257.xlsm
Schönes W'ende, Thomas
AW: Letzte Datenpunkte beschriten
16.11.2019 22:15:03
Beverly
Hi Thomas,
dass bei den senkrechten Datenreihen durch den Code der obere Datenpunkt und nicht wie von dir gewünscht der untere Datenpunkt beschriftet wird ist doch logisch, da der Code immer vom letzten zum ersten Datenpunkt läuft (um zu prüfen, ob ein Fehlerwert auftritt und wenn ja diese Datenpunkte ausschließen muss) und der obere Datenpunt ist hier immer der letzte - folglich wird dieser auch beschriftet.
Wozu willst du denn diese senkrechten Datenreihen überhaupt jedesmal neu beschriften? Sie bestehen doch nur aus 2 Datenpunkten und diese Anzahl ändert sich nie (im Gegensatz du den Datenreihen der Proben) - folglich können sie die einmal erstellte Beschrftung behalten.


AW: Letzte Datenpunkte beschriten
17.11.2019 12:01:08
immer
Servus Karin,
deine Anmerkung:
"Sie bestehen doch nur aus 2 Datenpunkten und diese Anzahl ändert sich nie (im Gegensatz du den Datenreihen der Proben) - folglich können sie die einmal erstellte Beschrftung behalten."
hat den Groschen bei mir fallen lassen (Geistesblitz).
Code "angepasst"
For i = 1 To .SeriesCollection.Count - 7
oder kann dadurch ein anderer bug entstehen.
Vielen Dank für's helfen und die Einblicke in die weite Welt des Vba, Thomas
AW: Letzte Datenpunkte beschriten
17.11.2019 12:58:47
Beverly
Hi Thomas,
ich würde das anders lösen. Nur die Datenreihen haben Namen, deren Datenpunkte angezeigt werden sollen - das kannst du im Code entsprechende berücksichtigen:
    With Charts("DiagrammFT")
For i = 1 To .SeriesCollection.Count
Select Case .SeriesCollection(i).Name
Case Worksheets("0°_60°C").Range("B9"), Worksheets("0°_60°C").Range("C9"), _
Worksheets("0°_60°C").Range("D9"), Worksheets("0°_60°C").Range("E9"), _
Worksheets("0°_60°C").Range("F9"), Worksheets("0°_60°C").Range("G9"), _
Worksheets("0°_60°C").Range("H9")
If .SeriesCollection(i).Name  "" Then
strY = Split(.SeriesCollection(i).Formula, ",")(2)
Set rngY = Range(strY)
For p = rngY.Cells.Count To 1 Step -1
If Not IsError(Range(strY).Cells(p).Value) Then
Exit For
End If
Next p
If p > 0 Then
.SeriesCollection(i).HasDataLabels = True
.SeriesCollection(i).DataLabels.Delete
With .SeriesCollection(i).Points(p)
.HasDataLabel = True
With .DataLabel
.ShowSeriesName = True
.ShowValue = True
.Interior.Color = RGB(255, 255, 255)
With .Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
End With
End With
End With
End If
End If
End Select
Next i
End With


AW: Letzte Datenpunkte beschriten
17.11.2019 19:14:58
immer
Hi Karin,
jetzt habe ich die beiden letzten Codes verglichen und finde im aktuellen
.ForeColor.RGB = RGB(0, 0, 0)
End With
End With
End With
End If
End If
End Select
Next i
End With
End Sub
vor dem End Select ein End If mehr als vorher. Wo aber ist oberhalb das zusätzliche If?
Danke für Aufklärung, Thomas
AW: Letzte Datenpunkte beschriten
17.11.2019 20:05:37
Beverly
Hi Thomas,
ich hatte doch geschrieben, dass man prüfen kann, ob die Datenreihe einen Namen hat - also in dieser Zeile:
If .SeriesCollection(i).Name  "" Then
steht das dazu gehörige If...Then
Der Code ist doch strukturiert geschrieben - da musst du einfach nur den Cursor an den Beginn der betreffenden Zeile setzen und dann nach oben (oder untern) scrollen.
AW: Letzte Datenpunkte beschriten, Danke...
17.11.2019 21:13:14
immer
Guten Abend Karin,
war meine Unaufmerksamkeit, hatte
If .SeriesCollection(i).Name "" Then
manuell in den vorletzten Code übernommen, aber das
End If
vergessen.
Danke für deine Engelsgeduld, bis bald, Thomas

26 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige