Eli olen toteuttanut kyselyn, joka toisesta ohjelmasta tuo tiedot seuraavalla tavalla:
Sarakkeessa A on vastausarvot (kyselyyn vastanneet saivat valita asteikolla 4-10), eli solussa A1 arvo 4, solussa A2 arvo 5, solussa A3 arvo 6 jne. arvoon 10 asti. Sarakkeessa C sitten on vastaajien lukumäärä, esim. solussa C1 8, C2 5, C3 4, C4 9, C5 15, C6 6, C7 10. Yritän nyt näistä laskea keskihajontaa.
Ongelma siis on se, että manuaalisesti tämä tietenkin onnistuu, syötän yksitellen jokaisen arvon tyyliin KESKIHAJONTA=(4;4;4;4;4;4;4;4;5;5;5;5;5;6;6;6;6 jne.), mutta haluaisin tämän tehdä kaavalla, koska kysymyksiä on reilusti yli 100 ja vastaajia myös erittäin paljon.
(Olen yrittänyt ratkaista tätä TOISTA -> POIMI.TEKSTI funktioiden avulla, jotta saisin luvut yksittäin exceliin ilman onnistumista koska tämän jälkeen excel ei enää ymmärrä niitä lukuina, vaan tekstinä)
Miten tämä onnistuisi, jos joku saa selvää ongelman selityksestäni.
Suuret kiitokset, jos joku saa tämän selvitettyä.
Keskihajonta kyselystä
13
1020
Vastaukset
- hajotajahallitse
vahvimpia puoliani, enkä ihan ymmärrä mitä keskihajonnalla tarkoitetaan, mutta eikö tuo kaava voi olla esim: =KESKIHAJONTA(A1:A10)
Ei tarvitse joka solua erikseen laittaa.
Pikaisella testauksella tuli ihan sama vastaus- Senor Excel
Tuo on keskihajonnan kaava tosiaan, mutta tässä tilanteessa sitä ei voi ainakaan tuossa muodossa hyödyntää koska siihen pitäisi saada mukaan C sarakkeen vastausten lukumäärät.
- muuan mies
Senor Excel kirjoitti:
Tuo on keskihajonnan kaava tosiaan, mutta tässä tilanteessa sitä ei voi ainakaan tuossa muodossa hyödyntää koska siihen pitäisi saada mukaan C sarakkeen vastausten lukumäärät.
Katso netistä keskihajonnan laskeminen frekvenssijakautumasta. löytyy suomenkielelläkin tilastomatematiikkaa opastavia sivustoja, esim http://www.valt.helsinki.fi/staff/KUKKULA/VANHAT/jok134.htm
muuan mies kirjoitti:
Katso netistä keskihajonnan laskeminen frekvenssijakautumasta. löytyy suomenkielelläkin tilastomatematiikkaa opastavia sivustoja, esim http://www.valt.helsinki.fi/staff/KUKKULA/VANHAT/jok134.htm
vaan argumenttejen syötöstähän tässä on kyse....
ei toi onnaa ilman VBA: n apua automaattisesti
soluun kaava =Keskihajonta(A2:A8;2), missä A2:A8 on asteikko ja offset 2 asteikosta eli C -sarakkeessa vastausten määrät.
moduuliin...
Option Base 1
Function Keskihajonta(Arvot As Range) As Double
Dim i As Long
Dim j As Long
Dim solu As Range
Dim Arr() As Variant
On Error Resume Next
Application.Volatile
j = 1
For Each solu In Arvot
' määrät C sarakkeessa(Offset(0, 2)) kun kaavana =Keskihajonta(A2:A8;2)
For i = 1 To solu.Offset(0, 2)
ReDim Preserve Arr(j)
Arr(j) = solu
j = j 1
Next i
Next solu
Keskihajonta = Application.WorksheetFunction.StDev(Arr)
End Function- Senor Excel
kunde kirjoitti:
vaan argumenttejen syötöstähän tässä on kyse....
ei toi onnaa ilman VBA: n apua automaattisesti
soluun kaava =Keskihajonta(A2:A8;2), missä A2:A8 on asteikko ja offset 2 asteikosta eli C -sarakkeessa vastausten määrät.
moduuliin...
Option Base 1
Function Keskihajonta(Arvot As Range) As Double
Dim i As Long
Dim j As Long
Dim solu As Range
Dim Arr() As Variant
On Error Resume Next
Application.Volatile
j = 1
For Each solu In Arvot
' määrät C sarakkeessa(Offset(0, 2)) kun kaavana =Keskihajonta(A2:A8;2)
For i = 1 To solu.Offset(0, 2)
ReDim Preserve Arr(j)
Arr(j) = solu
j = j 1
Next i
Next solu
Keskihajonta = Application.WorksheetFunction.StDev(Arr)
End FunctionHieno Homma "Eihän kaavassa mitään vikaa ole"! Tuosta juuri oli kysymys, erittäin suuri kiitos!
VBA sinänsä ei ole tuttu, mutta eiköhän tuon käyttö luonnistu kun pistit ystävällisesti kaavankin valmiiksi. Asentelen tässä juuri VBA:ta.
Vielä kerran erittäin suuri kiitos, tuosta oli paljon apua. - Senor Excel
Senor Excel kirjoitti:
Hieno Homma "Eihän kaavassa mitään vikaa ole"! Tuosta juuri oli kysymys, erittäin suuri kiitos!
VBA sinänsä ei ole tuttu, mutta eiköhän tuon käyttö luonnistu kun pistit ystävällisesti kaavankin valmiiksi. Asentelen tässä juuri VBA:ta.
Vielä kerran erittäin suuri kiitos, tuosta oli paljon apua.Vielä yksi kysymys tuosta VBA:sta. Syötin kyseiseen exceliin moduuliin tuon pätkän.
Ikävä kyllä VBA taitoni ovat suoraan sanottuna 0, joten tarviiko minun muokata tuota koodia / kaavaa jollakin tavalla?
Eli sain tulokseksi "Argument not optional" virheilmoituksen.
Eli vielä tarkennukseksi, miltä excelini näyttää
A2 solussa 4 C2 solussa10
A3 solussa 5 C3 solussa 0
A4 solussa 6 C4 solussa 40
A5 solussa 7 C5 solussa 12
A6 solussa 8 C6 solussa 13
A7 solussa 9 C7 solussa 16
A8 solussa 10 C8 solussa 10
Keskihajonta löytyy solusta G2
Eli konkreettisesti... Syötän aluksi G2 soluun kaavan =Keskihajonta(A2:A8;2)
Tämän jälkeen avaan VBAn kehitystyökalut valikosta ja copy pastean aukeavaan ikkunaan antamasi kaavan sinne tekemättä siihen mitään muutoksia(?)
Tallennan .xlsm tiedoston
Tämän jälkeen klikkaan makrot kohtaa kehitystyökaluista ja suoritan keskihajonta nimisen makron(?)
(tämän prosessin tehtyäni sain tosiaan kyseisen virheilmoituksen)
Kysymys varmaan ammattilaisen silmiin on typerä, koska luultavasti minulla on joku alokasmainen virhe tai olen ymmärtänyt asian ihan väärin...mutta mitä siis teen väärin? - kunde vaan
Senor Excel kirjoitti:
Vielä yksi kysymys tuosta VBA:sta. Syötin kyseiseen exceliin moduuliin tuon pätkän.
Ikävä kyllä VBA taitoni ovat suoraan sanottuna 0, joten tarviiko minun muokata tuota koodia / kaavaa jollakin tavalla?
Eli sain tulokseksi "Argument not optional" virheilmoituksen.
Eli vielä tarkennukseksi, miltä excelini näyttää
A2 solussa 4 C2 solussa10
A3 solussa 5 C3 solussa 0
A4 solussa 6 C4 solussa 40
A5 solussa 7 C5 solussa 12
A6 solussa 8 C6 solussa 13
A7 solussa 9 C7 solussa 16
A8 solussa 10 C8 solussa 10
Keskihajonta löytyy solusta G2
Eli konkreettisesti... Syötän aluksi G2 soluun kaavan =Keskihajonta(A2:A8;2)
Tämän jälkeen avaan VBAn kehitystyökalut valikosta ja copy pastean aukeavaan ikkunaan antamasi kaavan sinne tekemättä siihen mitään muutoksia(?)
Tallennan .xlsm tiedoston
Tämän jälkeen klikkaan makrot kohtaa kehitystyökaluista ja suoritan keskihajonta nimisen makron(?)
(tämän prosessin tehtyäni sain tosiaan kyseisen virheilmoituksen)
Kysymys varmaan ammattilaisen silmiin on typerä, koska luultavasti minulla on joku alokasmainen virhe tai olen ymmärtänyt asian ihan väärin...mutta mitä siis teen väärin?eipähän sydeemi antanut kirjautua omilla tunnareilla, mutta kokeillaan tämmösillä...
1. taulukkonäkymässä näppäinyhdistelmä ALT F11
2. valikosta INSERT/MODULE
3. Oikealle näkymään ilmestyneeseen tyhjään moduuliin ikkunaan (oletuksena Module1, näkyy vasemmalla VBA Project ikkunassa) kopioit koodin. Jos aiemmin lisättyjä moduuleja niin voi lisätä mihin tavalliseen moduuliin tahansa- EI ThisWorkbook moduuliin!!!.
4. Tilasto tiedot soluissa jo kirjoitettuna, ellei lisää ne nyt?
5. Haluamaasi soluun kaava =Keskihajonta(A2:A8;2) ja tulokseksi itselläni tulee 1,722651
@Kunde - Senor Excel
kunde vaan kirjoitti:
eipähän sydeemi antanut kirjautua omilla tunnareilla, mutta kokeillaan tämmösillä...
1. taulukkonäkymässä näppäinyhdistelmä ALT F11
2. valikosta INSERT/MODULE
3. Oikealle näkymään ilmestyneeseen tyhjään moduuliin ikkunaan (oletuksena Module1, näkyy vasemmalla VBA Project ikkunassa) kopioit koodin. Jos aiemmin lisättyjä moduuleja niin voi lisätä mihin tavalliseen moduuliin tahansa- EI ThisWorkbook moduuliin!!!.
4. Tilasto tiedot soluissa jo kirjoitettuna, ellei lisää ne nyt?
5. Haluamaasi soluun kaava =Keskihajonta(A2:A8;2) ja tulokseksi itselläni tulee 1,722651
@KundeTaidan edelleen tehdä jotain väärin, koska noiden askeleiden jälkeen edellisessä viestissä, joita mielestäni noudatin orjallisesti, keskihajontani edelleen näyttää 2,66927 (mikä siis on keskihajonta luvuista 4-10, ottamatta huomioon C sarakkeen arvoja).
Olen valinnut "makrosuojaus" kohdasta "ota käyttöön kaikki makrot", tarvitseeko minun tehdä jotain muita toimenpiteitä tai tallentaa tuota kyseistä koodia jollakin tavalla, jotta se osaa ottaa sen huomioon?
Kiitos muuten jälleen erittäin paljon Kunde, hienoa että viitsit auttaa aloittelijaa :) - Senor Excel
Senor Excel kirjoitti:
Taidan edelleen tehdä jotain väärin, koska noiden askeleiden jälkeen edellisessä viestissä, joita mielestäni noudatin orjallisesti, keskihajontani edelleen näyttää 2,66927 (mikä siis on keskihajonta luvuista 4-10, ottamatta huomioon C sarakkeen arvoja).
Olen valinnut "makrosuojaus" kohdasta "ota käyttöön kaikki makrot", tarvitseeko minun tehdä jotain muita toimenpiteitä tai tallentaa tuota kyseistä koodia jollakin tavalla, jotta se osaa ottaa sen huomioon?
Kiitos muuten jälleen erittäin paljon Kunde, hienoa että viitsit auttaa aloittelijaa :)Heh, tulikin mieleen, että minulla on useampia eri taulukoita excelissä, ja kyseinen on Taul6:ssa, sen viittauksen ilmeisesti tarvitsee näkyä jossain myös jotta VBA:n kaava kohdistuu oikeaan taulukkoon?
- kunde vaan
Senor Excel kirjoitti:
Heh, tulikin mieleen, että minulla on useampia eri taulukoita excelissä, ja kyseinen on Taul6:ssa, sen viittauksen ilmeisesti tarvitsee näkyä jossain myös jotta VBA:n kaava kohdistuu oikeaan taulukkoon?
olinkin postannut väärän koodin...
yllä oleva koodi toimii kaavalla =keskihajonta(A2:A8)
tai jos eri taulukossa esim. =keskihajonta(Sheet1!A2:A8)
tämä modifioitu kaava minun olisi pitänyt postata...
eli soluun kaava =keskihajonta(A2:A8;2)
Option Base 1
Function Keskihajonta(Arvot As Range, Siirtymä As Integer) As Double
Dim i As Long
Dim j As Long
Dim solu As Range
Dim Arr() As Variant
On Error Resume Next
Application.Volatile
j = 1
For Each solu In Arvot
' määrät C sarakkeessa(Offset(0, 2)) kun kaavana =Keskihajonta(A2:A8;2)
For i = 1 To solu.Offset(0, Siirtymä)
ReDim Preserve Arr(j)
Arr(j) = solu
j = j 1
Next i
Next solu
Keskihajonta = Application.WorksheetFunction.StDev(Arr)
End Function
anteeksi nyt aiheuttamani hämmennys
@Kunde - Senor Excel
kunde vaan kirjoitti:
olinkin postannut väärän koodin...
yllä oleva koodi toimii kaavalla =keskihajonta(A2:A8)
tai jos eri taulukossa esim. =keskihajonta(Sheet1!A2:A8)
tämä modifioitu kaava minun olisi pitänyt postata...
eli soluun kaava =keskihajonta(A2:A8;2)
Option Base 1
Function Keskihajonta(Arvot As Range, Siirtymä As Integer) As Double
Dim i As Long
Dim j As Long
Dim solu As Range
Dim Arr() As Variant
On Error Resume Next
Application.Volatile
j = 1
For Each solu In Arvot
' määrät C sarakkeessa(Offset(0, 2)) kun kaavana =Keskihajonta(A2:A8;2)
For i = 1 To solu.Offset(0, Siirtymä)
ReDim Preserve Arr(j)
Arr(j) = solu
j = j 1
Next i
Next solu
Keskihajonta = Application.WorksheetFunction.StDev(Arr)
End Function
anteeksi nyt aiheuttamani hämmennys
@KundeEipä mitään, kiva kun yrität auttaa.
Edelleenkään en saa tosin toimimaan, avasin vielä varmuuden vuoksi uuden tyhjän excelin, johon täytin pelkästään solut A2-A8 ja C2-C8, menin suoraan ALT F11 ja insert modulen kautta copy pasteamaan tuon viimeksi mainitsemasi pätkän ja tämän jälkeen syötin keskihajonnan kaavan taulukkoon, mutta edelleen se vaan näyttää keskihajonnan luvuista 4-10 (jotka sarakkeessa A2-A8) ottamatta huomioon C sarakkeen lukumääriä.
Onko tosiaan niin, että kun olen syöttänyt kaavan, se automaattisesti "ajaa itsensä", eli en tarvitse mitään "run" tmv. komentoa mikä saattaa tuon koodinpätkän aktiiviseksi / voimaan? - kunde vaan
Senor Excel kirjoitti:
Eipä mitään, kiva kun yrität auttaa.
Edelleenkään en saa tosin toimimaan, avasin vielä varmuuden vuoksi uuden tyhjän excelin, johon täytin pelkästään solut A2-A8 ja C2-C8, menin suoraan ALT F11 ja insert modulen kautta copy pasteamaan tuon viimeksi mainitsemasi pätkän ja tämän jälkeen syötin keskihajonnan kaavan taulukkoon, mutta edelleen se vaan näyttää keskihajonnan luvuista 4-10 (jotka sarakkeessa A2-A8) ottamatta huomioon C sarakkeen lukumääriä.
Onko tosiaan niin, että kun olen syöttänyt kaavan, se automaattisesti "ajaa itsensä", eli en tarvitse mitään "run" tmv. komentoa mikä saattaa tuon koodinpätkän aktiiviseksi / voimaan?joku muukin voisi testata toimiiko 2007 versiossa...
tekemäni koodi on UDF eli käyttäjän määrittelemä funktio ja se toimii heti kun olet syöttänyt sen soluun
En nyt sitten tiedä onko 2007 versiossa jotain muutettu, mutta vanhemmassa versiossa toimii kumminkin ihan jees...
P.S. ei hyväksy sissänkirjausta omilla tunnareilla vieläkään - Senor Excel
kunde vaan kirjoitti:
joku muukin voisi testata toimiiko 2007 versiossa...
tekemäni koodi on UDF eli käyttäjän määrittelemä funktio ja se toimii heti kun olet syöttänyt sen soluun
En nyt sitten tiedä onko 2007 versiossa jotain muutettu, mutta vanhemmassa versiossa toimii kumminkin ihan jees...
P.S. ei hyväksy sissänkirjausta omilla tunnareilla vieläkään2007 täällä tosiaan käytössä. Tarvii testata kotona vanhemmalla versiolla.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
- 1824300
- 341584
Minulta loppuu aika
Halusin olla täydellinen. Nyt näyttää siltä että viimeinen kiristys jää puolitiehen, sillä h-hetki on jo ihan kohta käsi401500Syvälliset keskustelut
Olisivat tärkeintä ensisijaisesti hänen kanssaan Tulisi sellainen hetki, mutta kaikki meni pieleen251484Olisipa sitä henkisesti eheämpi ja rohkeampi
mikään maallinen mammona ei itseäni kiinnosta, eikä sen menetys kiinnostus. Mutta kun kohtaa jonkun sykäyttävän ihmisen,201375- 1121306
Moi, nainen
Tunnustan, olen heikkona sun hymyyn, ja sekään ei auta yhtään, että sulla on täydellinen nenä. Joten ensi kerralla, kun301190Kyllähän tämä vähän kirpaisee
Mutta oman sisäisen rauhan vuoksi jätän sinut nyt historiaan. Todennäköisesti olet jo sinäkin mennyt eteenpäin. Olipah381187- 191149
Sulla on uskomaton luonne
Saat minut hetkessä iloiseksi, tai sanotaan nyt niin, että ajatus sinusta saa sydämeni hyppimään riemusta. En vain saa s441038