Avatar billede fly__one Nybegynder
09. april 2003 - 14:58 Der er 6 kommentarer og
1 løsning

Genere mulige udfald

Hej

jeg har et spørgsmål. Hvis jeg eksv. har 5 forskellige tal (1,2,3,4,5) og vil vælge 3 (uden tilbagelægning) så kan jeg lave 10 forskellige kombinationer.

Spørgsmålet er: kan jeg få Excel til at genere de mulige kombinationer dvs. 123, 124, 125 osv.????
Avatar billede _darkstar_ Nybegynder
09. april 2003 - 15:11 #1
Ahæm. Vil du virkelig *genere* alle de udfald?
Avatar billede janvogt Praktikant
09. april 2003 - 15:22 #2
Giver dit eksempel ikke 60 kombinationer?
Eller er 123 det samme som 321?
Avatar billede _darkstar_ Nybegynder
09. april 2003 - 15:34 #3
Hvis 123 === 321 skal det så ikke give 20 kombinationer?
Avatar billede jkrons Professor
09. april 2003 - 16:15 #4
Antallet af kombinationer er 10 - antallet af permutationer er 60.
Avatar billede clemen Nybegynder
10. april 2003 - 08:53 #5
Jeg vil gætte på at excel ikke kan genere de mulige udfald med mindre at det kan gøres med noget VBA.
Avatar billede Slettet bruger
10. april 2003 - 13:30 #6
Avatar billede Slettet bruger
10. april 2003 - 13:54 #7
Rettelse:
Det forrige link lister kun alle permutationerne.

Denne her lister alle kombinationer, af n elementer taget k af gangen.

Indsæt i et nyt VBA modul
---------------------------------

'
' Credit:  Charles Griffin  <cgriffin@ANL.GOV>
'

'Global Variables
Option Explicit
    Dim colCounter() As Integer
    Dim colBottom() As Integer
    Dim colTop() As Integer
    Dim loopIndex
    Dim rowNum As Integer
    Dim k As Integer
    Dim numCombins As Integer
    Dim outputrng As Range

Sub ListCombinations()
    Dim colNum As Integer
    Dim n As Integer
    MsgBox "Lists all of the combinations of n items taken k at a time."
    n = InputBox("n= ", "n items")
    k = InputBox("k= ", "k at a time")
    ReDim colCounter(1 To k)
    ReDim colBottom(1 To k)
    ReDim colTop(1 To k)
    'Initialize values
    rowNum = 1
    For colNum = 1 To k
        colBottom(colNum) = colNum
        colTop(colNum) = colNum + n - k
        colCounter(colNum) = 0
    Next
    'ActiveSheet.Range("A:IV").ClearContents    '**Put this in if you wantthe wksht cleared**
    Set outputrng = Selection
    numCombins = Application.Combin(n, k)
    MsgBox "The number of combinations is " & numCombins
    loopIndex = 0
    Call forLoop(colBottom(1), colTop(1))
End Sub

Sub rowPrint()
    Dim colNum As Integer
    If rowNum > numCombins Then End
    For colNum = 1 To k
        outputrng(rowNum, colNum) = colCounter(colNum)
    Next
    rowNum = rowNum + 1
End Sub

Sub forLoop(bottom As Integer, top As Integer)
    Dim colNum As Integer
    Dim i As Integer
    loopIndex = loopIndex + 1
    If (loopIndex > k) Then
        Call rowPrint
    Else
        colNum = loopIndex
        For colCounter(colNum) = colBottom(colNum) To colTop(colNum)
            Call forLoop(colBottom(colNum), colTop(colNum))
        Next colCounter(colNum)
        colBottom(loopIndex) = colBottom(loopIndex) + 1
        For i = loopIndex + 1 To k
            colBottom(i) = colBottom(i - 1) + 1
        Next
    End If
    loopIndex = loopIndex - 1
End Sub

------------------------------

Koden kunne vist godt trænge til at blive strammet lidt op, men
den ser ud til at virke.
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