Avatar billede ullum Praktikant
25. januar 2005 - 18:12 Der er 29 kommentarer og
1 løsning

aut valg af tilfældigt felt

Kan man få excel til selv at foretage et tilfældigt valg mellem op til ni celler med tekst
Avatar billede kabbak Professor
25. januar 2005 - 18:52 #1
kan du uddybe, må der bruges makro, ellers bliver det svært.
Avatar billede sjap Praktikant
25. januar 2005 - 19:25 #2
Hvis dine tekster står i A2..A10 kan du f.eks. bruge

=INDIREKTE("A"&SLUMPMELLEM(2;10))

Bemærk at funktionen SLUMPMELLEM kræver at Analysis Toolpak er installeret (aktiveres ved hjælp af kommandoen Tilføjelsesprogrammer i menuen Funktioner).
Avatar billede ullum Praktikant
25. januar 2005 - 19:42 #3
der må gerne bruges makro, men det er mere kringlet end som så:

vi er ni spillere der er skrevet op i et krydsfelt


              a b c d e f g h i
            a
            b
            c
            d
            e
            f
            g
            h
            i

Ved tryk på eksempelvis en knap eller cont. et eller andet skal vælge en kamp
eksempelvis mellem b og h.
Det bliver sjovere endnu, det er nemlig to hold med hver to spillere så egentlig skal der vælges to gange. I krydsfeltet udfyldes så om det er en kamp der er spillet så det skal der også tages hensyn til.

En stor mundfukd, men lad os nu bare holde os til starten. Kommer vi længere er der naturligvis flere p
mvh
Avatar billede ullum Praktikant
25. januar 2005 - 19:50 #4
ok sjap dit forslag kører nøjagtig som det jeg spurgte efter, p til dig, har du (I) en ide til at komme videre, nu vil jeg spørg på felterne i krydsfeltet markeret med et "X" (for ikke spillet) formlen skal returnere navnene
Avatar billede sjap Praktikant
25. januar 2005 - 19:51 #5
Mit første forslag løser faktisk det problem som du beskrev. Det som du nu har beskrevet, er et helt andet problem, og kan nok bedst klares med en makro. Du kan relativt enkelt få en delvis løsning af problemet.

=INDIREKTE("A"&SLUMPMELLEM(2;10)) & INDIREKTE("A"&SLUMPMELLEM(2;10))

Den opdateres hver gang du trykker på F9, men den tager ikke højde for allerede afviklede kampe, og den tager ikke højde for at man ikke kan spille mod sig selv (tror jeg).
Avatar billede sjap Praktikant
25. januar 2005 - 21:01 #6
Det kan faktisk laves uden makro:

Antager at din spilleplan står i A1..J10.

Placer et X i alle cellerne i diagonalen (disse kampe kan jo ikke spilles).

I celle B12 skrives
=INDIREKTE("A"&SLUMPMELLEM(2;10)) &HVIS(C12=0;"";"")& INDIREKTE("A"&SLUMPMELLEM(2;10))

I menuen Funktioner/Indstillinger under fanebladet Beregning sættes et flueben ud for gentagelse og Maks. antal gentagelser sættes til 10000.

I celle C12 skrives
=HVIS(FORSKYDNING($A$1;SAMMENLIGN(VENSTRE(B12);$A$2:$A$10;0);SAMMENLIGN(HØJRE(B12);A2:A10;0))="X";C12+1;0)

Hver gang du så trykker på F9 foreslås en kamp. Når kampen er afviklet, kan du sætte et X i tabellen ud for kampen. Så vil den ikke blive foreslået igen.

Bemærk at jo færre mulige kampe, der er, jo længere tid kan programmet bruge på at finde en ikke-afviklet kamp (det er det, de 10000 gentagelser skal bruges til). Hvis der foreslås en afviklet kamp, så prøv F9 igen eller sæt maks gentagelser højere.
Avatar billede sjap Praktikant
25. januar 2005 - 21:12 #7
ullum > Hvis du er interesseret, så læg din mail-adresse og jeg sender dig mit eksempel.
Avatar billede ullum Praktikant
26. januar 2005 - 18:40 #8
ullumfjernes@mail.dk
evt kan jeg sende arket til dig
Avatar billede ullum Praktikant
26. januar 2005 - 21:07 #9
du er skrap det virker fint. Hvad nu hvis man får resultatet "ge" kan man så få den til at skrive et bogstav (a)i F8
Avatar billede sjap Praktikant
26. januar 2005 - 21:18 #10
Som udgangspunkt slipper du så ikke for at lave en makro, men man kan jo lave en tilnærmet funktion. Prøv at skrive

=HVIS($B$12=$A2&C$1;"a";"")

i celle C2 og kopier det ud på alle de celler, der ikke står i diagonalen.
Avatar billede sjap Praktikant
26. januar 2005 - 21:34 #11
Nej prøv med denne her i stedet

=HVIS($C$13=1;"";HVIS($B$12=$A2&C$1;"a";HVIS(ELLER(C2="a";C2="X");"X";"")))

Den skal også kopieres ud til alle celleren. Den skriver "a" ud for den kamp, der lige er valgt. Næste gang du trykker på F9 ændres det til "X" (som indikation af at kampen er afviklet). X'et bliver så stående i cellen til evig tid... Nåh nej, jeg har lavet funktionen sådan, at hvis du skriver 1 i celle C13 og trykker F9, så nulstilles kampskemaet.
Avatar billede sjap Praktikant
26. januar 2005 - 21:34 #12
Sender lige mit eksempel.
Avatar billede sjap Praktikant
26. januar 2005 - 21:55 #13
Glem den sidste. Tabellen bliver fyldt lidt for hurtigt ud.
Avatar billede sjap Praktikant
27. januar 2005 - 00:09 #14
Har overgivet mig til makroerne. Det sidste du bad om kan jeg simpelthen ikke får til at fungere med funktioner. Jeg har i stedet lavet en makro på en knap:

Dim Deltager1, Deltager2, Tæller As Integer
Const MaksTæller = 10000

For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "a" Then
            Worksheets("Kampskema").Cells(i, j) = "X"
        End If
    Next j
Next i

Randomize
Tæller = 0
Do Until (Deltager1 <> Deltager2 And IsEmpty(Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1))) Or Tæller > MaksTæller
    Deltager1 = Int((9 * Rnd) + 1)
    Deltager2 = Int((9 * Rnd) + 1)
    Tæller = Tæller + 1
Loop
If Tæller < MaksTæller Then
    Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1) = "a"
End If


Af en eller anden grund som jeg ikke lige kan gennemskue, så sker det af og til, at der ikke kommer en ny kamp, men bare tryk på knappen igen, så sker der noget.
Avatar billede kabbak Professor
27. januar 2005 - 00:26 #15
Sjap

Jeg ville nok have lavet den sådan.

Jeg fulgte med, for at se om du kunne lave den uden makro ;-))

jeg har testet din, og det er ok.

Sub KAMP()
Dim Deltager1, Deltager2, Tæller As Integer
Const MaksTæller = 10000

For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "a" Then
            Worksheets("Kampskema").Cells(i, j) = "X"
        End If
    Next j
Next i

Randomize
Tæller = 0
Do
    Deltager1 = Int((9 * Rnd) + 1)
    Deltager2 = Int((9 * Rnd) + 1)
    Tæller = Tæller + 1
    If Tæller > MaksTæller Then Exit Do
    If (Deltager1 <> Deltager2 And IsEmpty(Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1))) Then
    Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1) = "a"
    Exit Do
    End If
Loop

End Sub
Avatar billede kabbak Professor
27. januar 2005 - 00:48 #16
Her er en der skulle vælge 2 ad gangen, kamp a og kamp b

Sub KAMP()
Dim Deltager1, Deltager2, Tæller As Integer
Const MaksTæller = 20000
Fejl = False
For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "a" Or Worksheets("Kampskema").Cells(i, j) = "b" Then
            Worksheets("Kampskema").Cells(i, j) = "X"
        End If
    Next j
Next i

Randomize
Tæller = 0
Do
    Deltager1 = Int((9 * Rnd) + 1)
    Deltager2 = Int((9 * Rnd) + 1)
    Tæller = Tæller + 1
    If Tæller > MaksTæller Then
    GoTo Slut
    Exit Do
    End If
    If (Deltager1 <> Deltager2 And IsEmpty(Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1))) Then
    Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1) = "a"
    Exit Do
    End If
Loop
Tæller = 0
Do
    Deltager3 = Int((9 * Rnd) + 1)
    Deltager4 = Int((9 * Rnd) + 1)
    Tæller = Tæller + 1
    If Tæller > MaksTæller Then Exit Do
    If Deltager3 <> Deltager4 And Deltager1 <> Deltager3 And Deltager2 <> Deltager4 _
    And IsEmpty(Worksheets("Kampskema").Cells(Deltager3 + 1, Deltager4 + 1)) Then
    Worksheets("Kampskema").Cells(Deltager3 + 1, Deltager4 + 1) = "b"
    Exit Do
    End If
Loop
Slut:
End Sub
Avatar billede sjap Praktikant
27. januar 2005 - 20:25 #17
kabbak > Det er måske muligt, at lave funktionen med makroer, men jeg mistede tålmodigheden. Det blev for svært st styre antallet af genberegninger. Så vidt jeg lige kan se, så er den eneste ændring du har lavet i den løkke, der generer kampene. Og så vidt jeg kan se, så foretages kontrollen af om kampen er gyldig med "if" og "exit Do".
I min fagre ungdom (i forrige århundrede) blev jeg belært om at den slags programmer, er "dårlig programmering", og det sidder stadig så dybt i mig, at jeg vil gå langt for at undgå det.
Men det er altså ikke så interessant hvorvidt det er dårligt eller ej. Det interessante er: Er det bedre. Dvs. undgås min fejl, hvor der i nogen tilfælde (godt nok sjældne) ikke foreslås en ny kamp, og er programmet hurtigere. Har du nogen ide om det?
Avatar billede ullum Praktikant
27. januar 2005 - 20:30 #18
sjap: dette er langt over min fatteevne, jeg har leget lidt med det du sendte mig, jeg kan få den til kun at slette halvdelen af X'erne idet den øverste højre halvdel egentlig er gentagelser og i dette tilfælde uinteressante. Næste punkt var også at få den til at skrive b men der hopper kæden af mit goto fungerer ikke

Private Sub CommandButton1_Click()
Dim Deltager1, Deltager2, Tæller As Integer
Const MaksTæller = 10000

For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "a" Then
            Worksheets("Kampskema").Cells(i, j) = "X"
        End If
    Next j
Next i

For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "b" Then
            Worksheets("Kampskema").Cells(i, j) = "X"
        End If
    Next j
Next i

If Worksheets("Kampskema").Cells(i, j) = "a" Then GoTo line1



Randomize
Tæller = 0
Do Until (Deltager1 <> Deltager2 And IsEmpty(Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1))) Or Tæller > MaksTæller
    Deltager1 = Int((9 * Rnd) + 1)
    Deltager2 = Int((9 * Rnd) + 1)
    Tæller = Tæller + 1
Loop
If Tæller < MaksTæller Then
    Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1) = "a"
End If

1
Randomize
Tæller = 0
Do Until (Deltager1 <> Deltager2 And IsEmpty(Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1))) Or Tæller > MaksTæller
    Deltager1 = Int((9 * Rnd) + 1)
    Deltager2 = Int((9 * Rnd) + 1)
    Tæller = Tæller + 1
Loop
If Tæller < MaksTæller Then
    Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1) = "b"
End If

End Sub

Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

End Sub

Private Sub CommandButton2_Click()

Worksheets("Kampskema").Range("B3:b10,c4:c10,d5:d10,e6:e10,f7:f10,g8:g10,h9:h10,i10").ClearContents

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

End Sub
Avatar billede ullum Praktikant
27. januar 2005 - 20:33 #19
hovsa line1: kolon var løsningen. Nu må den bare ikke vælge samme deltager på hverken hold a eller b
Avatar billede ullum Praktikant
27. januar 2005 - 21:41 #20
kabbak jeg lånte lidt fra dig også nu kører det


Private Sub CommandButton1_Click()
Dim Deltager1, Deltager2, Deltager3, Deltager4, Tæller As Integer
Const MaksTæller = 10000

For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "a" Then
            Worksheets("Kampskema").Cells(i, j) = "X"
        End If
    Next j
Next i

For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "b" Then
            Worksheets("Kampskema").Cells(i, j) = "X"
        End If
    Next j
Next i

If Worksheets("Kampskema").Cells(i, j) = "a" Then GoTo line1



Randomize
Tæller = 0
Do Until (Deltager1 <> Deltager2 And IsEmpty(Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1))) Or Tæller > MaksTæller
    Deltager1 = Int((9 * Rnd) + 1)
    Deltager2 = Int((9 * Rnd) + 1)
    Tæller = Tæller + 1
Loop
If Tæller < MaksTæller Then
    Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1) = "a"
End If

line1:
Randomize
Tæller = 0
Do Until (Deltager3 <> Deltager4 And Deltager1 <> Deltager3 And Deltager2 <> Deltager4 _
And IsEmpty(Worksheets("Kampskema").Cells(Deltager3 + 1, Deltager4 + 1))) Or Tæller > MaksTæller
    Deltager3 = Int((9 * Rnd) + 1)
    Deltager4 = Int((9 * Rnd) + 1)
    Tæller = Tæller + 1
Loop
If Tæller < MaksTæller Then
    Worksheets("Kampskema").Cells(Deltager3 + 1, Deltager4 + 1) = "b"
End If

End Sub

Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

End Sub

Private Sub CommandButton2_Click()

Worksheets("Kampskema").Range("B3:b10,c4:c10,d5:d10,e6:e10,f7:f10,g8:g10,h9:h10,i10").ClearContents

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

End Sub


Man skal bare passe på hen mod slutningen, hvis det ikke går op vil den stå med en kamp hvor samme deltager skal spille på begge hold. Det vil nok være for vildt at lave noget der også tager højde for det, men kunne man ikke lave en slags "fortryd" i stil med:

Private Sub CommandButton2_Click()

Worksheets("Kampskema").Range("B3:b10,c4:c10,d5:d10,e6:e10,f7:f10,g8:g10,h9:h10,i10").ClearContents

hvor feltet med a og b slettes?

Jeg vil meget gerne give jeg begge max. p 200 men det er vist ikke lovligt.
Læg lige svar begge to!

En sidste lille ting, hvor definerer jeg hvor mine kanppe skal ligge i arket, jeg kan ikke finde det.

Mange tak for hjælpen
Avatar billede kabbak Professor
27. januar 2005 - 21:50 #21
det med at Tømme felter med  a og b, her er koden

Private Sub CommandButton3_Click()

For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "a" Or Worksheets("Kampskema").Cells(i, j) = "b" Then
            Worksheets("Kampskema").Cells(i, j) = ""
        End If
    Next j
Next i
End Sub


Giv point til sjap, han har fortjent dem, med sin ihærdige indsats med funktioner
Avatar billede sjap Praktikant
27. januar 2005 - 21:50 #22
Hmmm. Jeg synes at hver gang vi er lige ved at være der, så kommer der en ny komplikation.

Jeg kan god se din ide, men fik en anden ide, hvor man kan reducere antallet af søgninger. Ideen er simpelthen at man bruger et array, der indeholder de 9 spillere. Den første spiller vælges tilfældigt. Den valgte spiller fjernes fra arrayet, og kan derfor ikke vælges igen. den næste søgning foregår derfor kun blandt 8 spillere. For b-holdet vælges den første så kun blandt 7 spillere osv.

Det ser måske lidt kringlet ud i koden, men jeg er lige ved at tro det virker (lige bortset fra det der med diagonalen:

Private Sub CommandButton1_Click()
Dim Deltager1, Deltager2, Tæller, AntalMulig As Integer
Dim MuligModstander(9)
Dim MuligModstander2(7)
Const MaksTæller = 10000

For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "a" Or Worksheets("Kampskema").Cells(i, j) = "b" Then
            Worksheets("Kampskema").Cells(i, j) = "X"
        End If
    Next j
Next i

Randomize
Tæller = 0
Do Until Tæller > MaksTæller Or AntalMulig > 0
    Deltager1 = Int((9 * Rnd) + 1)
    AntalMulig = 0
    For i = 1 To 9
        If IsEmpty(Worksheets("Kampskema").Cells(Deltager1 + 1, i + 1)) And Deltager1 <> i Then
            AntalMulig = AntalMulig + 1
            MuligModstander(AntalMulig) = i
        End If
    Next i
    Tæller = Tæller + 1
Loop
If AntalMulig > 0 Then
    Deltager2 = MuligModstander(Int((AntalMulig * Rnd) + 1))
    Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1) = "a"
End If

Tæller = 0
For i = 1 To 9
    If Deltager1 <> i And Deltager2 <> i Then
        Tæller = Tæller + 1
        MuligModstander2(Tæller) = i
    End If
Next i

AntalMulig = 0
Tæller = 0
Do Until Tæller > MaksTæller Or AntalMulig > 0
    Deltager3 = MuligModstander2(Int((7 * Rnd) + 1))
    AntalMulig = 0
    For i = 1 To 7
        If IsEmpty(Worksheets("Kampskema").Cells(Deltager3 + 1, MuligModstander2(i) + 1)) And Deltager3 <> MuligModstander2(i) Then
            AntalMulig = AntalMulig + 1
            MuligModstander(AntalMulig) = MuligModstander2(i)
        End If
    Next i
    Tæller = Tæller + 1
Loop
If AntalMulig > 0 Then
    Deltager4 = MuligModstander(Int((AntalMulig * Rnd) + 1))
    Worksheets("Kampskema").Cells(Deltager3 + 1, Deltager4 + 1) = "b"
End If

End Sub
Avatar billede kabbak Professor
27. januar 2005 - 21:51 #23
Det med knapperne, jeg plejer at sætte dem med øjemål, jeg ved ikke om du kan definere det.
Avatar billede sjap Praktikant
27. januar 2005 - 21:56 #24
Hold da op der sker ting og sager, når man lige tager en tænkepause. Tag blot mit oplæg som en idé, og brug det eller lad være. Hvis du har fået lavet noget, der virker, så hold fast i det :0)
Avatar billede ullum Praktikant
30. januar 2005 - 08:07 #25
Knapper, jeg kan ikke højreklikke på dem for at flytte dem rundt på arket, hvordan definerer jeg det?
Avatar billede ullum Praktikant
30. januar 2005 - 10:12 #26
Alt på nær en ting er løst

Hvordan undgår jeg at den genererer en kamp hvis ikke der står en deltager på felterne a2 a10/b1 til j1

Private Sub CommandButton1_Click()
Dim Deltager1, Deltager2, Tæller, AntalMulig As Integer
Dim MuligModstander(9)
Dim MuligModstander2(7)
Const MaksTæller = 10000

For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "a" Or Worksheets("Kampskema").Cells(i, j) = "b" Then
            Worksheets("Kampskema").Cells(i, j) = "X"
        End If
    Next j
Next i

Randomize
Tæller = 0
Do Until Tæller > MaksTæller Or AntalMulig > 0
    Deltager1 = Int((9 * Rnd) + 1)
    AntalMulig = 0
    For i = 1 To 9
        If IsEmpty(Worksheets("Kampskema").Cells(Deltager1 + 1, i + 1)) And Deltager1 <> i Then
            AntalMulig = AntalMulig + 1
            MuligModstander(AntalMulig) = i
        End If
    Next i
    Tæller = Tæller + 1
Loop
If AntalMulig > 0 Then
    Deltager2 = MuligModstander(Int((AntalMulig * Rnd) + 1))
    Worksheets("Kampskema").Cells(Deltager1 + 1, Deltager2 + 1) = "a"
End If

Tæller = 0
For i = 1 To 9
    If Deltager1 <> i And Deltager2 <> i Then
        Tæller = Tæller + 1
        MuligModstander2(Tæller) = i
    End If
Next i

AntalMulig = 0
Tæller = 0
Do Until Tæller > MaksTæller Or AntalMulig > 0
    Deltager3 = MuligModstander2(Int((7 * Rnd) + 1))
    AntalMulig = 0
    For i = 1 To 7
        If IsEmpty(Worksheets("Kampskema").Cells(Deltager3 + 1, MuligModstander2(i) + 1)) And Deltager3 <> MuligModstander2(i) Then
            AntalMulig = AntalMulig + 1
            MuligModstander(AntalMulig) = MuligModstander2(i)
        End If
    Next i
    Tæller = Tæller + 1
Loop
If AntalMulig > 0 Then
    Deltager4 = MuligModstander(Int((AntalMulig * Rnd) + 1))
    Worksheets("Kampskema").Cells(Deltager3 + 1, Deltager4 + 1) = "b"
End If

End Sub

Private Sub CommandButton2_Click()
For i = 2 To 10
    For j = 2 To 10
        If Worksheets("Kampskema").Cells(i, j) = "a" Or Worksheets("Kampskema").Cells(i, j) = "b" Then
            Worksheets("Kampskema").Cells(i, j) = ""
        End If
    Next j
Next i


End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

End Sub
Avatar billede sjap Praktikant
30. januar 2005 - 12:01 #27
Du finder da også hele tiden på noget nyt! Kan du huske hvad dit oprindelige spørgmål var? Prøv lige at sammenligne det med komplexiteten af svaret.

Nå, men her er så et forsøg på at løse din sidste indskydelse. Den virker kun hvis du fjerner deltagere fra "bunden". Dvs. der må ikke være tomme felter midt i tabellen.

Option Base 1
Const OffsetRække = 2      'Antallet af rækker over tabelområdet (inkl. overskrifter)
Const OffsetKolonne = 1    'Antallet af kolonner til venstre for tabelområdet (inkl. overskrifter)
Const MaksDeltagere = 9    'Det maksimale antal deltagere, der er plads til i tabellen
                            'Har intet med det aktuelle antal deltagere at gøre

Private Sub CommandButton1_Click()
Dim Deltager1, Deltager2, Tæller, AntalMulig As Integer
Dim MuligModstander(MaksDeltagere)
Dim MuligModstander2(MaksDeltagere - 2)
Const MaksTæller = 10000

For i = OffsetRække + 1 To OffsetRække + MaksDeltagere
    For j = OffsetKolonne + 1 To OffsetKolonne + MaksDeltagere
        If Worksheets("Kampskema").Cells(i, j) = "a" Or Worksheets("Kampskema").Cells(i, j) = "b" Then
            Worksheets("Kampskema").Cells(i, j) = "X"
        End If
    Next j
Next i

AntalDeltagere = 0
For i = 1 To MaksDeltagere
    If Not IsEmpty(Worksheets("Kampskema").Cells(OffsetRække + i, OffsetKolonne)) Then
        AntalDeltagere = AntalDeltagere + 1
    End If
Next i

Randomize
Tæller = 0
Do Until Tæller > MaksTæller Or AntalMulig > 0
    Deltager1 = Int((AntalDeltagere * Rnd) + 1)
    AntalMulig = 0
    For i = 1 To AntalDeltagere
        If IsEmpty(Worksheets("Kampskema").Cells(Deltager1 + OffsetRække, i + OffsetKolonne)) And Deltager1 <> i Then
            AntalMulig = AntalMulig + 1
            MuligModstander(AntalMulig) = i
        End If
    Next i
    Tæller = Tæller + 1
Loop
If AntalMulig > 0 Then
    Deltager2 = MuligModstander(Int((AntalMulig * Rnd) + 1))
    Worksheets("Kampskema").Cells(Deltager1 + OffsetRække, Deltager2 + OffsetKolonne) = "a"
End If

Tæller = 0
For i = 1 To AntalDeltagere
    If Deltager1 <> i And Deltager2 <> i Then
        Tæller = Tæller + 1
        MuligModstander2(Tæller) = i
    End If
Next i

AntalMulig = 0
Tæller = 0
Do Until Tæller > MaksTæller Or AntalMulig > 0
    Deltager3 = MuligModstander2(Int(((AntalDeltagere - 2) * Rnd) + 1))
    AntalMulig = 0
    For i = 1 To AntalDeltagere - 2
        If IsEmpty(Worksheets("Kampskema").Cells(Deltager3 + OffsetRække, MuligModstander2(i) + OffsetKolonne)) And Deltager3 <> MuligModstander2(i) Then
            AntalMulig = AntalMulig + 1
            MuligModstander(AntalMulig) = MuligModstander2(i)
        End If
    Next i
    Tæller = Tæller + 1
Loop
If AntalMulig > 0 Then
    Deltager4 = MuligModstander(Int((AntalMulig * Rnd) + 1))
    Worksheets("Kampskema").Cells(Deltager3 + OffsetRække, Deltager4 + OffsetKolonne) = "b"
End If

End Sub

Private Sub CommandButton2_Click()

Offset = OffsetRække + 2
For j = OffsetKolonne + 1 To OffsetKolonne + MaksDeltagere
    For i = Offset To OffsetRække + MaksDeltagere
        Worksheets("Kampskema").Cells(i, j).ClearContents
    Next i
    Offset = Offset + 1
Next j

End Sub
Avatar billede ullum Praktikant
30. januar 2005 - 12:20 #28
a
Avatar billede ullum Praktikant
30. januar 2005 - 12:20 #29
a
Avatar billede ullum Praktikant
30. januar 2005 - 12:24 #30
hej sjap
det er ikke fordi at citronen skal presses til det yderste
besvar venligst http://www.eksperten.dk/spm/586108
og hvis jeg ikke kan finde ud af det sidste opretter jeg endnu et spm
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