Gå til innhold

Få en celle til å telle opp i en simulaering - Excel


Jod-R

Anbefalte innlegg

Hei

 

Jeg har en Excel simulering der jeg blant annet ender opp med to tall, la oss si X og Y. Et av disse tallene vil naturligvis være større enn det andre og jeg skulle ha beregnet sannsynligheten for at X er større enn Y. Dette er jo forså vidt greit nok, antall ganger (X>Y=Sant)/antall ganger simuleringen er kjørt.

 

Problemet er hvordan jeg får Excel til å telle opp antall ganger X>Y inntreffer. Jeg får til å sjekke det med slutten med =Hvis(X>Y;SANN;USANN), men det sjekker bare den siste gangen simuleringen blir kjørt. Hvordan får jeg til å telle det opp for alle rundene og gi meg det totale antall ganger det inntraff på slutten av simuleringen.

 

 

Den som hjelper får min evige takknemlighet

Lenke til kommentar
Videoannonse
Annonse

Jeg tenkte noe ala dette

 

If (X>Y)

    teller = teller + 1

end if

 

Problemet er at jeg ikke har peiling på hvordan jeg skal gjøre dette. Jeg har fått utdelt et excel ark ifra skolen som inneholder selve simuleringen og som vi kan modifisere. Er det mulig å få dette til uten å gå innom VBA (som jeg nettopp oppdaget :/) og kanskje noen kan gi meg noen tips hvordan dette kan gjøres uansett metode.

Lenke til kommentar

Ok, har kommet litt videre, men sliter fremdeles... Har fått til dette:

 

Function prosent(sjekk, iterasjoner)

    If sjekk = True Then
    teller = teller + 1
    End If
    
   prosent = teller / iterasjoner
   
End Function
 

Det som er problemet er at mellom hver iterasjon så nullstiller "teller" seg, hvordan får jeg excel til å huske den?

 

sjekk er enten TRUE eller FALSE, iterasjoner er et tall.

Endret av Jod-R
Lenke til kommentar

Kanskje litt spam, men here it goes

 

Fått det til nå, men lurte på om noen kanskje kunne gjøre det litt bedre, nemlig det å sette teller = 0 i selve modulen/macroen.

 

Dette har jeg nå.

 

Public teller As Integer

Function prosent(sjekk, iterasjoner)

    If sjekk = True Then
    teller = teller + 1
    End If
    
   prosent = teller / iterasjoner
   
End Function

 

Da må jeg sette teller=0 i modulen som inneholder run funksjonen, lurte på om det var mulig å gjøre det i samme modulen som resten av koden.

 

Hvis du kan forklare meg hvordan Public funker og hva alternativene er så hadde det blitt bra. Og om noe annet hadde virket her :)

Lenke til kommentar

Hei!

Stor utvikling fra første innlegg :)

Hvis du vil ha det i samme kode, kan du bruke en STATIC variabel i funksjonen din.

Henger du på et valgfritt paramter i funksjonen, kan du kalle den opp før du starter med

Dummy=Prosent(0,0,True)

Dette vil sikre at du nullstiller Teller

 

Function prosent(sjekk, iterasjoner, optional nullstill as boolean)
   Static Teller as long 

 

   if nullstill = true then

    Teller =0 

    Prosent=0

    Exit function 

   end if

    If sjekk = True Then
    teller = teller + 1
    End If
    
   prosent = teller / iterasjoner
   
End Function

 

Vennlig hilsen Ketil

  • Liker 1
Lenke til kommentar

 

 

Tusen takk for svar. Lurte på om du kunne kommentere om jeg tenkte rett angående det jeg spurte over.

 

edit:

prøvde det, men fikk det til å automatisk til å resette seg selv når jeg trykket på run knappen.

Endret av Jod-R
Lenke til kommentar

Fint :)

 

Utfordringen er vel å sikre at Teller er null når du starter et antall Iterasjoner. Teller vil være null når du åpner arket, men vil ha verdi inntil du trykker RESET i VBA. Kallet til funksjonen over måtte du ha lagt på en knapp som startet en makro.

 

En lurere måte å gjøre det på enn den jeg foreslo over er kanskje å bruke parameteret Iterasjoner som du allerede har.

Hvis Iterasjoner starter på null, kan du resette ved første kall:

 

 

Function prosent(sjekk, iterasjoner)
   Static Teller As Long
 
   If iterasjoner = 0 Then
    Teller = 0
    prosent = 0
    Exit Function
   End If
 
    If sjekk = True Then
     Teller = Teller + 1
    End If
    
   prosent = Teller / iterasjoner
   
End Function
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...