Combination Help

eyal8r

Board Regular
Joined
Mar 18, 2002
Messages
179
Hey guys-
I have a list of 10 of my favorite/lucky numbers that I want to play in the lottery. The lottery picks 5 numbers total. I need a way to show me all the possible combinations of my 10 numbers picked in a 5 number draw (hope that makes sense). There are no repeat combinations- for example- I DO NOT WANT 1-2-3-4-5 and 5-4-3-2-1 to come up as separate combinations- so each of my favorite #s needs to be used only once in each combination, and each set used once.

I have searched this board for 2 hours now- read tons of other posts, but not finding a real solution. The output will be a list of all the possible combinations (no repeats, and no permutations) using my 10 favorite numbers. Another example-
1-2-3-4-5
1-2-3-4-6
1-2-3-4-7
1-2-3-4-8
1-2-3-4-9
1-2-3-5-6
1-2-3-5-7
and so on.

How do I create this? I realize the resulting table will be quite a large number of combinations- but we're going to have fun with it and pick a few at random. Any help is appreciation!
 
Re: This Programme can randomly draw from diff combination

Im doing 6 digit numbers from 1-49, but all the spaces get filled up and not all the combinations are there, is there a way to store the other results so I J K L M N coloumns so on an so forth?
 
Upvote 0

Excel Facts

Test for Multiple Conditions in IF?
Use AND(test, test, test, test) or OR(test, test, test, ...) as the logical_test argument of IF.
Re: This Programme can randomly draw from diff combination

Hello, I am looking for books or webs to learn about the statement " combinationsNP " how to used, procedure examples, modules, in the forum there are few examples but to find how can I used in diferent ways, properties, and so on, thanks.
 
Upvote 0
PGC01, please, can you tell me, where (books, pdf , website) to find more information how to use the -----combinationsNP--- you just use in this code, I had been looking for that. you have to write like first ( vElements As Variant, p As Integer, vresult As Variant, lRow As Long, iElement As Integer, iIndex As Integer)and down the line you write again (vElements, p, vresult, lRow, i + 1, iIndex + 1) so between you have to write what, and how, please any directions will be appreciate. in a code I am working have this statement give me the sum, but I don't know how to get the range also, thanks.
 
Upvote 0
Hi

I only changed 2 things:
- now the code at the beginning clears all columns from D to the right
- if the total number of permutations/combinations is bigger than the total cells in a column, the code continues to write in groups of columns to the right

Remark: permutations/combinations deal with powers and factorials and so it's very easy to get values in the order of millions and so even this solution will not work when the whole worksheet is full. In those cases you'd have to change the way the result is written, like continuing in another worksheet or write a CSV file.

Try:
Code:
Option Explicit


' PGC Set 2007
' Calculates and writes the Combinations / Permutations with/without repetition
' Assumes the result is written from row 1 down. If the total number of cells in a column
' is less than tha number of results continues in another group of columns to the right.
' vElements - Array with the set elements (1 to n)
' p - number of elements in 1 combination/permutation
' bComb - True: Combinations, False: Permutations
' bRepet - True: with repetition, False: without repetition
' vResult - Array to hold 1 permutation/combination (1 to p)
' lRow - row number. the next combination/permutation is written in lRow+1
' vResultAll - Array to hold all the permutations/combinations (1 to Total, 1 to p)
' iElement - order of the element to process in case of combination
' iIndex - position of the next element in the combination/permutation

' Sub CombPerm() deals with the input / output
' Sub CombPermNP() generates the combinations / permutations

Sub CombPerm()
Dim rRng As Range, p As Integer
Dim vElements As Variant, vResult As Variant, vResultAll As Variant, lTotal As Long
Dim lRow As Long, bComb As Boolean, bRepet As Boolean
Dim vResultPart, iGroup As Integer, l As Long, lMax As Long, k As Long

' Get the inputs and clear the result range (you may adjust for other locations)
Set rRng = Range("B5", Range("B5").End(xlDown)) ' The set of numbers
p = Range("B1").Value ' How many are picked
bComb = Range("B2")
bRepet = Range("B3")
Range("D1", Cells(1, Columns.Count)).EntireColumn.Clear

' Error
If (Not bRepet) And (rRng.Count < p) Then
    MsgBox "With no repetition the number of elements of the set must be bigger or equal to p"
    Exit Sub
End If

' Set up the arrays for the set elements and the result
vElements = Application.Index(Application.Transpose(rRng), 1, 0)
With Application.WorksheetFunction
    If bComb = True Then
            lTotal = .Combin(rRng.Count + IIf(bRepet, p - 1, 0), p)
    Else
        If bRepet = False Then lTotal = .Permut(rRng.Count, p) Else lTotal = rRng.Count ^ p
    End If
End With
ReDim vResult(1 To p)
ReDim vResultAll(1 To lTotal, 1 To p)

' Calculate the Combinations / Permutations
Call CombPermNP(vElements, p, bComb, bRepet, vResult, lRow, vResultAll, 1, 1)

' Write the  Combinations / Permutations
' Since writing to the worksheet cell be cell is very slow, uses temporary arrays to write one column at a time
Application.ScreenUpdating = False
If lTotal <= Rows.Count Then
    Range("D1").Resize(lTotal, p).Value = vResultAll
Else
    While iGroup * Rows.Count < lTotal
        lMax = lTotal - iGroup * Rows.Count
        If lMax > Rows.Count Then lMax = Rows.Count
        ReDim vResultPart(1 To lMax, 1 To p)
        For l = 1 To lMax
            For k = 1 To p
                vResultPart(l, k) = vResultAll(l + iGroup * Rows.Count, k)
            Next k
        Next
        Range("D1").Offset(0, iGroup * (p + 1)).Resize(lMax, p).Value = vResultPart
        iGroup = iGroup + 1
    Wend
End If
Application.ScreenUpdating = True
End Sub

Sub CombPermNP(ByVal vElements As Variant, ByVal p As Integer, ByVal bComb As Boolean, ByVal bRepet As Boolean, _
                             ByVal vResult As Variant, ByRef lRow As Long, ByRef vResultAll As Variant, ByVal iElement As Integer, ByVal iIndex As Integer)
Dim i As Integer, j As Integer, bSkip As Boolean

For i = IIf(bComb, iElement, 1) To UBound(vElements)
    bSkip = False
    ' in case of permutation without repetition makes sure the element is not yet used
    If (Not bComb) And Not bRepet Then
        For j = 1 To p
            If vElements(i) = vResult(j) And Not IsEmpty(vResult(j)) Then
                bSkip = True
                Exit For
            End If
        Next
    End If

    If Not bSkip Then
        vResult(iIndex) = vElements(i)
        If iIndex = p Then
            lRow = lRow + 1
            For j = 1 To p
                vResultAll(lRow, j) = vResult(j)
            Next j
        Else
            Call CombPermNP(vElements, p, bComb, bRepet, vResult, lRow, vResultAll, i + IIf(bComb And bRepet, 0, 1), iIndex + 1)
        End If
    End If
Next i
End Sub

Ex.
ABCDEFGHIJKLMNOPQ
1p636232
2CombinationsFALSE136233
3RepetitionTRUE236234
4336235
5Set436236
6153624
72636241
83136242
941136243
1051236244
1161336245
121436246
13153625
141636251
15236252
[Book1]Sheet1

<tbody>
</tbody>


In this case the first group of columns is written until the last row and the second group until row 52113, making a total of 117649 permutations (using xl2000, 64K cells/column).
Hi pgc01, I am using your code post#43 which is amazing to generate Combinations,Permutations including repeated.

I would like is it possible to have output of "Permutations with repetitions" only for desire sums.

I have opened a new thread for the query under this link

https://www.mrexcel.com/forum/excel...xact-sum-output-combinations.html#post5099183

Please could you take a look if there can be a solution for output combinations with fixed sum

Thank you in advance

Regards,
Kishan
 
Last edited:
Upvote 0
Re: This Programme can randomly draw from diff combination

Hi There Stephen,

Can you please explain what this code is doing, I am trying to get a list of 6 items across, by your p = Range("A28"), which contains my maximum number of columns.

Jag
 
Upvote 0
So since all pick 3 and pick 4 numbers have different combinations possible, I want excel to highlight them based on how many times each combination repeats. I want to do this for 3 and 4 digit sets separately. Ultimately I want to paste all winning numbers in column A
in let's say every March from 2001-2018
and I want excel to find out the # that comes the most in March. Can this be done?
"So for example the number 1000 ""boxed"" it would have to pick out" All 1000, 0100, 0010, and 0001 numbers as a boxed combination.
But some numbers have more sets of combinations would they all be able to exist on the same sheet. Is it possible to have excel highlight the combinations that repeat more than once? Or a different color if they repeat 2,3,4, times...etc?
 
Upvote 0

Forum statistics

Threads
1,216,084
Messages
6,128,722
Members
449,465
Latest member
TAKLAM

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top