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

RGP-Funktion per VBA-Makro möglich?

RGP-Funktion per VBA-Makro möglich?
13.12.2005 13:52:08
Thias
Hallo Forum-Gemeinde,
ich habe ein Problem mit der RGP Funktion. Da ich diese Funktion häufig nutze um mir die Koeffizienten von Ausgleichspolynomen verschiedener Ordnung zu berechnen (Grad 1 bis 6), würde ich diesen Ablauf gerne als VBA-Makro nutzen.
Ich habe mir den typischen Ablauf für das Aufziehen des Werte-Arrays für ein Polynom 2ter Ordnung und der Eingabe der RGP Funktion mal mittels des Makrorekorders angeschaut. Dieser zeigt mir nach der Eingabe von =RGP(H11:H453;K11:K453;WAHR;WAHR)

Sub RGP_Test()
Range("X3:Z7").Select 'aufziehen des Lösungsarrays
Selection.FormulaArray = _
"=LINEST(R[8]C[-16]:R[450]C[-16],R[8]C[-13]:R[450]C[-13],TRUE,TRUE)"
End Sub

Aus der Eingabe wird also dieser Kauderwelsch. Ich kann zwar noch nachvollziehen, dass die Angaben anscheinend absolute Positionsangaben meiner Datenreihen sind, doch warum aus der RGP-Funktion aufeinmal "LINEST" wird ist mir nicht klar. Das ist aber auch nicht das Problem...
Das Problem ist vielmehr, dass ich immer unterschiedlich lange Datenreihen habe, für die die RGP Funktion die Lösungsmatrix berechnen soll. Da in der RGP Funktion aber nur absolute Angaben stehen, nützt mir das aufgezeichnete Makro daher nichts.
Kann mir einer der anwesenden Experten weiterhelfen, wie ich es per VBA-Script hinbekomme, dass mir das Makro automatisch die richtige/aktuelle Länge der Datenreihen in die RGP-Funktion einsetzt und das Lösungsarray darstellt?
Meine Rohdaten habe ich unter https://www.herber.de/bbs/user/29194.xls
hochgeladen. Dort habe ich beispielhaft zwei Arrays aufgezogen und die RGP-Funktion umständlich eingetippt (nachdem ich ebenso umständlich nach unten gescrollt habe um zu schauen, wo die Daten aufhören damit ich den Endpunkt weiß).
Sollte sich nun die Länge der Datenreihen erhöhen, passen meine Angaben im Lösungsarray ja nicht mehr und die Koeffizienten des Ausgleichspolynoms werden nicht mehr korrekt berechnet, da die letzten Daten nicht mehr in die Berechnung mit eingehen!
Für dieses komplexe Problem bräuchte ich kompetente Hilfe, da ich dass alleine leider niemals hinbekomme!
Gruß Thias

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

Betreff
Datum
Anwender
Anzeige
AW: RGP-Funktion per VBA-Makro möglich?
13.12.2005 14:08:55
Klaus-Dieter
Hallo Thias,
grunsätzlich stehen alle Tabellenfunktionen auch in VBA zur Verfügung. Das sieht immer so aus: Application.WorksheetFunction.Linest(Deine Parameter) wobei die Sytax natürlich indentisch mit der Tabellenfunktion ist.
Viele Grüße Klaus-Dieter

Online-Excel
AW: RGP-Funktion per VBA-Makro möglich?
13.12.2005 14:20:16
Thias
Hallo Klaus-Dieter,
so was hattest Du ja schonmal erwähnt, bei einer älteren Frage von mir. Nur leider hat auch Dein alter Tipp nicht funktioniert - und nun hat sich mein Problem ja noch ein wenig ausgedehnt. Wäre also für ein konkrete Hilfe sehr dankbar!
Gruß Thias
Anzeige
AW: RGP-Funktion per VBA-Makro möglich?
13.12.2005 14:26:33
Reinhard
Hi Thias,
R1C1-Schreibweise ist halt festgelegt auf englisch rgp=linest. Zumindest bei meiner Excelversion. Vielleicht ast du ja schon FormulaArrayLocal so wie bei Formulalocal wo man auch Deutsch eingeben kann .
Nachfolgendes Makro läuft halbwegs, musst es noch leicht korrigieren, aber der Grundansatz stimmt.
Option Explicit
Sub rgp2()
Dim zei1, zei2, sp1, sp2, letzte, a, b
zei1 = 3
sp1 = 24 'X
zei2 = 7
sp2 = 26
a = sp1 - 16
letzte = Range("A65536").End(xlUp).Row
Range(Cells(zei1, sp1), Cells(zei2, sp2)).Select
MsgBox "=LINEST(R[11-" & zei1 & "]C[" & sp1 & "-16]:R[" & letzte & "]C[" & sp1 & "-16],R[11-" & zei1 & "]C[-13]:R[" & letzte & "]C[-13],TRUE,TRUE)"
Selection.FormulaArray = "=LINEST(R[8]C[" & a & "]:R[" & letzte & "]C[" & a & "],R[8]C[-13]:R[" & letzte & "]C[-13],TRUE,TRUE)"
End Sub

Gruß
Reinhard
ps:Das Forum lebt auch von Rückmeldungen
Anzeige
AW: RGP-Funktion per VBA-Makro möglich?
13.12.2005 17:25:05
Thias
Hallo Reinhard,
nun, nach ca. ein bis zwei Stunden Fummelei und probieren, klappt es wunderbar! Danke für den super Ansatz!
Jetzt, wo ich die Lösung so sehe, ist es ja eigentlich garnicht nicht sooo schwer. Aber wenn man die Befehle nicht kennt, hat man ja nicht mal ansatzweise ne Idee, wie man das Problem angehen könnte.
Was die Sache extrem unübersichtlich macht ist die Tatsache, dass man alles von der Position der ersten Zelle der Lösungsmatrix aus sehen muss. Das kostet Zeit und nervt, funktioniert aber letztendlich ohne Probleme, wenn man dahintergekommen ist.
Also - vielen Dank nochmal und bis zur nächsten Frage!
Gruß Thias
Anzeige
AW: RGP-Funktion per VBA-Makro möglich?
13.12.2005 15:00:40
MichaV
Hallo,
1. Vergib 3 Namen (Einfgen- Name- Definieren):
KGmV bezieht sich auf: =BEREICH.VERSCHIEBEN(Tabelle1!$B$11;0;0;ANZAHL2(Tabelle1!$B$11:$B$1000);1)
Xeins bezieht sich auf: =BEREICH.VERSCHIEBEN(Tabelle1!$D$11;0;0;ANZAHL(Tabelle1!$D$11:$D$1000);1)
Xeinszwei bezieht sich auf: =BEREICH.VERSCHIEBEN(Tabelle1!$D$11;0;0;ANZAHL(Tabelle1!$D$11:$D$1000);2)
( Erklärung: http://www.online-excel.de/excel/singsel.php?f=62 )
2. Ändere die Formel in Spalte D so: =WENN(A11;A11;""), damit unten die Nullen verschwinden.
3. Nun kannst Du so schreiben:
Anzeige
AW: RGP-Funktion per VBA-Makro möglich?
13.12.2005 17:37:02
Thias
Hallo Micha,
ein sehr eleganter Ansatz. Wenn ich nur die Koeffizienten benötigen würde, wäre das eine super Lösung. Aber ich möchte auch noch gerne die anderen Werte der RGP-Lösungsmatrix nutzen, wie z.B. die Residualquadratsumme und das Bestimmtheitsmaß.
Wenn ich mir Deine Definition der Namen so anschaue, dann habe ich dazu aber eine Frage:
Verstehe ich es recht, dass Du bei dem folgenden Ausdruck quasi einfach auf einen Bereich von B11 bis B1000 schaust und damit verhinderst, dass Werte übersehen werden?
KGmV bezieht sich auf: =BEREICH.VERSCHIEBEN(Tabelle1!$B$11;0;0;ANZAHL2(Tabelle1!$B$11:$B$1000);1
Wäre es denn nicht auch möglich, statt den obigen Ausdruck den nachfolgenden zu verwenden?
=BEREICH.VERSCHIEBEN(Tabelle1!$B$11;0;0;ANZAHL2(Tabelle1!$B:$B))+JETZT()*0
Das +JETZT()*0 soll einfach in der Spalte B schauen, ob sich etwas verändert hat und sorgt damit für eine dynamische Aktualisierung. Ob das geht weiß ich nicht. Habe nur den Trick von jemand anderen in Bezug auf ein anderes Problem gelernt. Ob man das hierauf einfach so übertragen kann, weiß ich daher nicht. Vielleicht probiere ich es mal irgendwann aus.
Trotzdem auch Dir vielen Dank für Deine tolle Idee! Vielleicht kann ich die auch noch verwenden.
Gruß Thias
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige