Rolling Gemiddeld tabel sal ons kyk na 'n program in Excel VBA dat 'n rollende gemiddelde tafel skep. Plaas 'n opdrag knoppie op jou werkblad en voeg die die volgende kode reël: Range (quotB3quot).Value WorksheetFunction. RandBetween (0, 100) Hierdie kode lyn gaan 'n ewekansige getal tussen 0 en 100 in sel B3. Ons wil Excel VBA om die nuwe voorraad waarde te neem en plaas dit op die eerste posisie van die rollende gemiddelde tafel. Alle ander waardes moet afbeweeg een plek en die laaste waarde moet verwyder word. Skep 'n Werkkaart Verandering gebeurtenis. Kode by die Werkblad Verandering Event sal uitgevoer word deur Excel VBA wanneer jy 'n sel te verander op 'n werkblad. 2. Klik op Sheet1 (Sheet1) in die projek Explorer. 3. Kies Werkvel uit die drop-down list links. Kies Verandering van die reg drop-down list. Voeg die volgende kode lyne om die Werkblad Verandering Event: 4. Verklaar 'n veranderlike genoem newvalue van tipe Integer en twee reekse (firstfourvalues en lastfourvalues). Dowwe newvalue As Integer. firstfourvalues Soos Range, lastfourvalues Soos Range 5. Die Werkkaart Verandering Event luister na al die veranderinge op Sheet1. Ons wil net Excel VBA om iets te doen as iets verander in sel B3. Om dit te bereik, voeg die volgende kode reël: As Target. Address quotB3quot Toe 6. Ons inisialiseer newvalue met die waarde van sel B3, firstfourvalues met Range (quotD3: D6quot) en lastfourvalues met Range (quotD4: D7quot). newvalue Range (quotB3quot).Value Stel firstfourvalues Range (quotD3: D6quot) Stel lastfourvalues Range (quotD4: D7quot) 7. Nou kom die eenvoudige truuk. Ons wil hê dat die rollende gemiddelde tafel te werk. Jy kan dit doen deur die vervanging van die afgelope vier waardes met die eerste vier waardes van die tafel en die plasing van die nuwe voorraad waarde by die eerste posisie. lastfourvalues. Value firstfourvalues. Value Range (quotD3quot).Value newvalue 8. Moenie vergeet om die as verklaring af te sluit. 9. Ten slotte, gee die formule GEMIDDELDE (D3: D7) in sel D8. 10. Toets die program deur te kliek op die opdrag button. I wil 'n bewegende gemiddelde van die laaste bereken, sê 20, getalle van 'n kolom. 'N Probleem is dat sommige van die selle van die kolom leeg kan wees, moet hulle geïgnoreer word nie. Voorbeeld: 'n bewegende gemiddelde van die afgelope drie sou wees (155167201) / 3. Ive het probeer om dit met behulp van die gemiddelde, neutraliseer, indeks implementeer, maar ek eenvoudig nie weet hoe. Im 'n bietjie bekend is met makros, sodat so 'n oplossing sal werk boete: MovingAverage (A13) Dankie vir enige wenke of oplossings gevra 12 Maart 11 by 15:36 Gee dit met controlshiftenter om dit 'n skikking formule te maak. Dit sal die jongste drie waardes vind. As jy wil meer of minder, verander die twee gevalle van 3 in die formule om alles wat jy wil. Hierdie deel gee die 4 hoogste ry getal van al die selle wat 'n waarde, of 5 in jou voorbeeld gevolg rye 6, 8 en 9 is die 1ste deur 3 hoogste rye met 'n waarde. Hierdie deel terugkeer 9 TRUEs of FALSEs gebaseer op die vraag of die ry getal is groter as die 4 grootste. Dit vermeerder die waardes in A1: A9 deur diegene 9 TRUEs of FALSEs. TRUEs word omgeskakel na 1 en FALSEs aan nul. Dit laat 'n som funksie soos hierdie, want al die waardes bo 155 hoef te bevredig die ry aantal kriteria, die kry vermenigvuldig met nul. Ek het 'n kort script in VBA geskryf. Hopefull dit doen wat jy wil. Hier jy: 1) Ek het perk gestel aan 360 selle. Dit beteken dat die script nie sal kyk vir meer as 360 selle. As jy wil om dit te verander dan verander die aanvanklike waarde van die toonbank. 2) Die script terugkeer nie afgeronde gemiddelde. Verander die laaste ry om MovingAverage Ronde (CDbl (TMP / i), 2) 3) Die gebruik daarvan is net soos jy wil, so tik MovingAverage (A13) in die sel. Enige kommentaar is welcome. Here is 'n kode wat nuttig vir diegene wat met behulp tegniese ontleding in die handel moet wees en wil strategieë te toets in Excel. Dit bere die eenvoudige, lineêr geweeg en eksponensiële bewegende gemiddelde. Verdere sal Ek aan te bied en te verduidelik die stappe vir die skep van die vorm en die VBA-kode. Voeg 'n UserForm 8211 Naam: MAForm Voeg vier etikette van die Gereedskap Beheer 8211-onderskrifte soos per bogenoemde print screen Voeg 'n ComboBox vir die bewegende gemiddelde tipe seleksie. Dit is vernoem comboTypeMA Voeg twee RefEdit kontroles vir die insette reeks en die uitset reeks. Voeg 'n teksboks vir selecing die bewegende gemiddelde tydperk Voeg twee knoppies: Naam: buttonSubmit, Onderskrif: Stuur en Naam: buttonCancel, Onderskrif: Die styl Ten einde die drop-down list vir MA tipe seleksie genereer en laai die gebruiker vorm, 'n nuwe module sal plaas met die onderstaande kode. Die ComboBox items met bevolk deur bewegende gemiddeldes tipes en die gebruiker vorm sal gelaai word nie. Opsie Explicit Sub loadMAForm () Met MAFormboTypeMA. RowSource. AddItem Eenvoudige. AddItem Geweegde. AddItem Eksponensiële eindig met MAForm. Show End Sub Hier is die kode toegeskryf word aan die stuur knoppie. Private Sub buttonSubmitClick () Dim inputRange, outputRange Soos Range Die inputRange sal die prys reeks gebruik word vir die berekening van die MA en die outputRange sal ingevul word met die bewegende gemiddeldes waardes bevat. Dowwe inputPeriod As Integer Die bewegende gemiddelde tydperk verklaar. Dowwe inputAddress, outputAddress As String Die toevoer en afvoer reekse verklaar as string. As comboTypeMA. Value ltgt eksponensiële en comboTypeMA. Value ltgt eenvoudig en comboTypeMA. Value ltgt Geweegde Ware Dan MsgBox Kies 'n bewegende gemiddelde tipe uit die lys. RefInputRange. SetFocus afrit Sub Hierdie deel van die proses dwing die eerste beperkings met betrekking tot die voorgelê data. As die bewegende gemiddelde tipe nie vervat is in die drop-down list, sal die prosedure nie gaan na die volgende stap en die gebruiker sal gevra word om dit weer te kies. Elseif RefInputRange. Value Dan MsgBox Kies die insette reeks. RefInputRange. SetFocus afrit Sub elseif RefOutputRange. Value Dan MsgBox Kies die uitset reeks. RefOutputRange. SetFocus afrit Sub elseif RefInputPeriod. Value Dan MsgBox Kies die bewegende gemiddelde tydperk. RefInputPeriod. SetFocus afrit Sub elseif Nie IsNumeric (RefInputPeriod. Value) Dan MsgBox Moving gemiddelde tydperk moet 'n getal wees. RefInputPeriod. SetFocus afrit Sub End Indien Ander beperkings geskep. Die insette reeks, uitset reeks en insette tydperk moet nie leeg wees. Verder moet die bewegende gemiddelde tydperk 'n aantal wees. inputAddress RefInputRange. Value Stel inputRange Range (inputAddress) outputAddress RefOutputRange. Value Stel outputRange Range (outputAddress) inputPeriod RefInputPeriod. Value Die argumente vir inputRange en outputRange wissel sal wees inputAddress en outputAddress verklaar as snare. As inputRange. Columns. Count ltgt 1 Toe MsgBox kan Inset reeks net een kolom hê. RefInputRange. SetFocus afrit Sub Die inputRange moet net een kolom bevat. Elseif inputRange. Rows. Count ltgt outputRange. Rows. Count Dan MsgBox Uitgawe reeks het 'n verskillende aantal rye as die insette reeks. RefInputRange. SetFocus afrit Sub Einde As Die inputRange en outputRange moet 'n gelyke aantal rye. Dowwe RowCount As Integer RowCount inputRange. Rows. Count Dim Kraai Soos Integer ReDim inputarray (1 tot RowCount) Vir Kraai 1 Om RowCount inputarray (Kraai) inputRange. Cells (Kraai, 1).Value Volgende Kraai inputarray verklaar as skikking en it8217s elemente stem ooreen met die waardes van elke ry van die insette reeks. As inputPeriod GT RowCount Dan MsgBox aantal uitgesoekte waarnemings is amp RowCount amp en die tydperk is amp inputPeriod amp. Die insette reeks moet 'n hoër of gelyke hoeveelheid elemente as die gekose periode nie. RefInputRange. SetFocus afrit Sub Einde As 'n ander beperking bygevoeg 8211 moet die insette reeks 'n hoër of gelyke hoeveelheid elemente as die tydperk het. As inputPeriod Dit 0 Toe MsgBox Moving gemiddelde tydperk moet hoër as 0. RefInputPeriod. SetFocus afrit Sub End wees as die bewegende gemiddelde tydperk hoër as nul moet wees. ReDim outputarray (inputPeriod Om RowCount) Soos Variant Ook die skikking dimensies van outputarray bepaal. Die ondergrens van die skikking is die inputPeriod waarde en die bogrens is die waarde van RowCount (die aantal elemente in die inputRange). Onder deel van die prosedure bereken die eenvoudige bewegende gemiddelde, as die keuse vir comboTypeMA is eenvoudig. SMA ----------------------------------------- As comboTypeMA. Value Eenvoudige Dim Ek het toe , J As Integer Dim temp Soos Double want ek inputPeriod Om RowCount temp 0 Vir j (i - (inputPeriod - 1)) Om ek temp temp inputarray (J) langs j outputarray (i) temp / inputPeriod outputRange. Cells (i, 1 ).Value outputarray (i) Volgende i outputRange. Cells (0, 1).Value SMA (amp inputPeriod amp) Eintlik is die proses bere die bewegende gemiddelde van die laaste x getalle (x gelyk aan die inputPeriod), wat begin met die element van die inputarray gelyk aan die inputPeriod. Hier is 'n vereenvoudigde voorbeeld, wat elke stap van die proses toon. In hierdie voorbeeld is daar vier getalle (no01, no02, no03 en no04) van ry 1 tot Ry 4 en die bewegende gemiddelde tydperk is 3. Na elke nuwe bewegende gemiddelde bereken word, sal elke sel van die outputRange die waarde van die neem outputarray. En ná al die bewegende gemiddeldes bereken, in die sel hierbo outputRange n titel sal plaas met die bewegende gemiddelde tipe en tydperk. Dit volgende deel sal die eksponensiële bewegende gemiddelde bereken. EMO ------------------------------------------ elseif comboTypeMA. Value Eksponensiële Dim Toe Alpha Soos Double alfa 2 / (inputPeriod 1) Vir j 1 Om inputPeriod temp temp inputarray (J) langs j outputarray (inputPeriod) temp / inputPeriod eers die waarde van Alpha word bepaal. Want in die berekening, die waarde van die EMO is gebaseer op die vorige EMO, sal die eerste een die eenvoudige bewegende gemiddelde wees. Want ek inputPeriod 1 Om RowCount outputarray (i) outputarray (i - 1) alfa (inputarray (i) - outputarray (i - 1)) Volgende i Begin met die tweede bewegende gemiddelde, sal hulle bereken word op grond van die bogenoemde formule: die vorige EMO plus alfa vermenigvuldig met die verskil tussen die huidige getal van die inputarray en die vorige EMO waarde. Want ek inputPeriod Om RowCount outputRange. Cells (i, 1).Value outputarray (i) Volgende i outputRange. Cells (0, 1).Value EMO (amp inputPeriod amp) Net soos die kode vir SMA, die outputarray sal bevolk en die sel hierbo outputarray sal die tipe en tydperk van die bewegende gemiddelde verteenwoordig. Hier is die kode vir die berekening van die geweegde bewegende gemiddelde. WBG ------------------------------------------ elseif comboTypeMA. Value Geweegde Dan Dim temp2 As Integer want ek inputPeriod Om RowCount temp 0 temp2 0 Vir j (i - (inputPeriod - 1)) Om ek temp temp inputarray (j) (j - ek inputPeriod) temp2 temp2 (j - ek inputPeriod) Volgende j outputarray (i ) temp / temp2 outputRange. Cells (i, 1).Value outputarray (i) Volgende i outputRange. Cells (0, 1).Value WBG (amp inputPeriod amp) End As die tabel hieronder bevat die stappe vir die berekening van elke veranderlike wat gebruik word vir die WBG berekening. Net soos in die vorige voorbeeld, in hierdie een is daar vir getalle in die inputRange. en die insette tydperk is 3. Hier is die finale kode van die prosedure, wat die gebruiker vorm ontlaai. Los MAForm End Sub Die volgende prosedure is vir die styl knoppie. Dit sal in dieselfde module bygevoeg word. Private Sub buttonCancelClick () los MAForm End SubThread: VBA Moving Gemiddelde Berekening VBA Moving Gemiddelde Berekening Ek hoop ek dit korrek doen - Ive het 'n bietjie van die agtergrond inligting in my probleem vooraf en die kodering is hieronder gelys. Ek het gekry honderd aandele pryse, en ek verlang om VBA gebruik om 'n tien-dag Eenvoudige bewegende gemiddelde skep vir hierdie reeks van aandele pryse. Die waarnemings begin van tyd 0 tot t 100, en waarnemings begin van t 9 die program vereis natuurlik tien aandele pryse op die gemiddelde te skep. Vir elke nuwe dag, die oudste voorraad prys daal af en die volgende mees onlangse aandeelprys word - vandaar die berekening verander daagliks. Wat ek gedoen het is aangewys as die omvang van selle. Stock verwys na die oorspronklike data, en MovingAverage verwys na waar die data-uitsette te. Ek het dan geskep paar formules om die gemiddelde te bereken en vertoon dit in die bewegende gemiddelde reeks selle. Sien asseblief aangeheg kode vir verdere verwysing: Ek het 'n probleem as ek my kode uit te voer. Daar is geen foute, maar my uitset in die resultaat MovingAverage reeks vertoon slegs 0 vir die hele reeks, in teenstelling met wat die korrekte gemiddelde voorraad pryse. Ek glo ek kan net een tree tussen Volgende y en want ek 1 Om numRowb, teen die einde van die kodering gemis, maar ek is nie 100 seker as my VBA kennis is minimaal. As iemand my kan voorsien van 'n paar hulp aan te voer waarom my kode net terugkeer 0 vir elke reaksie, sou ek die meeste dankbaar Re: VBA bewegende gemiddelde berekening soos hierdie is 'n taak wat ek sal jou help, maar ek sal nie skryf dit vir jou. Die eerste ding wat jy hoef te doen is daar 'n paar waardes in 'n skikking. Sodra jy die waardes in die skikking sal jy dan moet 'n paar logika te gebruik om die bewegende gemiddelde te bereken. Hierdie kode sal die laaste ry in kolom B te vind sodat die einde van die reeks waardes wat jy nodig het om mee te werk. Ek het 'n reeks genaamd stockValue verklaar en verklaar 'n skikking met die naam stock. So met die kode bo die waardes in kolom B is nou in 'n skikking - die eerste waarde van die skikking is stock (1,1), die tweede waarde van die skikking is stock (2,1). Ek vind dit vinniger om dit op hierdie manier doen, maar ongelukkig is dit skep 'n 2 dimensionele skikking (as jy net 'n een dimensionele skikking). maak 'n skikking met verlede waarde stock (100) Dit sal ten minste kry die waardes in die skikking - - Jy moet Jy kan dit 'n 1 dimensionele skikking deur In hierdie geval stock (0) is die eerste lid van die skikking en so aan te maak om te dink oor die logika nou wat nodig is om 'n bewegende gemiddelde te bereken. Soos ek gesê het ek sal jou help, maar sal nie skryf dit vir jou. PS: 2 dinge moet ook in jou kode. Opsie Explicit bo die naam sub - jy sal nodig hê om al jou veranderlikes verklaar. In die tweede plek moet jy 'n fout hanteerder om te gaan met potensiële foute in die kode / werkboek Sterkte hê. Ek meld af vir die nag, maar ek sal jou vordering monitor môre. Indien enige van die ghoeroes wil om jou te help of te kritiseer my kode - sy uit Groete daar Anthony 8203 820382038203 Jy het jou pad. Ek het my pad. Soos vir die regte manier, die regte manier, en die enigste manier, beteken dit nie exist. How te bereken Bewegende Gemiddeldes in Excel Excel Data-analise Vir Dummies, 2nd Edition Die Data-analise opdrag gee 'n instrument vir die berekening van bewegende en eksponensieel stryk gemiddeldes in Excel. Veronderstel, ter wille van illustrasie, wat you8217ve ingesamel daaglikse temperatuur inligting. Jy wil die driedaagse bereken bewegende gemiddelde 8212 die gemiddelde van die afgelope drie dae 8212 as deel van 'n paar eenvoudige weervoorspelling. Om te bereken bewegende gemiddeldes vir hierdie datastel, neem die volgende stappe. Om 'n bewegende gemiddelde te bereken, eerste kliek op die data tab8217s Data-analise opdrag knoppie. Wanneer Excel vertoon die dialoog Data-analise boks, kies die bewegende gemiddelde item uit die lys en kliek op OK. Excel vertoon die bewegende gemiddelde dialoog. Identifiseer die inligting wat jy wil gebruik om die bewegende gemiddelde te bereken. Klik op die insette Range tekskassie van die bewegende gemiddelde dialoog. Identifiseer dan die insette reeks, óf deur te tik 'n werkblad verskeidenheid adres of deur die gebruik van die muis om die werkblad verskeidenheid kies. Jou reeksverwysing moet absolute sel adresse gebruik. 'N absolute sel adres voorafgaan die brief kolom en ry getal met tekens, soos in A1: A10. As die eerste sel in jou insette reeks sluit in 'n teks etiket om jou data te identifiseer of beskryf, kies die etikette in eerste ry boks. In die interval tekskassie, vertel Excel hoeveel waardes in die bewegende gemiddelde berekening te sluit. Jy kan 'n bewegende gemiddelde met behulp van 'n aantal waardes te bereken. By verstek, Excel gebruik die mees onlangse drie waardes om die bewegende gemiddelde te bereken. Te bepaal dat 'n ander aantal waardes word gebruik om die bewegende gemiddelde te bereken, te betree wat waarde in die interval tekskassie. Vertel Excel waar die bewegende gemiddelde data te plaas. Gebruik die Uitset Range tekskassie om die werkblad reeks waarin jy die bewegende gemiddelde data plaas identifiseer. In die werkkaart byvoorbeeld het die bewegende gemiddelde data is geplaas in die werkblad verskeidenheid B2: B10. (Opsioneel) Gee aan of u 'n grafiek wil. As jy 'n grafiek wat die bewegende gemiddelde inligting plotte wil, Kies die diagram Uitgawe boks. (Opsioneel) Dui aan of jy wil standaardfout inligting bereken. As jy wil die standaard foute te bereken vir die data, kies die standaard foute boks. Excel plaas standaardfout waardes langs die bewegende gemiddelde waardes. (Die standaard fout inligting gaan in C2:. C10) Nadat jy klaar spesifiseer wat bewegende gemiddelde inligting wat jy berekende wil en waar jy wil dit geplaas word, klik op OK. Excel bereken bewegende gemiddelde inligting. Let wel: As Excel doesn8217t genoeg inligting om 'n bewegende gemiddelde te bereken vir 'n standaard fout, dit plaas die fout boodskap in die sel. Jy kan 'n paar selle wat hierdie fout boodskap as 'n waarde wys sien.
No comments:
Post a Comment