• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

unieke waarde mogelijkheden in getal van 5 cijfers

Status
Niet open voor verdere reacties.

nizinny1964

Gebruiker
Lid geworden
22 jun 2004
Berichten
95
Goedenavond,
Ik zou graag willen weten hoe ik in Excel alle mogelijke waarden kan krijgen voor een getal van 5 cijfers, waarin de cijfers 0 t/m 9 kunnen voorkomen.
Echter, doublures in het 5 cijferige getal mogen niet.
dus wel mag: 12345 en 13680
maar niet: 12344 of 13600

gr. Nizinny
 
bedankt voor je snelle reactie.
NU weet ik het aantal mogelijkheden, maar ik wil graag al doe mogelijkheden in een ijst hebben of in 1 kolom.
Weet je dat ook toevallig?
gr.
 
ter aanvulling:
Ik zoek alle mogelijkheden voor een getal met 5 cijfers (die op iedere positie 0 t/m 9 kan hebben).
En in het 5 cijferige getal mag een cijfer maar 1 keer voorkomen.
Dus juist zijn:
01234
01235
01236
01237
01238
01239

onjuist zijn:
00123
11234
12344


enzovoort
 
Ik vond deze, maar dan geeft ie een 5 cijferig getal (als ik voor 5 kies) die alleen uit 0 t/m 4 bestaat ipv 0 t/m 9:
 

Bijlagen

  • permutaties_rebmog_v2.xlsm
    17,3 KB · Weergaven: 17
Brute force, maar vooruit, binnen 1 seconde:
Code:
Sub VijfCijfers()
    rij = 0
    For i = 0 To 9
        For j = 0 To 9
            For k = 0 To 9
                For l = 0 To 9
                    For m = 0 To 9
                        If m <> l And m <> k And m <> j And m <> i And l <> i And l <> j And l <> k And k <> i And k <> j And j <> i Then
                            rij = rij + 1
                            Cells(rij, 1) = i & j & k & l & m
                        End If
                    Next
                Next
            Next
        Next
    Next
End Sub
 
Laatst bewerkt:
"Werkt niet" is een beetje kort door de bocht, het is wel handig als je zegt wat er dan niet werkt.
Maar je hebt gelijk, zet dit nog even als eerste statement in de Sub:

Code:
    Columns("A:A").NumberFormat = "@"
 
Ik heb het toegevoegd en zo te zien werkt ie.
Zal even steekproefjes nemen, maar voor nu bedankt!!
 
Waarom niet in een array en 1 keer wegschrijven, ±3 á 4x sneller.
 
Snel genoeg

@HSV
Ik vind 0,89 seconde snel genoeg.
Maar ben benieuwd naar jouw oplossing!
 
Laatst bewerkt:
hier nog een poging (in de vorige had ik niet een aantal getallen als invoer gemaakt )
aantal geeft het aantal cijfers weer en Nr geeft de permutatie uit de permutaties weer)
je moet hem eventueel zelf verder naar beneden slepen.

ps: verbeterde versie hij gaf de laatste permutatie niet weer. nu wel
ps als je verder wil gaan dan 9 dan is het handig om in D scheidingsteken(s) te zetten.
D is de laatste waarde van de funciton en staat standaard op ""
 

Bijlagen

  • afbeelding van N naar permutatie (sp) verbeterd.xlsm
    23,6 KB · Weergaven: 9
Laatst bewerkt:
Heb je office 365?
 
Nizinny, als je 01234 hebt gebruikt mag dan bvb 01243 ook nog of is dat ook een soort van dubbel ?
 
Hier een Excel 365 formule-optie:
Code:
=LET(x;TEKST(REEKS(55555);"00000");y;--(LENGTE(x)-LENGTE(SUBSTITUEREN(x;KIEZEN({1\2\3\4\5\6\7\8\9\10};0;1;2;3;4;5;6;7;8;9);""))>1);FILTER(x;BYROW(y;LAMBDA(y;SOM(y)))=0))
Genereert een lijst met getallen die alleen uit unieke cijfers bestaan.
 

Bijlagen

  • 55555 (AC).xlsx
    163,5 KB · Weergaven: 7
Laatst bewerkt:
Om in jouw code te blijven @AHulpje.
Valt nog niet mee vanaf een mobieltje.

Code:
Sub VijfCijfers()
Columns(1).numberformat = "@"
Redim a([10^5],0)
    For i = 0 To 9
        For j = 0 To 9
            For k = 0 To 9
                For l = 0 To 9
                    For m = 0 To 9
                        If m <> l And m <> k And m <> j And m <> i And l <> i And l <> j And l <> k And k <> i And k <> j And j <> i Then
                            a(rij,0)= i & j & k & l & m
                            Rij = rij + 1
                        End If
                    Next
                Next
            Next
        Next
    Next
Cells(1).resize(rij) =a
End Sub
 
Laatst bewerkt:
Hier een optie met recursie. Run de eerste macro

Code:
Dim ar, sq, p As Long

Sub ListPerm()
    Dim y As Long
    
    ar = [transpose(row(1:10)-1)]
    p = 5       'Aantal
    ReDim sq(1 To (UBound(ar) - LBound(ar) + 1) ^ p, 1 To 1)
     
    PermutRep 1, "", y
    
    Sheets(1).Columns(1).NumberFormat = "@"
    Sheets(1).Range("A2").Resize(UBound(sq)) = sq
End Sub


Sub PermutRep(x As Long, xStr As String, y As Long)
    Dim i As Long
     
    For i = LBound(ar) To UBound(ar)
      If InStr(xStr, ar(i)) = 0 Then
        If x = p Then
            y = y + 1
            sq(y, 1) = xStr & ar(i)
        Else
            PermutRep x + 1, xStr & ar(i), y
        End If
      End If
    Next i
End Sub
 
Laatst bewerkt:
@HSV
Jouw methode is zelfs 6,6 keer zo snel!:thumb:
 
Hier nog een wat kortere formule voor Excel 365:
Code:
=LET(x;TEKST(REEKS(10^5);"00000");y;--DEEL(x;KIEZEN({1\2\3\4\5};1;2;3;4;5);1);FILTER(x;BYROW(y;LAMBDA(y;ISFOUT(MODUS(y))))))
N.B. Reeks aangepast n.a.v. opmerking HSV.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan