Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1632to1636
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

Trendlinie Werte aus Gleichung lesen

Trendlinie Werte aus Gleichung lesen
12.07.2018 13:43:36
Nester
Hallo liebe Forum-Nutzer,
ich brauche dringend eure Hilfe.
Ich habe eine Trendlinie in Excel erstellt mir die Gleichung anzeigen lassen.
Sie hat 20 Nachkommastellen und geht bis x^6.
Ich muss mit den Werten vor dem x weiterrechnen. Hierfür habe ich bereits dieses Thema gefunden
https://www.herber.de/forum/archiv/852to856/852955_Gleichung_der_trendlinie_in_zelle_schreiben.html
Ich habe das Makro dort angepasst, sodass es für x^6 funktioniert, das sieht so aus.

Sub Makro1()
ActiveSheet.ChartObjects("Diagramm 5").Activate
ActiveChart.SeriesCollection(1).Trendlines(1).Select
With Selection
typ = .Name
End With
' hier müssen die ganzen if-Bedingungen rein für die Trendlinientyp
ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Select
Range("D2").Value = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text
End Sub

Sub Makro2()
'
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.SeriesCollection(1).Trendlines(1).Select
With Selection
typ = .Name
End With
' hier müssen die ganzen if-Bedingungen rein für die Trendlinientyp
ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Select
wert = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text
wert = Mid(wert, 2, Len(wert))
Range("d3").Select
ActiveCell.FormulaR1C1 = wert
End Sub

Sub vereinfacht()
Dim wert(1 To 100)
' hier wird jetzt alles im Makro selbst gemacht und dann in Zelle h2 bis h8 eingetragen
' Prinzip bleibt aber das gleiche wie schon in der Tabelle beschrieben
ActiveSheet.ChartObjects("Diagramm 5").Activate
ActiveChart.SeriesCollection(1).Trendlines(1).Select
ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Select
Formel = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text ' das ist die Formel _
gesamt
Formel = Right(Formel, Len(Formel) - 4)
findx1 = WorksheetFunction.Find("x", Formel)
findx2 = WorksheetFunction.Find("x", Formel, findx1 + 1)
findx3 = WorksheetFunction.Find("x", Formel, findx2 + 1)
findleer1 = WorksheetFunction.Find(" ", Formel)
findleer2 = WorksheetFunction.Find(" ", Formel, findleer1 + 1)
findleer3 = WorksheetFunction.Find(" ", Formel, findleer2 + 1)
findleer4 = WorksheetFunction.Find(" ", Formel, findleer3 + 1)
findleer5 = WorksheetFunction.Find(" ", Formel, findleer4 + 1)
länge = Len(Formel)
For n = 1 To länge
wert(n) = Mid(Formel, n, 1)
Next
For n = 1 To findx1 - 1
wert1 = wert1 & wert(n)
Next
For n = findleer1 To findx2 - 1
wert2 = wert2 & wert(n)
Next
For n = findleer3 To findx3 - 1
wert3 = wert3 & wert(n)
Next
For n = findleer5 To länge
wert4 = wert4 & wert(n)
Next
Range("h2").Value = CDbl(wert1)
Range("h4").Value = CDbl(wert2)
Range("h6").Value = CDbl(wert3)
Range("h8").Value = CDbl(wert4)
End Sub

Jedoch wird mir der erste Wert nicht korrekt angezeigt.
Des Weiteren scheint es Probleme mit Kommata/Punkten zu haben. Meine VBA kenntnisse sind nicht sonderlich gut. Könntet ihr mir helfen?
MfG
Nester
Hier mal eine beispielhafte Gleichung:
y = -0,00000000000027119142x6 + 0,00000000964124430828x5 - 0,00012856502071152600x4 + 0,76756309328279900000x3 - 2.142,89951014624000000000x2 + 10.420.627,42107010000000000000x - 517.648.327,23430700000000000000

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Mit CDbl hast du keine Chance, einen derart ...
12.07.2018 13:55:45
Luc:-?
…langen Wert mit allen Stellen in eine Zelle ausgeben zu lassen, Nester,
der muss Text bleiben, weil Xl ihn sonst abrundet, da die Xl-ZahlenDarstellungsGenauigkeit 15 Stellen beträgt. Das wurde ihn den letzten Wochen schon mindestens 2× angesprochen. Das letzte Mal steht zZ sogar noch im Forum (Variant mit Untertyp Decimal über CDec als TextZahl).
Gruß, Luc :-?
AW: CDbl reicht völlig aus.
12.07.2018 18:21:14
Daniel
Hi Luc
schau dir die Werte doch mal genau an.
keiner hat mehr als 15 signifikante Stellen.
der Rest sind Nullen.
dh CDBL müsste hier problemlos funktionieren.
Wenn Double die Standardgenauigkeit von Excel ist, wie wahrscheinlich ist es dann, dass MS für die Trendfunktion eine Ausnahme macht und diese mit höherer Genauigkeit berechnet?
Das würde ja auch gar nichts bringen, weil die ermittelten Werte in diese Genauigkeit gar nicht weiter verwendet werden könnten.
Gruß Daniel
Anzeige
Du hast dich verzählt und irrst außerdem, ...
12.07.2018 19:01:23
Luc:-?
…Daniel;
die ersten 3 Zahlen sind länger (20/20/18, Vorzeichen und 0, abgezogen), nur die letzten 4 haben nur 15 relevante Stellen.
Dass Xl und VBA mit mehr Stellen rechnen können und es auch tuen, beweist ja schon die Verwendung von Decimal, zu dem man in der VBE-Hilfe nachlesen kann, wieviel Stellen wirklich verwendet wdn (können). Aber irgendwo muss ja Schluss sein, die gerundete Zahl nichtsdestotrotz exakt, was eine RechenGenauigkeit von mindestens 1 Stelle mehr als anzeigbar erfordert.
Dass eine derartige Genauigkeit idR nicht erforderlich ist, ist unbestritten. Da es sich bei Faktoren in Trendlinien-Gleichungen aber um empirisch ermittelte Daten handelt, kann eine ggf erforderliche höhere Genauigkeit nicht ausgeschlossen wdn, da diese ja auch von der Variablen x abhängt, die hier mehrfach potenziert wird. Da diese Gleichung als Text ausgegeben wird, kann Xl (zur Sicherheit) auch mehr Stellen/Dezimalen abbilden als gemeinhin.
Gruß, Luc :-?
Anzeige
Nö Luc, du zählst falsch weil du nicht beachtest
12.07.2018 19:41:49
Daniel
dass Excel mit Gleitkommazahlen rechnet und daher die Lage des Kommas für die signifikanten Stellen keine Rolle spielt.
stell dir vor, die Nullen wären Leerzeichen und du wendest die VBA-Funktion TRIM auf den Wert an.
was übrig bleibt, sind die signifikanten Stellen, die für die Genauigkeit relevant sind.
-0,00000000000027119142 = -2,7119142 * 10^-13 = 8 signifikante Stellen
+0,00000000964124430828 = +9,64124430828 * 10^-9 = 12 signifikante Stellen
+0,00012856502071152600 = +1,28565020711526 * 10^-4 = 15 signifikante Stellen
Gruß Daniel
Stimmt, durch wiss GleitkommaDarstellung wdn ...
12.07.2018 20:20:42
Luc:-?
…es weniger, Daniel,
was dann auch bei CDbl verwendet wird. Falls hier nur die wiss Darstellung aufgelöst wird, kann es sein, dass dabei ebenfalls die 15-Stellen-Regel beachtet wird, worauf die EndNullen der anderen Zahlen hindeuten, was man aber wohl nur mit anderer Math-Software nachprüfen könnte, mit der man alle TrendFormen berechnen kann. Problematisch würde das also ggf nur beim Weiterrechnen wdn, aber nur, wenn die Multiplikation mit der x-Potenz mehr als 15 relevante Stellen ergeben würde, was aber dann höchstwahrscheinlich tatsächlich nicht mehr signifikant wäre.
Aber das scheint ja leider nicht das eigentliche Problem zu sein, dass mir so wie geschildert schleier­haft ist (s.unt), falls nicht das Eigen-Pgm explizit dafür sorgt…
Alles weitere siehe ebenfalls unten!
Luc :-?
Anzeige
AW: Trendlinie Werte aus Gleichung lesen
12.07.2018 14:26:27
Nester
Danke für eine Antwort.
Wie gesagt, meine Excel kenntnisse sind wirklich nur rudimentär.
Aber selbst wenn ich die Nachkommastellen auf 15 stelle, gibt er mir für den ersten Wert 271 anstatt -0,0...271 aus.
Wie kann ich mein Problem denn jetzt lösen?
Zu Variant mit Untertyp Decimal über CDec als TextZahl finde ich nichts
Ich meinte folgd Beitrag, ...
12.07.2018 19:36:58
Luc:-?
…Nester;
im Forum: https://www.herber.de/forum/messages/1633256.html
(Für spätere Nachnutzer dann ggf hier!)
Bei den langen 0,…-Werten sollte das geschilderte Problem eigentlich nicht auftreten, wenn du eine lokale dt Xl-Version verwendest. Die anderen Werte enthalten TsderTrennzeichen, die entfernt wdn müssen, wenn die Werte in 15stellige Zahlen umgewandelt wdn sollen.
Letzteres wäre nicht erforderlich, wenn du dir nicht dieses unsägliche TsderTrennzeichen von MS hättest aufoktroyieren lassen. Ich ver­wende das in Dtschld für Druckerzeugnisse übliche einfache Leerzeichen (ASCII=32, andere Leerzeichen würden ebenfalls Probleme bereiten), dass von Xl und VBA in Zahlen (und Fmln) idR ignoriert wird.
Falls dir auch bei den ersten 3 Zahlen eine Genauigkeit von 15 Dezimalen ausreicht, kannst du es ja mal mit Daniels Ansatz probieren, wenn du bei den anderen 4 Werten meinen Hinweis bzgl des Tsder­Trenn­zeichens beachtest. Ansonsten belasse die ersten 3 als Text­Zahl. Über Deklaration als Variant kannst du mit diesen per CDec auch mit allen Stellen weiter­rechnen und musst erst das auszu­ge­bende End­Ergebnis sinnvoll runden.
Luc :-?
Anzeige
Bitte auch meine 2.AW an Daniel beachten! owT
12.07.2018 20:22:31
Luc:-?
:-?
AW: Trendlinie Werte aus Gleichung lesen
12.07.2018 18:17:10
Daniel
Hi
was meinst du mit "wird nicht korrekt angezeigt?"
was wird denn genau angezeigt und was sollte deiner Meinung nach angezeigt werden?
zur Kontrolle:
lass dir Ergebnisse wert1-wert4 zunächst einmal ohne Umwandlung von Text in Zahl als Ergebnis anzeigen.
Range("h2").Value = "'" & wert1

damit kannst du dann überprüfen, ob der Fehler schon beim Zerlegen der Formel in die Teiltexte entsteht oder erst beim Umwandeln in eine Zahl.
(du kannst die Umwandlung dann ja in der Zelle daneben anzeigen lassen)
Range("h2").Value = "'" & wert1
Range("i2").Value = CDbl(wert1)
aber ich finde, du machst das Zerlegen des Formeltextes umständlich.
Ich würde hier nach ein paar Ersetzungen mit SPLIT arbeiten und das ganze so erstellen, dass die Anzahl der Teilsummen variabel ist und sich der Code automatisch daran anpasst.
schau dir mal diesen Code an:
Sub vereinfacht()
Dim Formel As String
Dim TeilFormeln
Dim i As Long
' hier wird jetzt alles im Makro selbst gemacht und dann in Zelle h2 bis h8 eingetragen
' Prinzip bleibt aber das gleiche wie schon in der Tabelle beschrieben
'ActiveSheet.ChartObjects("Diagramm 1").Activate
'ActiveChart.SeriesCollection(1).Trendlines(1).Select
'ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Select
'Formel = ActiveChart.SeriesCollection(1).Trendlines(1).DataLabel.Text ' das ist die Forme1  _
gesamt
Formel = "y = -0,00000000000027119142x6 + 0,00000000964124430828x5 - 0,00012856502071152600x4 +  _
0,76756309328279900000x3 - 2.142,89951014624000000000x2 + 10.420.627,42107010000000000000x - 517.648.327,23430700000000000000"
Formel = Mid(Formel, 5)
Formel = Replace(Formel, "x ", "x1")
Formel = Formel & "x0"
Formel = Replace(Formel, " ", "")
Formel = Replace(Formel, "+", "|")
Formel = Replace(Formel, "-", "|-")
Formel = Replace(Formel, "x", "|")
Do While Left(Formel, 1) = "|"
Formel = Mid(Formel, 2)
Loop
TeilFormeln = Split(Formel, "|")
ReDim Werte(1 To UBound(TeilFormeln) / 2 + 0.5, 1 To 2)
For i = 1 To UBound(TeilFormeln) Step 2
Werte(i / 2 + 0.5, 1) = CDbl(TeilFormeln(i - 1))
Werte(i / 2 + 0.5, 2) = "* x^" & TeilFormeln(i)
Next
Range("h2").Resize(UBound(Werte, 1), UBound(Werte, 2)) = Werte
End Sub

für Testzwecke verwende ich die von dir angegebene Formel.
btw der von Luc gebrachte Einwand ist hier nicht zutreffend.
du kannst hier problemlos mit CDbl arbeiten, da keine deiner Werte mehr als 15 signifikante Stellen hat.
du lässt dir zwar 20 stellen anzeigen, aber alles was über 15 Stellen hinaus geht, wird dir als 0 angezeigt.
Excel kann nur mit 15 Stellen genauigkeit rechnen. hierzu zählst du ab der 1. Ziffer nach links.
Wo das komma sitzt, spielt hierfür überhaupt keine Rolle.
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige