Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1532to1536
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

Liniendiagramm Flächenberechnung

Liniendiagramm Flächenberechnung
03.01.2017 14:46:42
Jay
Hallo liebe Gemeinde,
da einem hier immer super geholfen wird und ich nichts gefunden habe, stelle ich meine Frage direkt an euch.
Ich habe ein Diagramm was mir auf der horinzontalen einen Zeitraum (monatlich) und auf der vertikalen eine Anzahl von Aktionen anzeigt.
Ich würde gerne die Fläche unter der verlaufenden Linie für jeden Monat berechnen und mit einer Farbe füllen z.B blau. Angefangen vom jetzigen Monatsanfang.
Grob weiß ich dass es mit einer Integralrechnung möglich sein soll, bin da aber leider nicht so bewandert.
In Sheet1 sind nur die Aktionen pro Monat. In Sheet2 ist der Graph angezeigt.
Ich versuche mal die Beispieldatei mitanzuhängen.

Die Datei https://www.herber.de/bbs/user/110307.xlsm wurde aus Datenschutzgründen gelöscht


Ist es grundsätzlich möglich diese Berechnung über VBA zu erstellen?
Vielen Dank im Voraus und viele Grüße

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Liniendiagramm Flächenberechnung
03.01.2017 15:43:56
Michael
Hi Jay,
beim ersten Blick fällt auf...
- die Werte gehen vom 1.1. bis 1.12., d.h. das dritte Jahr ist nicht "komplett" - evtl. könntest Du noch den Wert vom 31.12./1.1. des Folgejahres mit anhängen.
- die Errechnung einer "Fläche" benötigt "Längeneinheiten" - "Aktion" und "Monat" sind das nicht. D.h., Du müßtest je einen "Bemaßungskoeffizienten" einführen, also z.B. "Aktion" =! 1, "Monat" =! 10
Die Fläche unterhalb einer Funktion ist das Integral derselben, klar erkannt. Nur: Du hast hier keine Funktion griffbereit, die Du integrieren könntest.
Excel verbindet die Punkte im Diagramm mit einer wie auch immer interpolierten Linie, so daß Dein Wert 0 vom 1.6. zu einem Schwung unter die x-Achse in der Grafik führt.
Soll heißen, es macht einen Unterschied, ob man die Fläche unter dieser interpolierten Linie errechnet oder direkt "linear" aus Deinen Daten.
Letzteres ist relativ simpel...
Userbild
... und läßt sich natürlich auch in VBA umsetzen - falls es Dir so taugt.
Schöne Grüße,
Michael
Anzeige
AW: Liniendiagramm Flächenberechnung
03.01.2017 16:17:06
Jay
Hallo Michael,
vielen Dank erstmal für deine Antwort.
Ergibt natürlich Sinn, das Jahr komplett zu beenden. Das werde ich noch nachtragen. Muss im Originalfile nur die Formeln um einen Monat erweitern, hier sind einfach nur Festwerte drin.
Ich glaube der Schwung unter der Linie hängt mit der Glättung der Linie zusammen, da es in dem File keinen Minuswert gibt, 0 oder größer 0 sind die einzigen Möglichkeiten.
In C10 ist die Berechnete Fläche wenn ich das richtig verstehe, mit deiner dazugeschriebenen Rechnung?
In VBA wäre das natürlich top aber dafür bin ich noch ein wenig zu Layenhaft befürchte ich...
Schöne Grüße
Anzeige
Genau, (evtl. Beverly?)
03.01.2017 17:01:07
Michael
Jay,
in C10 ist die Fläche zwischen x1=1 und x2=2 und multipliziert mit der Höhe von der x-Achse bis zum ersten y (also das "Quadrat" zwischen y=0 und y=1) plus die Hälfte der Fläche des darüberliegenden Rechtecks.
In Zahlen von 1:8 also: 1 im Quadrat plus (8-1)/2 = 7/2 = 3,5, zusammen also 4,5.
Genügt Dir diese "lineare Berechnung"? Also daß die einzelnen Punkt mit einer "Geraden" verbunden sind?
Dann könnte ich die Zeile 10 quasi mit VBA ermitteln statt mit Formel?
Eine ganz andere Sache ist übrigens die Färbung des Diagramms - dafür gibt es Profis wie Beverly, die Dir evtl. helfen können - ich hab's mal in den Betreff geschrieben.
Eine Vba-Lösung sieht so aus:
Sub WerteRein()
Dim fy As Double, fx As Double, i As Long
Dim aktion As Variant, ausgabe As Variant
aktion = Range("B4:AL4")
ausgabe = aktion
ausgabe(1, 1) = ""
fy = Range("b9"): fx = Range("f9")
For i = 2 To UBound(aktion, 2)
ausgabe(1, i) = fx * fy * (aktion(1, i - 1) + _
(aktion(1, i) - aktion(1, i - 1)) / 2)
Next
Range("B11").Resize(1, UBound(ausgabe, 2)) = ausgabe
End Sub

Die ganze Datei: https://www.herber.de/bbs/user/110310.xlsm
Schöne Grüße,
Michael
Anzeige
Fläche unterhalb Graph färben
03.01.2017 17:18:30
Beverly
Hi Jay,
mit folgendem Code wird eine Freihandform erstellt, die die Fläche unterhalb des kompletten Graphen abbildet:
Sub FormEinfuegen()
Dim lngPunkte As Long
Dim chrDia As Chart
Dim serReihe As Series
Dim shaShape As Shape
Set chrDia = ActiveSheet.ChartObjects(1).Chart
With chrDia
If .Shapes.Count > 0 Then
For Each shaShape In .Shapes
If shaShape.Name = "Flaeche" Then shaShape.Delete
Next shaShape
End If
Set serReihe = chrDia.SeriesCollection(1)
With .Shapes.BuildFreeform(msoEditingAuto, serReihe.Points(1).Left, serReihe.Points(1). _
Top)
For lngPunkte = 2 To serReihe.Points.Count
.AddNodes msoSegmentLine, msoEditingAuto, serReihe.Points(lngPunkte).Left,  _
serReihe.Points(lngPunkte).Top
Next lngPunkte
.AddNodes msoSegmentLine, msoEditingAuto, serReihe.Points(lngPunkte - 1).Left,  _
chrDia.Axes(xlCategory).Top
.AddNodes msoSegmentLine, msoEditingAuto, serReihe.Points(1).Left, chrDia.Axes( _
xlCategory).Top
.AddNodes msoSegmentLine, msoEditingAuto, serReihe.Points(1).Left, serReihe.Points( _
1).Top
.ConvertToShape
End With
With .Shapes(1)
.Fill.Transparency = 0.45
.Fill.ForeColor.RGB = serReihe.Border.Color
.Line.Visible = msoFalse
.Name = "Flaeche"
End With
End With
End Sub

Da du allerdings ein Diagramm mit interpolierten Linien verwendest, lässt sich das nicht 100% deckungsgleich realisien.


Anzeige
AW: Fläche unterhalb Graph färben
04.01.2017 12:58:50
Jay
Hi Zusammen,
vielen Dank für eure Hilfe!
Die Flächenberechnung angepasst auf mein File funktioniert super.
@Michael
wofür steht in dem Code denn das UBound? Zum Verständnis für mich.
@Beverly
auch dir danke für die Flächenfärbung.
Kann man hier Färbung hier so steuern das Sie sich auf DATE bezieht? Sprich die Färbung für 2017 "interessiert" mich nicht mehr, da Vergangenheit?
Nochmals vielen Dank und viele Grüße
AW: Fläche unterhalb Graph färben
04.01.2017 14:27:33
Michael
Hi,
@Karin: 1. danke für die Erhellung und 2. woran liegt das denn eigentlich? Kann man da noch irgendwo dran drehen, daß der gleiche Algo für die Interpolation verwendet wird? Ich vermute, in der Freeform isses Bezier?
@Jay:
Sub WerteRein()
Dim fy As Double, fx As Double, i As Long
Dim aktion As Variant, ausgabe As Variant
' hier wird der angegebene Bereich in das "Array" aktion eingelesen:
aktion = Range("B4:AL4")
ausgabe = aktion
ausgabe(1, 1) = ""
fy = Range("b9"): fx = Range("f9")
' ubound(arrayvariable) gibt den "höchsten" Index der Zeilen
' ubound(arrayvariable,2) gibt den "höchsten" Index der Spalten
' eines Arrays zurück, wobei beide nur dann mit der ANZAHL der
' Zeilen bzw. Spalten identisch sind, wenn das Array bei 1
' beginnt, und das tut es, wenn man einen Bereich einliest.
' Das Gegenstück heißt lbound, das ist der niedrigste Index.
For i = 2 To UBound(aktion, 2)
ausgabe(1, i) = fx * fy * (aktion(1, i - 1) + _
(aktion(1, i) - aktion(1, i - 1)) / 2)
Next
Range("B11").Resize(1, UBound(ausgabe, 2)) = ausgabe
End Sub

Zu Arrays kannst Du Dir mal das ansehen: http://www.online-excel.de/excel/singsel_vba.php?f=152
Schöne Grüße,
Michael
Anzeige
AW: Fläche unterhalb Graph färben
04.01.2017 15:13:47
Beverly
Hi Jay,
wieso interessiert 2017 nicht mehr? Das ist doch das aktuelle Jahr. Und was genau verstehst du unter "auf DATE beziehen"?
Sind deine Daten und das Diagramm genau so aufgebaut wie in der durch Michael hochgeladenen Mappe? Wenn ich mir nämlich deine Mappe aus dem Eröffnungsbeitrag anschaue: sie ist leer - keine Daten und kein Diagramm.


AW: Fläche unterhalb Graph färben
04.01.2017 16:23:39
Michael
Hi,
ich vermute, er meint 2016 und =date() oder so - wobei man hier ja den jeweiligen Monatsersten nehmen müßte.
Das mit der Datei scheint ein Server-Fehler zu sein - bis auf meine Berechnungen war das der runtergeladene Originalzustand...
Gruß,
Michael
Anzeige
AW: Fläche unterhalb Graph färben
05.01.2017 09:47:31
Jay
Hey zusammen,
ja komisch, eigentlich waren in der Upload Datei, Daten und ein Graph vorhanden.
Sorry, genau meinte das Jahr 2016 und Michael hat recht, es würde sich immer auf den Monatsersten beziehen. Alles was vor dem Monatsersten liegt, müsste nicht mehr eingefärbt werden.
Beste Grüße
AW: Fläche unterhalb Graph färben
05.01.2017 09:57:53
Beverly
Hi Jay,
dann so:
Sub FormEinfuegenTeilbereich()
Dim lngPunkte As Long
Dim chrDia As Chart
Dim serReihe As Series
Dim shaShape As Shape
Dim lngStart As Variant
Dim arrWerte()
Set chrDia = ActiveSheet.ChartObjects(1).Chart
With chrDia
If .Shapes.Count > 0 Then
For Each shaShape In .Shapes
If shaShape.Name = "Flaeche" Then shaShape.Delete
Next shaShape
End If
Set serReihe = chrDia.SeriesCollection(1)
arrWerte = serReihe.Values
lngStart = Application.Match(CDbl(DateValue("01." & Month(Date) & "." & Year(Date))),  _
Worksheets("Rechnung").Rows("3:3"), 0) - 1
If IsNumeric(lngStart) Then
With .Shapes.BuildFreeform(msoEditingAuto, serReihe.Points(1).Left, serReihe.Points( _
lngStart).Top)
For lngPunkte = lngStart To serReihe.Points.Count
.AddNodes msoSegmentLine, msoEditingAuto, serReihe.Points(lngPunkte).Left,  _
serReihe.Points(lngPunkte).Top
Next lngPunkte
.AddNodes msoSegmentLine, msoEditingAuto, serReihe.Points(lngPunkte - 1).Left,  _
chrDia.Axes(xlCategory).Top
.AddNodes msoSegmentLine, msoEditingAuto, serReihe.Points(lngStart).Left,  _
chrDia.Axes(xlCategory).Top
.AddNodes msoSegmentLine, msoEditingAuto, serReihe.Points(lngStart).Left,  _
serReihe.Points(lngStart).Top
.ConvertToShape
End With
With .Shapes(1)
.Fill.Transparency = 0.45
.Fill.ForeColor.RGB = serReihe.Border.Color
.Line.Visible = msoFalse
.Name = "Flaeche"
End With
End If
End With
End Sub

Beachte, dass die Fläche in der Mitte der jeweiligen Rubrik beginnt bzw. endet, da du die Einstellung der Achsenoption "Zwischen den Teilstrichen" verwendest.


Anzeige
AW: Fläche unterhalb Graph färben
05.01.2017 13:27:22
Jay
Hi Beverly,
vielen Dank nur zeigt mir die Füllung jetzt ab April alles an obwohl Januar ist, sprich zu wenig Füllung.
Und eine letzte Frage noch dann hör ich auf dich zu belästigen.
Was müsste ich tun um z.B. die anderen Liniendiagramme die dort enthalten sind auch färben zu wollen, da ich ja mehrere "Aktionsspalten" habe? Den Sub doppeln und Werte anpassen reicht?
Vielen Dank nochmals
AW: Fläche unterhalb Graph färben
05.01.2017 14:18:30
Beverly
Hi Jay,
zu Frage 1: bei mir wird die Freihandfläche ab Januar 2017 erstellt.
https://www.herber.de/bbs/user/110349.xlsm
Ich könnte mir nur vorstellen, dass in deiner Originaldatei deine Werte für das Diagramm nicht in Spalte B beginnen.
zu Frage 2: vom Pinzip her schon, du musst nur darauf achten, dass das Diagramm richtig angesprochen wird und der 1. Datenpunkt, ab dem die Fläche erstellt werden soll, richtig ermittelt wird.
Man könnte das natürlich auch mit einer Unterprozedur machen, indem man dieser mittels Schleife aus der Hauptprozedur den Diagrammnamen und den Bereich mit den Datumswerten übergibt. Ob und wie das dann genau aussieht kann ich im Detail nicht sagen, da ich deine anderen Diagramme bzw. den Aufbau ihrer Wertebereiche nicht kenne.


Anzeige
AW: Fläche unterhalb Graph färben
05.01.2017 14:19:25
Beverly
Hi Jay,
zu Frage 1: bei mir wird die Freihandfläche ab Januar 2017 erstellt.
https://www.herber.de/bbs/user/110349.xlsm
Ich könnte mir nur vorstellen, dass in deiner Originaldatei deine Werte für das Diagramm nicht in Spalte B beginnen.
zu Frage 2: vom Pinzip her schon, du musst nur darauf achten, dass das Diagramm richtig angesprochen wird und der 1. Datenpunkt, ab dem die Fläche erstellt werden soll, richtig ermittelt wird.
Man könnte das natürlich auch mit einer Unterprozedur machen, indem man dieser mittels Schleife aus der Hauptprozedur den Diagrammnamen und den Bereich mit den Datumswerten übergibt. Ob und wie das dann genau aussieht kann ich im Detail nicht sagen, da ich deine anderen Diagramme bzw. den Aufbau ihrer Wertebereiche nicht kenne.


Anzeige
AW: Fläche unterhalb Graph färben
05.01.2017 15:19:30
Jay
Ach tatsächlich...also manchmal sieht man gar nichts mehr. Meine Daten fangen ab E an nicht ab B
Die anderen Daten sind exakt so aufgebaut, die verschiedenen Linien starten nur von E4 bis E8 wie in meinem Beispiel File. Alle Daten sind bei mir ja in einem Graphen zusammen.
Aber Danke dir und ein schönes Wochenende wünsche ich.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige