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

Aantal unieke combinatie met som van aantallen

Status
Niet open voor verdere reacties.
Code:
[SIZE=1]Sub M_snb_alphamax()
    ReDim sq(2 ^ 10, 1)
    For j = 1 To UBound(sq)
        For jj = 0 To Log(j) / Log(2) 'shorter loops
            If (j And 2 ^ jj) <> 0 Then 'logic
                sq(j, 0) = sq(j, 0) & Chr(65 + jj)
                sq(j, 1) = sq(j, 1) + Array(20, 12, 9, 15, 6, 20, 14, 7, 6, 2, -999)(jj) '-999 prevent error in only last line
            End If
        Next
    Next
    Cells(1, 18).Resize(UBound(sq), 2) = sq
End Sub
[/SIZE]
 
Laatst bewerkt:
@Sylvester, ziet er goed uit. Is het niet mogelijk om de combinaties en de aantallen te splitsen in aparte kolommen?
@MarcelBeug, de voorbeeld types A t/m J zijn nu hardcoded in je formule is het ook mogelijk dat hij ipv hiervan de namen pakt die weergegeven worden in kolom A?

Bedankt avast.
 
@Alpha

Bedankt voor: log(j)/log(2) (blijkbaar toch iets te lang geleden.....)
De foutafhandeling is niet nodig als we de lus met 1 gang reduceren
De 'logic' is fantastisch (edoch ik begrijp hem niet: de And operator werkt hier anders dan ik zou verwachten: kun je svp iets toelichten ?)
De toets op <>0 is niet nodig.

Code:
Sub M_snb_alphamax_000()
    ReDim sq(2 ^ 10, 1)
    
    For j = 1 To UBound(sq) - 1
        For jj = 0 To Log(j) / Log(2)
            If j And 2 ^ jj Then
                sq(j, 0) = sq(j, 0) & Chr(65 + jj)
                sq(j, 1) = sq(j, 1) + Array(20, 12, 9, 15, 6, 20, 14, 7, 6, 2)(jj)
            End If
        Next
    Next
    
    Cells(1, 18).Resize(UBound(sq), 2) = sq
End Sub

Voor de vragensteller en @Sylv een illustratie hoe eenvoudig in plaats van letters andere gegevens als combinaties kunnen worden weergegeven.

Code:
Sub M_snb_alphamax_001()
    sp = Split("groen geel blauw wit paars zwart oranje rood grijs indigo")
    ReDim sq(2 ^ 10, 1)
    
    For j = 1 To UBound(sq) - 1
        For jj = 0 To Log(j) / Log(2)
            If j And 2 ^ jj Then
                sq(j, 0) = sq(j, 0) & "_" & sp(jj)
'                sq(j, 0) = sq(j, 0) & Chr(65 + jj)
                sq(j, 1) = sq(j, 1) + Array(20, 12, 9, 15, 6, 20, 14, 7, 6, 2)(jj)
            End If
        Next
    Next
    
    Cells(1, 18).Resize(UBound(sq), 2) = sq
End Sub
 
Laatst bewerkt:
Code:
j And 2 ^ jj
j is de regel maar ook een bitmask.
2^jj maakt een bitmask met het te onderzoeken bit.
Daarna volgt een logische "EN". (bits 0&0=0, 0&1=0, 1&0=0, 1&1=1)
Als het te onderzoeken bit in de regel zit wordt een de letter en de waarde toegevoegd.
 
Laatst bewerkt:
@Sylvester, ziet er goed uit. Is het niet mogelijk om de combinaties en de aantallen te splitsen in aparte kolommen?
bedoel je 2 kolommen of bedoel je ook alle onderdelen van de combinaties in ieder een eigen kolom?
is het voor jou ook handig om het aantal kleuren in te kunnen stellen?
 
Dus de combinaties en de aantallen splitsen. Bijvoorbeeld de combinaties in kolom d en aantallen in kolom E. Hierdoor kan je ook ermee berekeningen doen. Bedankt voor je input.
 
@sylvester, je voorbeeld werkte goed maar indien ik dit naboots met excel2010 op het werk dan krijg ik #naam als uitkomst.
 
hier heb je een gesplitste versie:

let op per rij is het een matrix formule.

ps is het voor jou ook handig om bvb alleen de combinatie met een vast aantal componenten te creëren? (bvb alleen de 4 tallen)
 

Bijlagen

  • kleuren (2.xlsm
    44,6 KB · Weergaven: 32
Laatst bewerkt:
- Dag Sylvester, over combinatie met een vast aantal componenten snap ik niet helemaal.
- Je eerste versie vind ik toch dynamischer. Iets meer achtergrond info: Een programma van ons vult de eerste twee kolommen met een type component in kolom A en in kolom B de hoeveelheid. De types varieren van 5 tot 10. Vandaar dat ik in mijn eerste voorbeeld de letters A t/m J gebruikte. Indien het programma alleen met 8 types komt dan kan ik je formule aanpassen dat hij tot cel B9 kijkt en dat doet het nu prima. In je tweede versie kan ik het niet dynamisch aanpassen indien de types minder zijn.
 
hier een mogelijkheid zonder macro
je kunt zelf de formules naar beneden door trekken
 

Bijlagen

  • combinaties zonder macro 1.xlsx
    13,7 KB · Weergaven: 23
Laatst bewerkt:
Sag Sylvester,

Hierin mis ik de benamingen van de verschillende combinaties zoals in je eerste overzicht. Voordeel van de eerste is ook dat ik met behulp van een filter de combinaties kan kiezen met behulp van een filter (indien ze bijvoorbeeld te veel zijn (1024)).
 
@SP, @snb, @Alpha, wowwww... Procedures in combinatie met hogere wiskunde.... Damn! Was mooi geweest als ik daar op de middelbare school iets van had begrepen. Ha ha ha...
Maar fijn dat er mensen zoals jullie zijn! :thumb:
 
Yes, top!
Ben al enorm geholpen. Indien iemand het nog aan de praat krijgt met een script zodat ik geen formules hoeft te gebruiken zou goed zijn. Indien dit te lastig wordt dan zijn we al met deze geholpen.
Thanks allen voor het meedenken. Wordt echt enorm gewaardeerd. :thumb:
 
Macros zijn uitgeschakkeld bij ons. Heb alleen de mogelijkheid om een nieuwe macro aan te maken. Dus wat ik aan het doen ben is kijken hoe ik de function uit jou voorbeeld kopieert in mijn excel bestand.
Maar dat proces loopt nog :)
 
Echt knap om te zien.
Mijn complimenten.

Dat je zoiets kan bedenken.

Ik kon het tot aan @snb volgen, maar met de log() van @alphamax had ik zoiets van... laat maar zitten (ik heb het niet eens meer getest).
Ik heb hogere wiskunde gehad (vierde/vijfde verdieping of zo), maar ik kan het niet verzinnen.

Chapeau. :thumb::thumb:
 
als je liever geen formules wenst dan zou ik de macro van snb en alphamax gebruiken.
ik heb hem een heel klein beetje aangepast voor jouw situatie. (kolom toegevoegd om ook eenvoudig op aantal elementen te kunnen sorteren
 

Bijlagen

  • combinaties volgens snb en alphamax.xlsm
    27,5 KB · Weergaven: 31
Dit is het. Prachtig. Mijn dank is zeer groot.
Met de voorlaatste versie was het gelukt om de macro copy paste te doen. Van dit laatste ga ik morgen proberen. Ik zie dat er ook een macro 1 en 2 erbij zitten.
dat button nabootsen wordt waarschijnlijk iets uitdagender voor mij. Maar het voldoet helemaal.

vraag: In kolom A heb ik de types, Kolom B de aantallen. Indien ik in periode 2,3 nieuwe aantallen krijg die geplaatst wordt in kolom C, D etc (kolom A blijft gelijk) is het dan ook mogelijk om voor de nieuwe periode de som te zien? Deze zou dus tussen kolom E en F geplaatst moeten worden etc. etc..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan