Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
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
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Trendsfunktion in VBA (lineare Regression)

Trendsfunktion in VBA (lineare Regression)
08.01.2008 18:07:02
paul
Hallo bin mit meinem Latain am Ende
Ich will den Trendwert einer linearen Regression in VBA abbilden und bin in diesem Forum auch schon auf die Funtion "Application.WorksheetFunction.LinEst" gestoßen:
Allerdings liefert die Funktion nicht den einen Trendwert sondern die Steigung der linearen Regression. Man kann als Argument auch gar nicht den "neuen x-Wert" angeben.
Ich würde sehr ungern die Parameter (Steigung, y-Achsen-Abschnitt) der linearen Funktion manuell ausrechnen um dann mit dem neuen x-Wert einen Trendwert zu berechnen.
Kennt jemand eine VBA-Funktion, die gleich den Trendwert berechnet (geht in Excel doch auch!)?
Mein Beispiel:
x-Werte: Cells(3,7) bis Cells(3,17) z.b: 1,2,3,4
y-Werte: Cells(1,7) bis Cells(1,17) z.b: 12, 26, 30, 62
neuer x-Werte für den Trend Cells(1,18) z.B. 5
Worksheets(Sheet_Daten).Cells(3, 18) = Application.WorksheetFunction.LinEst(Range(Sheets(Sheet_Daten).Cells(3, 7), Sheets(Sheet_Daten).Cells(3, 17)), _
Range(Sheets(Sheet_Daten).Cells(1, 7), Sheets(Sheet_Daten).Cells(1, 17)), True, True)
Syntax ist in etwa:
Worksheets(Zielzelle) = Application.WorksheetFunction.LinEst(x-Werte), (y-Werte), True, True)
Wie gesagt, da fehlt das Argument neuer x-Wert und es leifert nur die Steigung, nicht den neuen Trendwert?
In Excel gibt es die Funktion "=(Trend("x-Werte","y-Werte","neuer x-Wert"), die als Ergebnis den Trendwert liefert.
Als Makro-Auzeichnung sieht das so aus:
Worksheets(Sheet_Daten).Cells(3, 18) = "=TREND(RC[-11]:RC[-1],R[-2]C[-11]:R[-2]C[-1],R[-2]C)
Das kann ich aber nicht verwenden, da ich die Zeilen(x-Werte) später dynamische ansprechen muss.
Hiiiiiiiiiiiiiiiiiiiiiilfe - kann mir jemand weiterhelfen?

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Trendsfunktion in VBA (lineare Regression)
08.01.2008 23:44:00
ingUR
Hallo, @paul,
aus Deiner Aufgabenstellung kann ich nicht ersehen, welche Aufrufart Du für Dein Projekt vorsehen möchstest.
In meiner Basislösung übernehme ich Deine Anordung der Datenserie.
 EFGHIJKLMNOPQR
1 y12224878351081341167960204156,73
2Testdaten             
3 x123456789101112
4              
5Trendlinie 1931,343,856,468,981,4594107119,1131,6144156,72727
6             156,72727

Formeln der Tabelle
ZelleFormel
R1=CalcTrend(G1:Q1;R3)
G5=12,5454545455*G3+6,1818181818
H5=12,5454545455*H3+6,1818181818
I5=12,5454545455*I3+6,1818181818
J5=12,5454545455*J3+6,1818181818
K5=12,5454545455*K3+6,1818181818
L5=12,5454545455*L3+6,1818181818
M5=12,5454545455*M3+6,1818181818
N5=12,5454545455*N3+6,1818181818
O5=12,5454545455*O3+6,1818181818
P5=12,5454545455*P3+6,1818181818
Q5=12,5454545455*Q3+6,1818181818
R5=R1
R6=12,5454545455*R3+6,1818181818


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Schwarze Trendlinie und Trendgleichung im Diagramm sind mit der Diagrammfunktionalität "Trendlinie..." mit der Datenbasis der Werte G1:Q1;G3:Q3 erstellt, während die Trendlinie, die den X-Punkt R13 einbindet, über die Berechnung der Gleichung erfolgt. Das Ergebnis ist für den Datenpunkt X=12 identisch mit dem VBA-Funktionsergebnis.
Die Zellenfomel CalcTrend erwartet als Argument den Bereich der bekannten Y-Werte, hier G1:Q1, und die Referenz auf die Zelle mit dem vorgegebenen X-Wert, also hier R3, für den der Trendwert mit der VBA-Funktion berechnet werden soll (Eintrag in R1 als Rückgabewert).
Diese Funktion (CalcTrend) kann jedoch auch benutzt werden, um die Werte innerhalb einer Prozedur, hier z.B. CalcNewTrendValue zu berechnen.
Sub CalcNewTrendValue() Dim newValue As Double newValue = CalcTrend(Range("G1:Q1"), Range("R3")) End Sub Public Function CalcTrend(ByRef DataR As Range, newX as Range) As Double Dim maxData As Long, ws As Worksheet Dim XR As Range, newX As Range Set ws = Worksheets("Tabelle1") maxData = DataR.Count Set XR = ws.Range(Replace(DataR.Address, "$1", "$3")) CalcTrend = CDbl(Application.WorksheetFunction.Trend(DataR, XR, newX)(1)) End Function

Vielleicht gelingt es Dir, diese Basislösung so zu verändern, dass Du daraus einen Baustein für Dein Projekt erstellen kannst.
Viel Erfolg
Uwe

Anzeige
AW: Nachtrag:
09.01.2008 14:34:59
ingUR
Hallo, @paul,
auf die Datentypumwandlung des Rückgabewertes der WorkSheetFunction.Trend kann verzichtet werden,
da der spezifizierte Rückgabewert bereist von Datenryp Double ist:
statt:
CalcTrend = CDbl(Application.WorksheetFunction.Trend(DataR, XR, newX)(1))
mit Typenumwandlungsfunktion CDbl(...), die nur überflüsssig aber nicht falsch ist, genügt:
CalcTrend = Application.WorksheetFunction.Trend(DataR, XR, newX)(1)
Gruß,
Uwe

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige