Thursday 19 January 2017

Moving Average Returns Übertreffen

Rolling Average Table Im Folgenden werden wir ein Programm in Excel VBA, dass eine rollende durchschnittliche Tabelle erstellt wird. Platzieren Sie eine Befehlsschaltfläche auf Ihrem Arbeitsblatt und fügen Sie die folgende Codezeile hinzu: Range (quotB3quot).Value WorksheetFunction. RandBetween (0, 100) Diese Codezeile gibt eine Zufallszahl zwischen 0 und 100 in Zelle B3 ein. Wir wollen, dass Excel VBA den neuen Aktienwert annimmt und an die erste Position der rollenden Durchschnittstabelle setzt. Alle anderen Werte sollten sich um eine Stelle bewegen und der letzte Wert sollte gelöscht werden. Erstellen Sie ein Worksheet-Änderungsereignis. Code, der dem Worksheet Change Event hinzugefügt wird, wird von Excel VBA ausgeführt, wenn Sie eine Zelle in einem Arbeitsblatt ändern. 2. Doppelklicken Sie im Projekt-Explorer auf Sheet1 (Sheet1). 3. Wählen Sie in der linken Dropdown-Liste Arbeitsblatt aus. Wählen Sie Ändern aus der rechten Dropdown-Liste. Fügen Sie dem Worksheet Change Event die folgenden Codezeilen hinzu: 4. Deklarieren Sie eine Variable namens newvalue vom Typ Integer und zwei Bereiche (firstfourvalues ​​und lastfourvalues). Dim newvalue Als Integer. Firstfourvalues ​​As Range, lastfourvalues ​​As Range 5. Das Worksheet Change-Ereignis hört alle Änderungen auf Sheet1. Wir wollen nur Excel VBA, etwas zu tun, wenn etwas in Zelle B3 ändert. Um dies zu erreichen, fügen Sie die folgende Codezeile hinzu: If Target. Address quotB3quot Then 6. Wir initialisieren newvalue mit dem Wert von Zelle B3, firstfourvalues ​​mit Range (quotD3: D6quot) und lastfourvalues ​​mit Range (quotD4: D7quot). Newvalue Bereich (quotB3quot).Value Set firstfourvalues ​​Bereich (quotD3: D6quot) Set lastfourvalues ​​Bereich (quotD4: D7quot) 7. Jetzt kommt der einfache Trick. Wir möchten die Rolling-Average-Tabelle aktualisieren. Sie können dies erreichen, indem Sie die letzten vier Werte durch die ersten vier Werte der Tabelle ersetzen und den neuen Aktienwert an die erste Position setzen. Lastfourvalues. Value firstfourvalues. Value Bereich (quotD3quot).Value newvalue 8. Vergessen Sie nicht, die if-Anweisung zu schließen. 9. Geben Sie abschließend die Formel AVERAGE (D3: D7) in die Zelle D8 ein. 10. Testen Sie das Programm, indem Sie auf die Befehlsschaltfläche klicken. Ich möchte einen gleitenden Durchschnitt der letzten, sagen wir 20, Zahlen einer Spalte berechnen. Ein Problem ist, dass einige Zellen der Spalte leer sein können, sie sollten ignoriert werden. Beispiel: Ein gleitender Durchschnitt der letzten drei wäre (155167201) 3. Ive versucht, diese mit durchschnittlichen, Offset, Index implementieren, aber ich weiß einfach nicht wie. Im ein wenig vertraut mit Makros, so würde eine solche Lösung gut funktionieren: MovingAverage (A13) Vielen Dank für alle Tipps oder Lösungen Geben Sie dies mit Controlshiftenter, um es eine Matrix-Formel. Hier finden Sie die letzten drei Werte. Wenn Sie mehr oder weniger wollen, ändern Sie die beiden Instanzen von 3 in der Formel, was auch immer Sie wollen. Dieser Teil gibt die 4. höchste Zeilennummer aller Zellen zurück, die einen Wert haben, oder 5 in Ihrem Beispiel, da die Zeilen 6, 8 und 9 die 1. bis 3. höchsten Zeilen mit einem Wert sind. Dieser Teil gibt 9 TRUEs oder FALSEs zurück, basierend darauf, ob die Zeilennummer größer als die 4. größte ist. Diese multipliziert die Werte in A1: A9 mit diesen 9 WAHREN oder FALSE. TRUEs werden in 1 und FALSEs auf null konvertiert. Dies lässt eine SUM-Funktion wie folgt Weil alle Werte über 155 nicht das Zeilennummerkriterium erfüllen, wird das Get mit Null multipliziert. Ich habe ein kurzes Skript in VBA geschrieben. Hopefull es tut, was Sie wollen. Hier sind Sie: 1) Ich habe Limit auf 360 Zellen gesetzt. Das bedeutet, dass das Skript nicht mehr als 360 Zellen sucht. Wenn Sie sie ändern möchten, ändern Sie den Anfangswert des Zählers. 2) Das Skript gibt nicht gerundeten Durchschnitt zurück. Ändern Sie die letzte Zeile in MovingAverage Round (CDbl (tmp i), 2) 3) Die Verwendung ist genau wie Sie wollten, so geben Sie einfach MovingAverage (a13) in die Zelle. Kommentare sind willkommen.


No comments:

Post a Comment