Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Regression





Frage

Hi! Habe per Makrorecorder eine Regressionsanalyse aufgezeichnet. Mein Problem ist das der X und Y Bereich sich verändert und dadurch auch meine Werte mein Ergebnis falsch ist. Kann man den X und Y Bereich per VBA oder anderes variable gestalten? Gruß AF

Antwort 1 von schnallgonz

Hi AF,
am besten stellst Du mal den Code Deines aufgezeichneten Makros ins Forum, damit die VBA-Profis hier nicht die Glaskugel bemühen müssen...
gruß
schnallgonz

Antwort 2 von VBA_Anfänger

Code

Sub Macro5()
´
´ Macro5 Macro
´ Macro recorded 24.10.2006 by nAF
´

´
Application.Run "ATPVBAEN.XLA!Regress", , , False, False, 95, "", True _
, False, True, False, , False
End Sub

X Werte Bereich im Moment $D$2:$D$216
Y Werte Bereich im Moment $C$2:$C$216

Werte stehen in der Tabelle RAA und Ausgabe der Werte in Tabelle Regression. Angeklickt bei der Regression Confidence Level 95%, Residuals, Residual Plot

Gruß AF

Antwort 3 von schnallgonz

Hi,
ich habe nur Excel97 und
Zitat:
Angeklickt bei der Regression Confidence Level 95%, Residuals, Residual Plot
sagt mir gar nichts, aber ich versuche es mal "blind":

nimm irgendeine freie Zelle z.B. "F1" in der RAA.xls und schreibe folgende Formel dort rein:
=ANZAHL(C2:C1000)

Damit wird die Anzahl der Werte im vorgegebenen Bereich gezählt, in Deinem Beispiel also 215 Werte.
Diesen Wert läßt Du durch das Makro auslesen und fügst 1 hinzu für die ZeilenNr (wenn die Werte in Zeile 2 anfangen):

ende = Range("F1").Value + 1


Danach die regressionsformel wie folgt:

Application.Run "ATPVBAEN.XLA!Regress", Sheets("RAA").Range("$C$2:$C$" & (ende)), _
        Sheets("RAA").Range("$D$2:$D$" & (ende)), False, False, 95, "", True, False, True, False, , False



Voraussetzung ist, dass die Werte immer in den Spalten C und D ab Zeile 2 bis Zeile 1000 stehen, sonst mußt Du den Code anpassen.
Ich hoffe, es funzt.
mfg
schnallgonz

Antwort 4 von Beverly

Hi,

die letzte belegte Zelle lässt sich einfacher ermitteln - ohne Formel in irgendeiner Zelle

    Dim ende As Long
    ende = IIf(IsEmpty(Cells(Rows.Count, 3)), Cells(Rows.Count, 3).End(xlUp).Row, Rows.Count)


Damit ist der Datenbereich beliebig erweiterbar und besitzt als Obergrenze nur die Zeilenanzahl der Exceltabelle.

Bis später,
Karin

Antwort 5 von schnallgonz

Salvete,
noch kürzer:
ende = Range("C65536").End(xlUp).Row


Hauptsache, in Spalte C stehen nur die Y-Werte und sonst nichts.
gruß
schnallgonz

Antwort 6 von Beverly

Hi schnallgonz,

die Anzahl an Zeichen in diesem Code ist weniger, das stimmt, aber was machst du bei Excel2007? Dort gibt es mehr als 65536 Zeilen... Der Code mit Iff dagegen ist universell einsetzbar da unabhängig von der Zeilenanzahl.

Bis später,
Karin

Antwort 7 von schnallgonz

Hallo Karin,
ich arbeite noch mit Excel97...
und das Beispiel von VBA_Anfänger bezog sich auf 215 Werte.
Excel2007 soll 1Mio Zeilen verarbeiten können, da hat sich bei Microsoft nach nur 10 Jahren was geändert ;-)

Man könnte also schreiben:

ende = Range("C1000000").End(xlUp).Row


Aber jeder wie er will, es gibt mehrere Lösungen.

gruß
schnallgonz

Antwort 8 von Beverly

Hi schnallgonz,

richtig, es gibt viele Lösungsmöglichkeiten und viele arbeiten noch mit Excel97 (ich in der Firma übrigens teilweise auch) und für Otto-Normalverbraucher liegt Excel2007 noch viele Jahre in der Zukunft. Aber ist es nicht besser, einem User neben anderen auch eine Lösung anzubieten, die keinerlei Beschränkung unterliegt - zumal es ja eine solche Lösung gibt? Ich denke, es wäre ein wenig in die falsche Richtung und nicht unbedingt im Sinne des Users gedacht, wenn man dies nicht täte. Letztendlich muss zwar der User selbst entscheiden, aber er sollte wenigstens die Chance erhalten, auch moderenere Möglichkeiten kennenzulernen.

Bis später,
Karin

Antwort 9 von VBA_Anfänger

Danke Leute funktioniert super!

Gruß AF

Antwort 10 von schnallgonz

Salve,
Danke für die Rückmeldung
gruß
schnallgonz

Antwort 11 von Knubbel

Hi Berverly (Karin),
@ all,

Zitat:
die letzte belegte Zelle lässt sich einfacher ermitteln - ohne Formel in irgendeiner Zelle

Dim ende As Long
ende = IIf(IsEmpty(Cells(Rows.Count, 3)), Cells(Rows.Count, 3).End(xlUp).Row, Rows.Count)


Ich habe mich bemüht, ein wenig von VBA zu verstehen. Aber sagt mir bitte, wie kommt man an solch Ausdrücke wie vor zitiert?
Gibt es irgend wo ein Verzeichnis mit den möglichen Vba-Codes und deren Syntax?

Ich möchte zwar nicht mehr im großen Stiel programmieren, würde aber gern die sich ergebenden Möglichkeiten erfahren.

mfg Knubbel

Antwort 12 von Beverly

Hi Knubbel,

die Funktion End(xlUp).Row liefert ein falsches Ergebnis, falls die letzte Zelle der Spalte belegt ist - teste es einfach mal. Deshalb wird zuerst geprüft, ob diese belegt ist oder nicht. Die Funktion Rows.Count ermittelt die Zeilenanzahl in der Tabelle, wodurch die Gesamt-Funktion eben für alle Excel-Versionen gültig ist, auch wenn in vielen Fällen die von schnallgonz gepostete Lösung ausreichend sein dürfte.

Solche Funktionen ergeben sich im Laufe des täglichen Umgangs mit Excel, weil man feststellt, dass eine bisher verwendete Funktion irgendwann mal auf einen Fehler hinausläuft. Viele Möglichkeiten sind ja auch in der Hilfe beschrieben, die dann entsprechend angepasst werden müssen.

Bis später,
Karin

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: