Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
928to932
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
928to932
928to932
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datentyp Trendfunktion

Datentyp Trendfunktion
30.11.2007 19:21:00
david
Hallo,
ich möchte die Trendfunktion in einem Makro verwenden!
Leider habe ich Probleme mit den verwendeten Datentypen.
Meine bisherige Lösung geht über die Verwendung von Zellen im Arbeitsblatt.
Hier mal der Code:
Dim torque As Integer
Dim power As Integer
ActiveWindow.Visible = False
Windows("Verbrennungsmotor.xls").Activate
Range("K10") = nmb
Range("E10").Select
ActiveCell.FormulaR1C1 = "=TREND(R[-6]C[-3]:R[9]C[-3],R[-6]C[-4]:R[9]C[-4]^{1,2,3,4,5,6},RC[6]^{1,2,3,4,5,6},)"
torque = Range("E10")
Range("F10").Select
ActiveCell.FormulaR1C1 = "=TREND(R[-6]C[-3]:R[9]C[-3],R[-6]C[-5]:R[9]C[-5]^{1,2,3,4,5,6},RC[5]^{1,2,3,4,5,6},)"
power = Range("F10")
LabelDrehmoment.Caption = torque
LabelLeistung.Caption = power
LabelDrehmoment.Enabled = True
LabelLeistung.Enabled = True
Label2.Enabled = True
Height = 195
die Variable nmb wurde als variant deklariert.
Die Lösung funktioniert, ist aber etwas unschön (Verwendung der Zellen).
Ich hoffe auf Tips.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datentyp Trendfunktion
30.11.2007 20:24:19
Christian
Hallo david,
einige Excel-Funktionen lassen sich direkt in VBA verwenden. Dabei liefert die Funktion das Ergebnis (also nur den Wert) zurück, ohne dass man eine Formel in eine Zelle schreiben muss.
zB:

Range("A2") = Application.WorksheetFunction.Sum(Range("A3:A10"))
'bzw. kürzer:
Range("A2") = Application.Sum(Range("A3:A10"))
'ebenso kann dies an eine Variable übergeben werden, zB:
res = Application.Sum(Range("A3:A10"))

Das funktioniert wohl auch bei der Excel-Funkion "Trend". Ich vermute aber, dass diese in VBA anders aufgebaut werden muss als in einer Excel-Tabelle. (google mal nach "WorksheetFunction.Trend")
Allerdings steige ich hier aus, da ich mit "Trend" noch nicht viel zu tun hatte... (daher Frage noch offen).
Grüße
Christian
PS: es wäre ganz hilfreich, wenn du eine kleine Beispiel-Datei hochladen würdest.

Anzeige
AW: Datentyp Trendfunktion
01.12.2007 11:57:55
schauan
Hallöchen,
der Aufbau von WorkSheetFunction.Trend ist eigentlich identisch.
Hoffe geholfen zu haben Grüße von André aus Gera - Stadt der Buga 2007 - Excel-97-2003

@ André
01.12.2007 13:15:00
Christian
Hallo André,
wie sieht dies in VBA denn aus, wenn du auch den Grad des Polynoms berücksichtigen willst?
Bsp Exelformel im Bereich "C11":
=TREND(C1:C10;A1:A10^{1.2.3};A11^{1.2.3})
oder als Array-Formel in "C11:C20":
{=TREND(C1:C10;A1:A10^{1.2.3};A11:A20^{1.2.3})}
wie lautet dies in VBA als WorksheetFunction:
myResult = Application.Trend(Range("C1:C10"), ...?)
bzw:
myArray = Application.Trend(Range("C1:C10"), ...?)
vielen Dank vorab
Gruß
Christian

Anzeige
AW: @ André
01.12.2007 14:03:00
david
Moin,
ich bin auch wieder dabei;-)
Ich kann nur Christians Frage unterstreichen.
Zudem kommt die Frage hinzu, welchen datentyp muss die variable NewX haben?
Die SUM-Funktion klappt bei mir auch ohne weiteres...
schöne grüße DAVID

AW: @ André
01.12.2007 15:23:00
schauan
Hallo Christian,
mit der Temperatur ;-) bin ich im Moment überfragt, zumindest was die VBA-Lösung betrifft.
Es gibt aber einige interessante Artikel und Beiträge, z.B.
http://msdn2.microsoft.com/en-us/library/bb239807.aspx
auch der Beitrag
https://www.herber.de/forum/archiv/908to912/t910042.htm
im Prinzip so. Statt der Arrays gehen natürlich auch Zellbezüge. Arrayoperationen musst Du eventuell vorher ausführen, aber wie gesagt bin ich mit den Graden hier nicht so firm. Ich beschäftige mich im Moment beruflich auch mit der Suche einer Lösung, aber nicht mit oberster Prio ...
Datentypen sind hier Variant. NewX bzw arrNX ebenso da es als Array vorliegen soll. Das Ergebnis wird dann ebenso ein Array, auch wenn in beiden nur ein Wert steht.

Sub test()
Dim arrX, arrY, arrNX
Dim varErg
arrX = Array(1, 2, 3, 4, 5)
arrY = Array(2, 4, 6, 8, 10)
arrNX = Array(6)
varErg = WorksheetFunction.Trend(arrY, arrX, arrNX)
End Sub


Hoffe geholfen zu haben Grüße von André aus Gera - Stadt der Buga 2007 - Excel-97-2003

Anzeige
VBA: Polynom und Trendfunktion
01.12.2007 17:28:00
Christian
Hallo David und André,
im folgenden pdf ist im Anhang ein VBA code enthalten, der die Koeffizienten eines Polynoms n-ten Grades zu gegebenen Wertepaaren berechnet. Also ziemlich genau das, was bei einer Trendlinie im Diagramm als Formel optional angezeigt werden kann.
Um einen bestimmten Trend-Wert zu bestimmen, müsste man also noch das Polynom für den gewählten X-Wert berechnen im Stil von: y = a*xn + b*xn-1+ ...
Die Koeffizienten a, b, ... hierzu liefert die Funktion. Wahrscheinlich lässt sich die Funktion auch noch vereinfachen, wenn man nicht die Koefffizienten sondern nur den nächsten Trend-Wert haben will.
Allerdings habe ich festgestellt, dass die Koeffizienten aus dieser Funktion von denen von Excel etwas abweichen. Was nun richtiger ist? - wahrscheinlich werden hier unterschiedliche Algorithmen verwendet - keine Ahnung, dafür ist Mathe schon zu lange her.
http://www.krucker.ch/DiverseDok/Parametrisierbares%20SPICE-Modell%20einer%20Gluehlampe.pdf
Grüße
Christian
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige