Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
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
Inhaltsverzeichnis

Diagrammlegende

Diagrammlegende
23.01.2020 10:13:39
Brettkopf
Moion liebe Excelaner,
ich habe eine kleines Problem mit der Erzeugung meines Diagramms. Der Code an sich läuft sehr gut, jedoch habe ich ein Problem mit der Legende. Ich brauche unbedingt eine umgekehrte Reinfolge der Legende also:
Datenreihe 1
Datenreihe 2
Datenreihe 3
soll werden:
Datenreihe 3
Datenreihe 2
Datenreihe 1
Hat jemand eine Idee, wie ich das lösen kann?
Sub Diagramm()
' Formatierung der Parameter für das Diagramm
'Dimensionierung der Parameter
Dim D1 As String
Dim D2 As String
Dim D3 As String
Dim sDatum As String
Dim PD1 As Range
Dim PD2 As Range
Dim PD3 As Range
Dim K1 As Double
Dim K2 As Double
Dim K3 As Double
Dim K4 As Double
Dim Auslastung1 As Double
Dim Auslastung2 As Double
Dim Auslastung3 As Double
Dim Auslastung4 As Double
Dim Maximum As Integer
Dim xArr As Variant
Dim yArr()
Dim Abzisse(0, 0 To 365)
Dim Ordinate(0, 0 To 365)
Dim DatumFormat(0, 0 To 365)
Dim rng As Range
Dim n As Long
Dim j As Long
Dim iRows As Long
' Datensammlung fürs Diagramm
'Aktivierung des zu verändernden Sheets
ActiveSheet.Activate
' Bestimmung der Zeile bis zur gefüllten Reihe
For z = 4 To 100
For s = 2 To 2
If IsEmpty(Range(Worksheets("RTPS-Matrix").Cells(z, s), Worksheets("RTPS-Matrix"). _
Cells(z, s)).Value) = True Then
iRows = Cells(z, 2).End(xlUp).Row
Exit For
End If
Next s
Next z
'Schleife für alle Mitarbeitenden in der Liste der Tabelle
For n = 1 To iRows - 3
'Festlegung des Bereiches für die Daten (Pl. Datum)
Set rng = Union(Cells(n + 3, 9), Cells(n + 3, 12), Cells(n + 3, 15))
'Sortierung der Werte nach aufsteigendem Datum + Integrationnicht ausgefüllter Textboxen
D1 = CDate(WorksheetFunction.Small(rng, 1))
On Error Resume Next
Set PD1 = rng.Find(What:=CDate(WorksheetFunction.Small(rng, 1)), LookAt:=xlWhole)
On Error Resume Next
D2 = CDate(WorksheetFunction.Small(rng, 2))
On Error Resume Next
Set PD2 = rng.Find(What:=CDate(WorksheetFunction.Small(rng, 2)), LookAt:=xlWhole)
On Error Resume Next
D3 = CDate(WorksheetFunction.Small(rng, 3))
On Error Resume Next
Set PD3 = rng.Find(What:=CDate(WorksheetFunction.Small(rng, 3)), LookAt:=xlWhole)
On Error Resume Next
' Festlegung der Zugehörige Auslastung
K1 = PD1.Offset(0, -2)              'Auslastung des kleinsten Datums
K2 = PD2.Offset(0, -2)              'Auslastung des mittleren Datums
K3 = PD3.Offset(0, -2)              'Auslastung des größten Datums
K4 = ActiveSheet.Cells(n + 3, 5)    'Auslastung der Daueraufgabe
' Berechnung der Auslastung für die Darstellung im Diagramm
Auslastung1 = K1 + K2 + K3 + K4
Auslastung2 = K2 + K3 + K4
Auslastung3 = K3 + K4
Auslastung4 = K4
' ändert Arrays für die Nutzung im Diagramm
For i = 1 To 365
Abzisse(0, i) = DateAdd("d", i, Date)
Ordinate(0, i) = Auslastung1
Next i
' Anpassung des Arrays für das Diagramm
i = WorksheetFunction.Match(D1, Abzisse, 0)
sDatum = Abzisse(0, i - 1)
For i = i To 365
Ordinate(0, i) = Auslastung2
Next i
'Bis 2. Datum
i = WorksheetFunction.Match(D2, Abzisse, 0)
sDatum = Abzisse(0, i - 1)
For i = i To 365
Ordinate(0, i) = Auslastung3
Next i
'Bis 3. Datum
i = WorksheetFunction.Match(D3, Abzisse, 0)
sDatum = Abzisse(0, i - 1)
For i = i To 365
Ordinate(0, i) = Auslastung4
Next i
' Anpassung des Formates des Datums an das Gewünschte, hier: "Short Date"
For i = 1 To 365
DatumFormat(0, i) = Format(Abzisse(0, i), "Short Date")
Next i
'Genutzte Arrays für das Diagramm
xArr = DatumFormat()
ReDim Preserve yArr(0, n)
yArr(0, n) = Ordinate()
Next n
' Auswahl der Tabelle und des Diagrammtypes
With ActiveSheet
.Shapes.AddChart2(276, xlAreaStacked).Select
.Application.CutCopyMode = False
End With
With ActiveChart
' Festlegung der Daten für das Diagramm
For n = 1 To iRows - 3
.SeriesCollection.NewSeries
.SeriesCollection(n).Name = Cells(n + 3, 2)
.SeriesCollection(n).Values = yArr(0, n)
.SeriesCollection(n).XValues = xArr
' Festlegung der Achse für die Legende
.ChartArea.Select
.SetElement (msoElementLegendRight)
.Legend.Select
.Legend.LegendEntries(n).Select
Next n
End With
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagrammlegende
23.01.2020 16:22:53
Beverly
Hi,
wenn du die Reihenfolge der Datenreihen umkehren willst, musst du sie auch in der umgekehrten Reihenfolge hinzufügen.


AW: Diagrammlegende
24.01.2020 14:40:52
Brettkopf
Und wie genau kann ich das machen?
AW: Diagrammlegende
24.01.2020 15:25:03
Beverly
Ich würde mal annehmen so:
For n = iRows - 3 To 1 Step -1


AW: Diagrammlegende
28.01.2020 08:53:09
Brettkopf
Das klappt leider nicht, da meine Werte zu verkettet sind durch die Arrays...
AW: Diagrammlegende
28.01.2020 09:19:41
Beverly
Die Reihenfolge kannst du nach dem Erstellen des Diagramms mittels .PlotOrder ändern:
    Dim lngReihe As Long
Dim lngZaehler As Long
lngZaehler = 1
With ActiveSheet.ChartObjects(1).Chart
For lngReihe = .SeriesCollection.Count To 2 Step -1
.SeriesCollection(.SeriesCollection.Count).PlotOrder = lngZaehler
lngZaehler = lngZaehler + 1
Next lngReihe
End With


Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige