Sunday 12 November 2017

Beregn Bevegelse Gjennomsnittet Vba


Flytende 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. 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 beregning Flytende gjennomsnittlig beregning Flytende gjennomsnittlig beregning Jeg prøver å beregne et glidende gjennomsnitt for en serie data. Jeg vil generere det bevegelige gjennomsnittet for hvert punkt i dataene for å vise i en graf. Uansett, nedenfor er et eksempel fra MS Support. Jeg har fulgt til brevet, men min gir ikke et bevegelige gjennomsnitt. Den gjentar det samme datapunktet igjen og igjen (det første datapunktet). Så jeg tror ikke funksjonen er å finne startdatoen i MyRST. Seek-linjen, og returnerer derfor bare det første datapunktet. Endelig (kanskje gjør dette veldig enkelt) Jeg er forvirret om hvordan indeksene fungerer. Jeg trodde du kunne bare ha en primærnøkkel, men tilsynelatende kan du opprette flere feltbegrensninger. Jeg har forsøkt å gjøre dette med følgende datadefinisjonsforespørsel: ALTER TABLE Table1 ADD CONSTRAINT NoDupes UNIQUE (ValutaType, TransactionDate) Beklager lengden på dette innlegget. Jeg setter pris på hjelpen din. Følgende utvalgsfunksjon beregner bevegelige gjennomsnitt basert på et bord med en primærnøkkel med flere felt. Den ukentlige verdien av utenlandsk valuta brukes til dette eksemplet. For å opprette prøvefunksjonen, følg disse trinnene: Opprett følgende tabell og lagre den som Tabell1: Tabell: Tabell1 --------------------------- -------------- Feltnavn: ValutaType Primærnøkkeldatatype: Tekstfeltstørrelse: 25 Feltnavn: Transaksjonsdato Primærnøkkeldatatype: DateTimeformat: Kort dato Feltnavn: Ranger Datatype: Valuta Decimal Steder: 4 Se tabellen i databladvisning og skriv inn følgende verdier: CurrencyType TransactionDate Rate ------------------------------- ------------- Yen 8693 0.0079 Yen 81393 0.0082 Yen 82093 0.0085 Yen 82793 0.0088 Yen 9393 0.0091 Mark 8693 0.5600 Mark 81393 0.5700 Mark 82093 0.5800 Mark 82793 0.5900 Mark 9393 0.6000 Åpne en ny modul og skriv inn Følgende funksjoner: Funksjon MAvgs (Perioder som helhet, StartDate, TypeName) Dim MyDB Som DATABASE, MyRST Som RecordSet, MySum As Double Dim I, x Sett MyDB CurrentDb () Set MyRST MyDB. OpenRecordset (Tabell1) På Feil Fortsett Neste MyRST. Index PrimaryKey x Perioder - 1 ReDim Store (x) MySum 0 For i 0 Til x MyRST. MoveFirst MyRST. Seek, TypeName, StartDate Disse to variablene skal være i samme rekkefølge som de primære nøkkelfeltene i tabellen. Lagre (i) MyRSTRate Hvis I lt x Så StartDate StartDate - 7 De 7 her antar ukentlig data 1 for daglige data. Hvis StartDate lt 8693 Da blir MAvgs Null: Exit Function 8693 erstattet med den tidligste datoen i dataene i tabellen. MySum Store (i) MySum Next I MAvgs MySum Perioder MyRST. Close End Function Opprett følgende spørring basert på Table1-tabellen: Query: Query1 --------------------- ---------------------------------- Felt: ValutaType Felt: Transaksjonsdatafelt: Feltfelt: Expr1: MAvgs (3 , TransactionDate, CurrencyType) MERK: Denne spørringen vil generere et tre ukers glidende gjennomsnitt av prisdataene. For å beregne et lengre eller kortere glidende gjennomsnitt, endre tallet 3 i querys Expr1-kolonnen til verdien du vil beregne. Kjør spørringen. Vær oppmerksom på at du ser følgende tre ukers glidende gjennomsnitt for hver valuta. En null-verdi indikerer at det ikke var nok tidligere verdier til å beregne det gjennomsnittet for uker. Valuta Type TransaksjonsDate-rate Expr1 Mark 080693 0.5600 Mark 081393 0.5700 Mark 082093 0.5800 0.57 Mark 082793 0.5900 0.58 Mark 090693 0.6000 0.59 Yen 080693 0.0079 Yen 081393 0.0082 Yen 082093 0.0085 0.0082 Yen 082793 0.0088 0.0085 Yen 090393 0.0091 0.0088 RE: Moving Average Calculation dhookom (Programmerer) 28 Jun 10 21:15 Hvor gammel er den koden Den bruker ikke eksplisitt DAO og nevner ikke at dette ikke vil fungere sammen med koblede tabeller. Dim MyDB som DAO. Database, MyRST som DAO. Recordset. Jeg ville bruke en subquery i stedet for et platesett. Det kan se ut som: SELECT CurrencyType, TransactionDate, Rate, (velg gjennomsnitt (rente) fra tabell1 B hvor A. valutaType B. valutaType og A. TransactionDate mellom B. TransactionDate - 14 og B. TransactionDate) fra tabell1 A RE: Moving Gjennomsnittlig beregning Det er virkelig perfekt. Jeg setter virkelig pris på hjelpen din. Koden du oppgav, beregner fremdeles 14 dagers glidende gjennomsnitt (plasserer glidende gjennomsnitt i posten for dag 1 i gjennomsnittet, der jeg ønsket at det skulle være et bakoverrettet gjennomsnitt, plassert i post 14). Jeg endret bare litt til følgende, og det ser ut til å fungere SELECT A. CurrencyType, A. TransactionDate, A. Rate, (SELECT Avg (Rate) FRA Tabell 1 B WHERE A. CurrencyType B. CurrencyType OG B. TransactionDate MELLOM A. TransactionDate - 14 OG A. TransactionDate) AS Expr1 FRA Tabell 1 AS A Du kan se, alt jeg gjorde var utveksling A for B i hvor klausulen. Dette er en veldig stor hjelp til meg, og jeg setter stor pris på det. Jeg har ikke sett koding som dette før, og ærlig talt forstår jeg ikke virkelig det. Jeg vet ikke hvordan SQL forstår hva B og A er. Jeg antar at de lager en slags alternativ referanse til tabell1. Hvis du kan gi noen veiledning, vil jeg virkelig sette pris på det. Også, kanskje noen referanse til materiale som jeg kunne se på Jeg er alltid veldig spent på å lære noe nytt om VBASQL, og jeg setter stor pris på din hjelp RE: Flytte gjennomsnittlig beregning PHV (MIS) 29 Jun 10 12:22 forstår hva B og A er de alias es RE: Flytte gjennomsnittlig beregning Takk, PHV. Det er bedre å forstå allerede RE: Moving Average Calculation joshery420 (TechnicalUser) 6 Jul 10 15:06 Wow, har aldri sett på SQL-visning før. Ypperlig hjelpsomme. Jeg prøver å få denne koden til å fungere i mitt eget datasett og jeg holder fast på et bestemt problem. pd2004, ikke sikker på om den nye subquery-koden fungerte på samme måte som den gamle VBA-koden eller ikke, men med dataene mine vises det fortsatt rullende gjennomsnitt, selv om det ikke er nok dager til å lage en lengde på gjennomsnittet. f. eks Hvis jeg utfører et 7-dagers rullende gjennomsnitt, viser dag 1 de samme dataene i 7DayAvg-kolonnen som det gjør i den daglige datakolonnen. Dag 2 vil vise gjennomsnittet av Dager 1 og 2, osv. Har noen av dere vite hvordan du skal fikse dette ved en tilfeldighet Også, takk for den gode kodetipset PHV. RE: Flytte gjennomsnittlig beregning joshery420 (TechnicalUser) 6 Jul 10 15:08 Woops, mente å takke dhookom for kodetoppen, ikke PHV. Men hei, takk til dere begge. XD RE: Flytte gjennomsnittlig beregning Jeg vil etterlate de beste løsningene til fagpersonene her, men du kan se i mitt opprinnelige innlegg hvordan Microsoft Help-eksemplet forsøker å håndtere det. Her er koden: Hvis StartDate lt 8693 Da blir MAvgs Null: Exit Function 8693 erstattet med den tidligste datoen i dataene i tabellen. De utelukker bare funksjonen dersom datoen ikke passer til kriteriene. Jeg vet ikke om du kunne inkorporere noe sånt i aliaskoden som ble levert av dhookem. Jeg liker ikke deres måte å håndtere dette på, og jeg mistenker at dhookem vil gi en mye mer elegant løsning. For mitt formål er problemet du beskriver, ikke noe problem, men jeg vil være interessert i å se noen løsninger. RE: Flytte gjennomsnittlig beregning dhookom (Programmerer) 6 Jul 10 17:05 Du kan prøve å bruke IIf () for å teste for en telling av antall poster. Forsiktig: Ikke testet notisblokkkoden følger: SELECT A. CurrencyType, A. TransactionDate, A. Rate, IIF ((SELECT Count (Rate) FRA Tabell 1 C HVOR A. CurrencyType C. CurrencyType OG C. TransactionDate MELLOM A. TransactionDate - 14 AND A. TransactionDate) 7, (SELECT Avg (Rate) FRA Tabell 1 B WHERE A. CurrencyType B. CurrencyType OG B. TransactionDate MELLOM A. TransactionDate - 14 AND A. TransactionDate), Null) AS Expr1 FRA Tabell 1 AS A RE: Moving Average Calculation

No comments:

Post a Comment