Avatar billede frederik_kromann Nybegynder
22. august 2005 - 21:04 Der er 10 kommentarer og
1 løsning

Generere tilfældige tal med 2 decimaler - måske slump()

Jeg kunne godt tænke mig en funktion der kan lave tilfældige tal ALTID med 2 decimaler. Tallene skal f.eks. være mellem 1 og 100.
Avatar billede sjap Praktikant
22. august 2005 - 21:12 #1
Tilfældige tal mellem a og b kan genereres med

SLUMP()*(b-a)+a

Dvs. hvis du vil have et tal mellem 1 og 100, så fås det med

SLUMP()*(100-1)+1

Det kan så afrundes, så det kun er to decimaler:

=AFRUND(SLUMP()*(100-1)+1;2)
Avatar billede mugs Novice
22. august 2005 - 21:12 #2
SLUMP returnerer et tilfældigt tal mellem 0 og 1, så den kan du ikke bruge. Men søg i vidensbasen, der er flere eksempler.
Avatar billede frederik_kromann Nybegynder
23. august 2005 - 07:54 #3
Hmm har prøvet noget i den dur. Slump kan desværre godt give et tal med kun 1 decimal, derfor funker det ikke rigtigt... Endnu
Avatar billede sjap Praktikant
23. august 2005 - 12:43 #4
Jamen er det "forbudt" at tallet bliver f.eks. 12,60 - det er da med to decimaler (du skal blot formatere feltet til at vise to decimaler).
Avatar billede tobler Nybegynder
23. august 2005 - 15:16 #5
Jeg har fundet en meget "tung" funktion, som kan gi' dig det ønskede resultat med 2 decimaler. I et separat ark fylder du cellerne fra A1 til A9901 med værdier der stiger med ,01. Du markerer området A1 til A9901 og navngi'r med f.eks. Slumptal.

Efter at have lavet nedenstående funktion, kan du indtaste denne formel i en celle: =rangerandomize(Slumptal) den skal indtastes med Ctrl+Shift+Enter så den får Tuborgklammer omkring sig.

Funktionen stammer fra en bog af John Walkenbach.

Function RANGERANDOMIZE(rng)
    Dim V() As Variant, ValArray() As Variant
    Dim CellCount As Double
    Dim i As Integer, j As Integer
    Dim r As Integer, c As Integer
    Dim Temp1 As Variant, Temp2 As Variant
    Dim RCount As Integer, CCount As Integer
    Randomize
'  Return an error if rng is too large
    CellCount = rng.Count
    If CellCount > 9901 Then
        RANGERANDOMIZE = CVErr(xlErrNA)
        Exit Function
    End If
   
'  Assign variables
    RCount = rng.Rows.Count
    CCount = rng.Columns.Count
    ReDim V(1 To RCount, 1 To CCount)
    ReDim ValArray(1 To 2, 1 To CellCount)

'  Fill ValArray with random numbers
'  and values from rng
    For i = 1 To CellCount
        ValArray(1, i) = Rnd
        ValArray(2, i) = rng(i)
    Next i

'  Sort ValArray by the random number dimension
    For i = 1 To CellCount
        For j = i + 1 To CellCount
            If ValArray(1, i) > ValArray(1, j) Then
                Temp1 = ValArray(1, j)
                Temp2 = ValArray(2, j)
                ValArray(1, j) = ValArray(1, i)
                ValArray(2, j) = ValArray(2, i)
                ValArray(1, i) = Temp1
                ValArray(2, i) = Temp2
            End If
        Next j
    Next i
    Application.Volatile True

'  Put the randomized values into the V array
    i = 0
    For r = 1 To RCount
        For c = 1 To CCount
            i = i + 1
            V(r, c) = ValArray(2, i)
        Next c
    Next r
    RANGERANDOMIZE = V
End Function
Avatar billede frederik_kromann Nybegynder
23. august 2005 - 20:20 #6
Ser lidt vildt ud, men jeg har aldrig prøvet at tilføje en funktion i programkoden. Er det noget du kan forklare mig step by step.

Og til Sjap så er opgaven til en matematik klasse der skal øve sig i afrundinger fra 2 til 1 decimal.
Avatar billede sjap Praktikant
23. august 2005 - 20:42 #7
OK, men så kan vi ja bare sørge for at den anden decimal aldrig bliver 0. Det kan opnås ved først at bruge slump til at finde et tal mellem 1 og 100 med én decimal. Desuden bruges slump så til at finde et tal mellem 0,01 og 0,09 og lægge det til det første:

=AFRUND(SLUMP()*(100-1)+1;1)+AFRUND(SLUMP()*(0,09-0,01)+0,01;2)
Avatar billede tobler Nybegynder
24. august 2005 - 08:59 #8
Jeg vil mene at sjap's løsning er bedst/hurtigst til dit formål. Meld tilbage, hvis du vil ha' makroløsningen.
Avatar billede frederik_kromann Nybegynder
24. august 2005 - 16:31 #9
Sjap jeg må sige at det funker perfekt, den køber jeg.
Avatar billede sjap Praktikant
24. august 2005 - 16:56 #10
OK :0)
Avatar billede frederik_kromann Nybegynder
24. august 2005 - 20:05 #11
Og tobler tak for tilbuddet om makroløsningen. Det skriver jeg mig lige bag øret.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel-kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester