• 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.

Permutaties met voorwaarden

Status
Niet open voor verdere reacties.

michvand

Gebruiker
Lid geworden
23 mrt 2009
Berichten
82
Beste Excelexperts,

In de bijlage heb ik een voorbeeld gemaakt
Kolommen A tm D bevatten de getallen 1 t/m 16
In de kolommen F t/m J wil ik 4 getallen hebben uit de kolommen A t/m D
Ze mogen niet gelijk aan elkaar zijn en hun som moet 34 bedragen.
Hoe krijg ik dit voor elkaar? Met een opdracht Permut krijg ik alleen een aantal, iets meer dan 1000, maar hoe krijg ik de voorwaarde som 34
En hoe krijg ik alle mogelijkheden in de kolommen F t/m J.

Dank voor jullie antwoorden,
Mich.

Bekijk bijlage Voorbeeld voorwaarden.xlsx
 
met een domloepje:

vul de gele cel
in de grijze cel staat de formule

ps bedoelje combinaties? de volgorde is toch niet belangrijk of ????? bij een optelling maakt de volgorde niet uit.
 

Bijlagen

  • dom Loepje sp.xlsm
    17,2 KB · Weergaven: 60
Laatst bewerkt:
spraakverwarring, ik las domloesje en dacht, dat moet ik lezen ..., spijtig het was inderdaad een domloepje
 
@sylvester, no hard feelings :d
 
De oplossing is niet helemaal wat ik zocht.
Het liefst had ik gedacht aan een formule die je in een cel kon invullen en dan door naar rechts en naar beneden door te trekken alle combinaties zou krijgen, maar ik vrees dat het een een ellenlang ding gaat worden. Hoeveel zouden het aantal combinaties worden als je een ander getal in a1 zou invullen? Het getal moet dan wel tussen 10 en 58 liggen.
Je zou je kunnen afvragen wat het nut hiervan is. Ik had gedacht een combinatie van 4 samen met 3 andere combinaties van 4 zo onder elkaar te zetten zodat je een magisch vierkant krijgt waarbij naast de horizontale som die je al hebt, verticaal ook 34 krijgt en bovendien ook nog diagonaal deze som heeft. Maar dat is een ander verhaal waarvan ik niet weet of dat in excel ook mogelijk is.
 
als je nu zegt, dat je de gelukkige eigenaar van excel 2021 of 365 bent, dan kan er zo'n formule gezocht worden, anders wordt het een grote gruyèrekaas van Permutaties(16;4) = 43.680 regels waarvan er maar een hele kleine minderheid de juiste som hebben.
je kan hier de mosterd halen : http://www.snb-vba.eu/VBA_Combinations.html#L_3.5
 
Code:
Sub M_snb()
   With CreateObject("scripting.dictionary")
   For j = 1 To 16
     For jj = j + 1 To 16
       For jjj = jj + 1 To 16
         For jjjj = jjj + 1 To 16
          If j + jj + jjj + jjjj = 34 Then .Item(.Count) = Join(Array(j, jj, jjj, jjjj, 34))
         Next
       Next
     Next
    Next
    Cells(1).Resize(.Count) = Application.Transpose(.items)
  End With
End Sub
 
@snb, ik dacht eerst dat zijn combinaties, geen permutaties, maar dat is toch handig omspeelt door de opbouw van die loops :thumb: :p
Ik zit, apart van deze vraag, met het probleem van die transpose(.items) afhankelijk van het aantal records.
Ik vermoed dat je zo met methode 4 afkomt :love:
Code:
Sub M_snb()
     With CreateObject("scripting.dictionary")
          For j = 1 To 16
               For jj = j + 1 To 16
                    For jjj = jj + 1 To 16
                         For jjjj = jjj + 1 To 16
                              If j + jj + jjj + jjjj = 58 Then .Item(.Count) = Join(Array(j, jj, jjj, jjjj, 34))
                         Next
                    Next
               Next
          Next

          If .Count > 65000 Then MsgBox "probleem"

     'methode 1
          Select Case .Count
               Case 0: MsgBox "geen combinaties", vbInformation
               Case 1: Cells(1).Resize(.Count) = .items
               Case Else: Cells(1).Resize(.Count) = Application.Transpose(.items)
          End Select

     'methode 2
          If .Count Then
               If .Count = 1 Then Cells(1) = .items Else Cells(1).Resize(.Count) = Application.Transpose(.items)
          End If

     'methode 3
          j = .Count
          If .Count = 1 Then .Item(.Count) = ""
          If .Count > 1 Then Cells(1).Resize(j) = Application.Transpose(.items)


     End With

End Sub
 
snb, voor combinaties: (geen dubbelen)
Code:
   For j = 1 To 13
     For jj =  j+1 To 14
       For jjj = jj + 1 To 15
         For jjjj = jjj + 1 To 16
             'aktie
         Next
       Next
     Next
    Next
voor permutaties: (met dubbelen)
Code:
   For j = 1 To 16
     For jj = 1 To 16
       For jjj = 1 To 16
         For jjjj = 1 To 16
             'aktie
         Next
       Next
     Next
    Next
 
Laatst bewerkt:
Hi Sylvester

De lijst moet dus worden 4 getallen, elk een uit de rij 1 t/m 16 en elk verschillend die samen de som 34 geeft. Ik heb Excel 2019. Volgens mij moeten er rond de 1000 combinaties bestaan. Vroeger toen ik basic gebruikte, al weer 30 jaar geleden) had ik een programmaatje dat lijkt op wat snb aangaf. Vroeg me af of het in Excel ook kon door een formule in een cel (bv A1) en dan met naar rechts (tot D1) en naar beneden door te voeren om zo de combinaties te krijgen.

Vr. groet,
Mich
 
ik ben in de war over combinaties (1.820) en permutaties (43.680), maar de constructie van SNB is okay/geniaal-grappig door die for jj=j+1 to 16.

@michvand, voor een lijst van alle combinaties met formules, zie de link in #8. Daar moet je wel nog de som aan toevoegen en filteren.
Alleen vanaf 2021-365 kan het simpeler.
 
Laatst bewerkt:
Waarom zou je het gebeugen met zoveel formules (steeds herberekende) belasten als je het in 1 keer met VBA kunt?
Het gaat om een eenmalige aktie want het aantal combinaties neemt toe noch af.
Computertechnisch is het gebruik van herberekende formules in dit geval geen goed idee.
 
Laatst bewerkt:
Mich, jij schrijft
Ik had gedacht een combinatie van 4 samen met 3 andere combinaties van 4 zo onder elkaar te zetten zodat je een magisch vierkant krijgt waarbij naast de horizontale som die je al hebt, verticaal ook 34 krijgt en bovendien ook nog diagonaal deze som heeft
geef eens een excel bestandje met daar in wat getallen , zodat wij kunnen zien hoe het eindresultaat ongeveer moet zijn.
of bedoel je zo iets als uitkomst?
 

Bijlagen

  • zo iets.xlsx
    9,1 KB · Weergaven: 7
Laatst bewerkt:
of deze: bijna goed nu de diagonalen nog en dan ook nog een algoritme (een behoorlijke uitdaging lijkt me)
 

Bijlagen

  • zo iets 2.xlsx
    10,1 KB · Weergaven: 9
Laatst bewerkt:
Mich of iemand anders (Cow18 bvb :) ) , weet jij toevallig een oplossing waarbij de som van de diagonalen ook 34 opleveren? of zoek ik naar iets onmogelijks?
 
witte vlag ...
 
Er is een Excel document te downloaden op https://www.magischvierkant.com/twee-dimensionaal-nl/4x4/uitleg-4x4/ die alle oplossingen oplevert.
Mijn idee was om eerst alle mogelijke sommen uit 16 getallen die als uitkomt 34 oplevert. Ik schat 1000. Je begint dan met de combinaties die niet de cijfers uit de eerste 4 hebben, ik schat 750, dan combinaties van 4 cijfers voor de 8 die je niet hebt. Misschien 500 Tenslotte de laatste 4 en dan kijken of ze vertikaal en diagonaal ook 34 opleveren. Ik weet niet of dit de juiste strategie is om alle 880 mogelijkheden, eigenlijk 880 x8, of deze is te tijdrovend, zelfs voor een excel document.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan