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
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
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
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):
Danach die regressionsformel wie folgt:
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
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":Angeklickt bei der Regression Confidence Level 95%, Residuals, Residual Plot
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 + 1Danach 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, , FalseVoraussetzung 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
Damit ist der Datenbereich beliebig erweiterbar und besitzt als Obergrenze nur die Zeilenanzahl der Exceltabelle.
Bis später,
Karin
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:
Hauptsache, in Spalte C stehen nur die Y-Werte und sonst nichts.
gruß
schnallgonz
noch kürzer:
ende = Range("C65536").End(xlUp).RowHauptsache, 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
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:
Aber jeder wie er will, es gibt mehrere Lösungen.
gruß
schnallgonz
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).RowAber 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
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
Gruß AF
Antwort 10 von schnallgonz
Salve,
Danke für die Rückmeldung
gruß
schnallgonz
Danke für die Rückmeldung
gruß
schnallgonz
Antwort 11 von Knubbel
Hi Berverly (Karin),
@ all,
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
@ 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)
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
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

