Friday 27 October 2017

Excel Vba Moving Average Kode


Rolling Average Table Nedenfor ser vi på et program i Excel VBA som lager et rullende gjennomsnittstabell. Plasser en kommandoknapp på regnearket og legg til følgende kodelinje: Range (quotB3quot).Value WorksheetFunction. RandBetween (0, 100) Denne kodelinjen går inn i et tilfeldig tall mellom 0 og 100 i celle B3. Vi vil at Excel VBA skal ta den nye aksjeverdien og plassere den på den første posisjonen til rullende gjennomsnittstabellen. Alle andre verdier bør flyttes ned et sted og den siste verdien skal slettes. Opprett et regnearkendringshendelse. Kode som er lagt til i regnearkets endringshendelse, blir utført av Excel VBA når du endrer en celle på et regneark. 2. Dobbeltklikk på Sheet1 (Sheet1) i Project Explorer. 3. Velg regneark fra den nedtrekkbare listen. Velg Endre fra den høyre rullegardinlisten. Legg til følgende kodelinjer i regnearkets endringsarrangement: 4. Erklær en variabel som heter newvalue av typen Integer og to områder (førstevalg og lastfallsverdier). Dim ny verdi som helhet. firstfourvalues ​​Som Range, lastfourvalues ​​As Range 5. Verktøyet Endre begivenhet lytter til alle endringene på Sheet1. Vi vil bare at Excel VBA skal gjøre noe hvis noe endres i celle B3. For å oppnå dette, legg til følgende kodelinje: Hvis Target. Address quotB3quot Then 6. Vi initialiserer nyverdien med verdien av celle B3, førstevalg med Range (quotD3: D6quot) og lastfourvalues ​​med Range (quotD4: D7quot). Newvalue Range (quotB3quot).Value Set firstfourvalues ​​Range (quotD3: D6quot) Angi lastfourvalues ​​Range (quotD4: D7quot) 7. Nå kommer det enkle trikset. Vi vil oppdatere rullende gjennomsnittstabellen. Du kan oppnå dette ved å erstatte de fire siste verdiene med de fire første verdiene i tabellen og plassere den nye aksjeverdien i første posisjon. Lastfourvalues. Value firstfourvalues. Value Range (quotD3quot).Value newvalue 8. Ikke glem å lukke if-setningen. 9. Til slutt, skriv inn formelen AVERAGE (D3: D7) i celle D8. 10. Test programmet ved å klikke på kommandoknappen. Jeg vil beregne et glidende gjennomsnitt av det siste, si 20, tall for en kolonne. Et problem er at noen av cellene i kolonnen kan være tomme, de bør ignoreres. Eksempel: Et glidende gjennomsnitt av de siste tre ville være (155167201) 3. Ive prøvde å implementere dette ved hjelp av gjennomsnitt, offset, indeks, men jeg vet bare ikke hvordan. Jeg er litt kjent med makroer, slik at en slik løsning ville fungere bra: MovingAverage (A13) Takk for tips eller løsninger som ble spurt 12. mars kl 15:36 Skriv inn dette med kontrollhiftet for å gjøre det til en matriseformel. Dette vil finne de siste tre verdiene. Hvis du vil ha mer eller mindre, endre de to forekomstene av 3 i formelen til hva du vil. Denne delen returnerer det fjerde høyeste radnummeret av alle cellene som har en verdi, eller 5 i ditt eksempel fordi radene 6, 8 og 9 er de 1 til 3 høyeste radene med en verdi. Denne delen returnerer 9 TRUEs eller FALSEs basert på om radnummeret er større enn den fjerde største. Dette multipliserer verdiene i A1: A9 av de 9 TRUEs eller FALSEs. TRUEs konverteres til 1 og FALSE til null. Dette etterlater en SUM-funksjon som denne Fordi alle verdiene over 155 ikke tilfredsstiller radnummerkriteriet, blir multiplummet multiplisert med null. Jeg har skrevet et kort skript i VBA. Hopefull gjør det hva du vil. Her er du: 1) Jeg har satt grense til 360 celler. Det betyr at manuset ikke vil se etter mer enn 360 celler. Hvis du vil endre det, endrer du startverdien til telleren. 2) Skriptet returnerer ikke avrundet gjennomsnitt. Endre siste rad til MovingAverage Round (CDbl (tmp i), 2) 3) Bruken er akkurat som du ønsket, så skriv bare MovingAverage (a13) inn i cellen. Eventuelle kommentarer er velkommen. Gjennomsnittlig gjennomsnitt Dette eksemplet lærer deg hvordan du beregner det bevegelige gjennomsnittet av en tidsserie i Excel. Et glidende gjennomsnitt brukes til å utjevne uregelmessigheter (topper og daler) for enkelt å gjenkjenne trender. 1. Først, ta en titt på vår tidsserie. 2. På Data-fanen klikker du Dataanalyse. Merk: kan ikke finne dataanalyseknappen Klikk her for å laste inn add-in for Analysis ToolPak. 3. Velg Flytt gjennomsnitt og klikk OK. 4. Klikk i feltet Inngangsområde og velg området B2: M2. 5. Klikk i intervallboksen og skriv inn 6. 6. Klikk i feltet Utmatingsområde og velg celle B3. 8. Skriv en graf av disse verdiene. Forklaring: fordi vi angir intervallet til 6, er glidende gjennomsnitt gjennomsnittet for de forrige 5 datapunktene og det nåværende datapunktet. Som et resultat blir tinder og daler utjevnet. Grafen viser en økende trend. Excel kan ikke beregne det bevegelige gjennomsnittet for de første 5 datapunktene fordi det ikke er nok tidligere datapunkter. 9. Gjenta trinn 2 til 8 for intervall 2 og intervall 4. Konklusjon: Jo større intervallet jo flere tinder og daler utjevnes. Jo mindre intervallet, desto nærmere er de bevegelige gjennomsnittene til de faktiske datapunktene. Her er en kode som skal være nyttig for de som bruker teknisk analyse i handel og vil teste strategier i Excel. Den beregner det enkle, lineært vektede og eksponentielle glidende gjennomsnittet. Videre vil jeg presentere og forklare trinnene for å lage skjemaet og VBA-koden. Sett inn en UserForm 8211 Navn: MAForm Legg til fire etiketter fra Verktøykasse-kontrollene 8211 Bildetekst som ovenfor over utskriftsskjerm Legg til en ComboBox for det bevegelige gjennomsnittlige typevalget. Den ble kalt comboTypeMA Legg til to RefEdit-kontroller for inngangsområdet og utgangsområdet. Legg til en tekstboks for å velge den bevegelige gjennomsnittlige perioden Legg til to knapper: Navn: knappSend inn, Vedlegg: Send inn og Navn: buttonCancel, Caption: Cancel For å generere rullegardinlisten for MA typevalg og last brukerformularen, en ny modul vil bli satt inn med underkoden. ComboBox-elementene som befolkes ved å flytte gjennomsnittstypene og brukerskjemaet vil bli lastet inn. Alternativ Eksplisitt Sub loadMAForm () Med MAFormboTypeMA. RowSource. AddItem Simple. AddItem Weighted. AddItem Eksponensiell slutt med MAForm. Show End Sub Nedenfor er koden tilordnet Submit-knappen. Privat Sub-knappSubmitClick () Dim inputRange, outputRange As Range Inngangsrangen vil inneholde prisseriene som brukes til å beregne MAs, og outputRange vil bli fylt med gjennomsnittene for glidende gjennomsnitt. Dim inputPeriod As Integer Den glidende gjennomsnittlige perioden er erklært. Dim inputAddress, outputAddress As String Inngangs - og utgangsområdet erklæres som streng. Hvis comboTypeMA. Value ltgt Exponential og comboTypeMA. Value ltgt Simple og comboTypeMA. Value ltgt Weighted True Så MsgBox Vennligst velg en bevegelig gjennomsnittlig type fra listen. RefInputRange. SetFocus Exit Sub Denne delen av prosedyren håndhever de første begrensningene angående innsendte data. Hvis den bevegelige gjennomsnittstypen ikke finnes i rullegardinlisten, går prosedyren ikke videre til neste trinn, og brukeren blir bedt om å velge den igjen. ElseIf RefInputRange. Value Så MsgBox Vennligst velg innspillingsområde. RefInputRange. SetFocus Avslutt Sub ElseIf RefOutputRange. Value Then MsgBox Vennligst velg utdataområde. RefOutputRange. SetFocus Avslutt Sub ElseIf RefInputPeriod. Value Så MsgBox Vennligst velg den bevegelige gjennomsnittlige perioden. RefInputPeriod. SetFocus Avslutt Sub ElseIf Not IsNumeric (RefInputPeriod. Value) Så MsgBox Flytende gjennomsnittlig periode må være et tall. RefInputPeriod. SetFocus Exit Sub End Hvis andre restriksjoner er opprettet. Inngangsområdet, utgangsområdet og inngangsperioden må ikke være tomt. Også den bevegelige gjennomsnittlige perioden må være et tall. inputAddress RefInputRange. Value Angi inputRange Range (inputAddress) outputAddress RefOutputRange. Value Sett outputRange Range (outputAddress) inputPeriod RefInputPeriod. Value Argumentene for inputRange og outputRange intervaller vil bli lagt innAddress og outputAddress erklært som strenger. Hvis inputRange. Columns. Count ltgt 1 Da MsgBox Input-område kan ha bare en kolonne. RefInputRange. SetFocus Exit Sub InputRange må bare inneholde en kolonne. ElseIf inputRange. Rows. Count ltgt outputRange. Rows. Count Deretter har MsgBox Output-rekkevidde et annet antall rader enn inngangsområdet. RefInputRange. SetFocus Exit Sub End Hvis inputRange og outputRange må ha et like antall rader. Dim RowCount As Integer RowCount inputRange. Rows. Count Dim cRow som integer ReDim inputarray (1 til RowCount) For cRow 1 til RowCount inputarray (cRow) inputRange. Cells (cRow, 1).Value Neste cRow inputarray er deklarert som array og it8217s elementer tilsvarer verdiene fra hver rad i inngangsområdet. Hvis inputPeriod gt RowCount Da MsgBox Antall valgte observasjoner er amp RowCount amp og perioden er amp inputPeriod amp. Inngangsområdet må ha en høyere eller lik mengde elementer enn den valgte perioden. RefInputRange. SetFocus Exit Sub End Hvis en annen begrensning er lagt til 8211 Inngangsområdet må ha en høyere eller lik antall elementer enn perioden. Hvis inputPeriod lt 0 Then MsgBox Flytende gjennomsnittlig periode må være høyere enn 0. RefInputPeriod. SetFocus Exit Sub End Hvis den glidende gjennomsnittlige perioden må være høyere enn null. ReDim outputarray (inputPeriod To RowCount) Som variant Også array dimensjonene av outputarray er bestemt. Den nedre grensen til arrayet er inputPeriod-verdien, og den øvre grensen er verdien av RowCount (antall elementer i inputRange). Under delen av prosedyren utregnet det enkle glidende gjennomsnittet, hvis valget for comboTypeMA er enkelt. SMA ----------------------------------------- Hvis comboTypeMA. Value Simple Da Dim i , j Som helhet Dim temp Som dobbelt For jeg inputPeriod To RowCount temp 0 For j (i - (inputPeriod - 1)) Til jeg temp temp inputarray (j) Neste j outputarray (i) temp inputPeriod outputRange. Cells (i, 1).Value outputarray (i) Neste jeg outputRange. Cells (0, 1).Value SMA (amp inputPeriod amp) I utgangspunktet beregner prosedyren det bevegelige gjennomsnittet av de siste x tallene (x er lik inngangsperioden), med utgangspunkt i elementet i inputarrayet er lik inngangenPeriod. Nedenfor er et forenklet eksempel, som viser hvert trinn i prosedyren. I dette eksemplet er det fire tall (no01, no02, no03 og no04) fra rad 1 til rad 4 og den bevegelige gjennomsnittlige perioden er 3. Etter hvert nytt glidende gjennomsnitt beregnes, vil hver celle i outputRange ta verdien fra outputarray. Og etter hvert beregnes de bevegelige gjennomsnittene, i cellen over outputRange vil en tittel bli satt inn som inneholder den bevegelige gjennomsnittstypen og perioden. Denne neste delen beregner eksponentielt glidende gjennomsnitt. EMA ------------------------------------------ ElseIf comboTypeMA. Value Exponential Then Dim alfa Som dobbel alfa 2 (inputPeriod 1) For j 1 Til inputPeriod temp temp inputarray (j) Neste j outputarray (inputPeriod) temp inputPeriod Først bestemmes verdien av alfa. Fordi i beregningen er verdien av EMA basert på den tidligere EMA, vil den første være det enkle glidende gjennomsnittet. For jeg inputPeriod 1 To RowCount outputarray (i) outputarray (i - 1) alfa (inputarray (i) - outputarray (i - 1)) Neste jeg Starter med andre glidende gjennomsnitt, blir de beregnet ut fra formelen ovenfor: forrige EMA pluss alfa multiplisert med forskjellen mellom det nåværende nummeret fra inputarrayet og den tidligere EMA-verdien. For jeg inputPeriod To RowCount outputRange. Cells (i, 1).Value outputarray (i) Neste jeg outputRange. Cells (0, 1).Value EMA (amp inputPeriod amp) På samme måte som koden for SMA, vil outputarray bli befolket og cellen over outputarray vil representere typen og perioden for det bevegelige gjennomsnittet. Nedenfor er koden for beregning av det veide glidende gjennomsnittet. WMA ------------------------------------------ ElseIf comboTypeMA. Value Weighted Then Dim temp2 Som helhet For jeg inputPeriod To RowCount temp 0 temp2 0 For j (i - (inputPeriod - 1)) Til jeg temp temp inputarray (j) (j - i inputPeriod) temp2 temp2 (j - i inputPeriod) Neste j outputarray ) temp temp2 outputRange. Cells (i, 1).Value outputarray (i) Neste jeg outputRange. Cells (0, 1).Value WMA (amp inputPeriod amp) End Hvis nedenstående tabell inneholder trinnene for å beregne hver variabel som brukes til WMA-beregning. På samme måte som i det forrige eksempelet, er det for tall i inputRange. og inngangsperioden er 3. Nedenfor er den endelige koden til prosedyren, som laster ut brukerskjemaet. Loss MAForm End Sub Denne prosedyren er for Cancel-knappen. Det vil bli lagt til i samme modul. Privat sub-knappCancelClick () Løs MAForm End Sub

No comments:

Post a Comment