Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1612to1616
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
MedianWert in Diagramm als Linie
22.03.2018 09:39:10
Burak
Guten Morgen,
Ich habe mehrere Diagramme mit jeweils 1 Spalte als Datenreihe. Diese ist eingebunden und als Linie dargestellt.
Für jede Datenreihe habe ich jetzt auch den Median berechnet (welcher in der Datnereihe ganz unten steht) und möchte mir den in dem jeweiligen Diagramm als Linie miteinzeichnen lassen.
Da ich weder weiß, wie es in VBA, noch in Excel geht, kann ich auch nich aufs Makro aufzeichnen zugreifen :D

'Zeitverlaufsdiagramm des Auftrags hinzufügen
ActiveSheet.Shapes.AddChart.Select
With ActiveChart
'Zeitwerte kopieren
Worksheets(linie).Range("E" & szeile + 1 & ":E" & ezeile).Copy Columns(d + 25)
'Kopierte Zeitwerte in Minuten umwandeln
For i = 1 To ezeile - szeile
Cells(i, d + 25).Value = Cells(i, d + 25).Value / 60
Next i
letzte = WorksheetFunction.CountA(Columns(d + 25))
'Median berechnen
Cells(letzte + 1, d + 25) = Application.WorksheetFunction.Quartile(Columns(d + 25), 2)
'Median gelb färben
Cells(letzte + 1, d + 25).Interior.ColorIndex = 6
'Datenbereich auswählen
.SetSourceData Source:=Range(Cells(1, d + 25), Cells(ezeile - szeile, d + 25))
'X-Achsen-Werte festlegen
.SeriesCollection(1).XValues = "='" & linie & "'!$N$" & szeile + 1 & ":$N$" & ezeile
'Diagrammtyp gestapelte Balken
.ChartType = xlLine
Da das nicht der gesamte Code ist kurze Erläuterung dazu.
Die Werte fürs erste Diagramm stehen in Spalte 26/Z ab Zeile 1 ohne Überschrift bis zur Zeile (berechnet aus ezeile-szeile). Dementsprechend steht der Median zu diesen Werten auch in Spalte 26/Z aber in Zeile (ezeile-szeile+1)
Die Werte fürs zweite Diagramm Spalte 27/AA...
... dritte 28/AB... usw
Hoffe das sind genug Informationen und nicht zu durcheinander :(
Vielen Dank im Voraus :*

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Bitte Beispielmappe hochladen - o.w.T.
24.03.2018 10:56:07
Beverly


vorerst gelöst.
26.03.2018 09:18:24
Burak
Habs schon hinbekommen. noch nicht perfekt, aber ich hoffe ich kriege den letzten Feinschliff noch hin. Dennoch vielen Dank :)
Dann poste deine Lösung - o.w.T.
26.03.2018 10:59:50
Beverly


Meine Lösung
28.03.2018 07:57:21
Burak
Für jedes Verlaufsdiagramm stehen die Werte in jeweils einer Spalte. Den Median berechne ich und schreibe ihn genauso oft wie oft die Werte des Diagramms vorkommen direkt darunter.
Also für Diagramm 1: 510 Werte, Median berechnen und 510 mal unter die 510 Werte schreiben.
Und dann diese 510 MEDIAN-Werte als zweite Linie in die Grafik einzeichnen.
  median = Application.WorksheetFunction.Quartile(Columns(d + 25), 2)
For i = 1 To letzte
'Median berechnen
Cells(letzte + i, d + 25) = median
Next i

With ActiveChart
'Median mit einzeichnen
.SeriesCollection.NewSeries
.SeriesCollection(2).values = "='Linienauswertung - Grafiken'!" & Cells(letzte, d + 25). _
Address & ":" & Cells(medianletzte, d + 25).Address
End With
Und falls es jmd interessiert, hier nochmal der Code im Gesamten:

Sub verlaufsdiagramm()
'Variablendeklaration
Dim linie As String, barcode As Integer, bartest As String, szeile, ezeile, szeile2, ezeile2,  _
lastRowInList As Long, rowHelper As Long, d As Integer, letzte As Long, median As Double, medianletzte As Long
'Makrobremsen lösen
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
With ActiveSheet
'Blattschutz aufheben
.Unprotect
'Alle Diagramme löschen
If .ChartObjects.Count > 0 Then .ChartObjects.Delete
End With
'Spalten ab Spalte Z leeren
Columns(26).Resize(, 20).EntireColumn.Clear
'Startwert für Spaltenvariable
d = 1
'Usereingabe für Linie
linie = barcodewahl.liniebox
'Abbruch
If linie = "" Then Exit Sub
'Usereingabe für Barcode
bartest = barcodewahl.barcodebox
'Abbruchbedingung leer/nicht numerisch
If bartest = "" Or Not IsNumeric(bartest) Then
Unload barcodewahl
Exit Sub
End If
'Umwandlugn string in Integer
barcode = CInt(bartest)
'Eingabemaske ausblenden
Unload barcodewahl
'Letzte Zeile ermitteln
lastRowInList = Worksheets(linie).Range(Worksheets(linie).Range("A1").End(xlDown), Worksheets( _
linie).Range("A65536").End(xlUp)).Row
'Startwert für letzte Zeile
ezeile = 1
Do Until IsError(Application.Match(barcode, Worksheets(linie).Range("A" & ezeile + 1 & ":A" &  _
lastRowInList), 0)) Or ezeile = lastRowInList
'Startzeile des Auftrags ermitteln
szeile = Application.Match(barcode, Worksheets(linie).Range("A" & ezeile + 1 & ":A" &  _
lastRowInList), 0) + ezeile
'Rüstwechsel/1. Barcode rausfiltern
Do Until Worksheets(linie).Range("B" & szeile)  Worksheets(linie).Range("B" & szeile + 1)
szeile = szeile + 1
Loop
ezeile = szeile
'Endzeile des Auftrags ermitteln
For rowHelper = ezeile + 1 To lastRowInList
'Zähle hoch bis zur ersten Nicht-Übereinstimmung des Barcodes
If Worksheets(linie).Cells(rowHelper, 1) = barcode Then
ezeile = rowHelper
Else
'Schleifenabbruch
Exit For
End If
Next
'Zeitwerte kopieren
Worksheets(linie).Range("E" & szeile + 1 & ":E" & ezeile).Copy Columns(d + 25)
letzte = ezeile - szeile
'Kopierte Zeitwerte in Minuten umwandeln
For i = 1 To letzte
Cells(i, d + 25).Value = Cells(i, d + 25).Value / 60
Next i
'Median berechnen
median = Application.WorksheetFunction.Quartile(Columns(d + 25), 2)
For i = 1 To letzte
'Median mehrfach eintragen
Cells(letzte + i, d + 25) = median
Next i
'Letzten Medianwert finden
medianletzte = ActiveSheet.Cells(Rows.Count, d + 25).End(xlUp).Row
'Zeitverlaufsdiagramm des Auftrags hinzufügen
ActiveSheet.Shapes.AddChart.Select
With ActiveChart
'Datenbereich auswählen
.SetSourceData Source:=Range(Cells(1, d + 25), Cells(ezeile - szeile, d + 25))
'X-Achsen-Werte festlegen
.SeriesCollection(1).XValues = "='" & linie & "'!$N$" & szeile + 1 & ":$N$" & ezeile
'Diagrammtyp Verlaufsdiagramm
.ChartType = xlLine
'Diagrammtitel anzeigen und beschriften
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Linie " & linie & " - " & Left(barcode, 3) & "." & Right(barcode, 1) & " _
- Auftrag " & d & " - Stückzahl: " & (ezeile - szeile)
'Legende ausblenden
.HasLegend = False
'Intervalle festlegen
.Axes(xlValue).MajorUnit = 2
.Axes(xlCategory).TickLabelSpacing = ((ezeile - szeile) / 10) - 1
.Axes(xlCategory).TickMarkSpacing = (ezeile - szeile) / 10
'y -achsenbeschriftung
.SetElement (msoElementPrimaryValueAxisTitleHorizontal)
Selection.Left = 9
Selection.Top = 9
.Axes(xlValue, xlPrimary).AxisTitle.Text = "in min"
'Median mit einzeichnen
.SeriesCollection.NewSeries
.SeriesCollection(2).values = "='Linienauswertung - Grafiken'!" & Cells(letzte, d + 25). _
Address & ":" & Cells(medianletzte, d + 25).Address
'Hintergrund des Diagramms
With .PlotArea.Format.Fill
.Visible = msoTrue
.ForeColor.ObjectThemeColor = msoThemeColorAccent5
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0.8000000119
.Transparency = 0.6999999881
.Solid
End With
End With
'Y-Achsenbereich festlegen
With ActiveChart.Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 20
End With
'Größe und Position der Diagramme
With ActiveSheet
'Position
.ChartObjects(d).Left = 5
.ChartObjects(d).Top = 755 + ((d - 1) * 370)
'Größe
.ChartObjects(d).Height = 370
.ChartObjects(d).Width = 980
End With
'nächste Spalte
d = d + 1
Loop
End Sub

Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige