# Perm Calculator

pj123 16:47 22 Sep 07
Locked

I have a Perm Calculator. It is DOS based but works OK in Win XP. Except, it won't print the output.

When I was using Win 98SE I could print the output no problem.

Does anyone know of another Perm Calculator that will print in XP. I have tried Googling but I am obviously not using the right keywords. (I keep getting hair perms).

Or, alternatively, I could make my own using Excel, if only I knew what the formula was?

An example: I know that "any 3 from 6" = 20 and "any 8 from 11" = 165, but what is the formula to get those results and would it work with any number from any number?

The Lottery, for example, is "any 6 from 49" the result is 13,983,816

VoG II 16:54 22 Sep 07

In Excel with Number in A1 (49 for the lottery), Number Chosen in B1 (6 for the lottery) then in C1

=COMBIN(A1,B1)

Note that whilst these numbers are called perm(utation)s in football pools parlance they are actually combinations (the order in which they are drawn does not matter).

taffyal 16:57 22 Sep 07

I'll try this- cant select any worse than I do!! Thanks

pj123 17:11 22 Sep 07

Thanks VoG™. But now how do I get the full combination?

Like any 3 from 6 = 20.

The full print out is

123
124
125
126
134
135
136
145
146
156
234
235
236
245
246
256
345
346
356
456

Thanks

pj123 17:20 22 Sep 07

Sorry VoG™ but I need it to show me what the combinations are. Obviously, I am not going to to try any 6 from 49, I don't have enough time left on this planet.

But simple one's like 3 from 5, 3 from 6, 8 from 10, 8 from 11 etc.

VoG II 17:55 22 Sep 07

I found this code on MrExcel - I've commented out a line that gave me errors (perhaps because I'm using Excel 2007).

Dim vAllItems As Variant
Dim Buffer() As String
Dim BufferPtr As Long
Dim Results As Worksheet
'
' Myrna Larson, July 25, 2000, Microsoft.Public.Excel.Misc

Sub ListPermutationsOrCombinations()
Dim Rng As Range
Dim PopSize As Integer
Dim SetSize As Integer
Dim Which As String
Dim n As Double
Const BufferSize As Long = 4096

Worksheets("Sheet1").Range("A1").Select
Set Rng = Selection.Columns(1).Cells
If Rng.Cells.Count = 1 Then
Set Rng = Range(Rng, Rng.End(xlDown))
End If

PopSize = Rng.Cells.Count - 2
If PopSize < 2 Then GoTo DataError

SetSize = Rng.Cells(2).Value
If SetSize > PopSize Then GoTo DataError

Which = UCase\$(Rng.Cells(1).Value)
Select Case Which
Case "C"
n = Application.WorksheetFunction.Combin(PopSize, SetSize)
Case "P"
n = Application.WorksheetFunction.Permut(PopSize, SetSize)
Case Else
GoTo DataError
End Select
'If n > Cells.Count Then GoTo DataError 'EDITED OUT BY VoG

Application.ScreenUpdating = False

vAllItems = Rng.Offset(2, 0).Resize(PopSize).Value
ReDim Buffer(1 To BufferSize) As String
BufferPtr = 0

If Which = "C" Then
Else
End If
vAllItems = 0

Application.ScreenUpdating = True
Exit Sub

DataError:
If n = 0 Then
Which = "Enter your data in a vertical range of at least 4 cells." _
& String\$(2, 10) _
& "Top cell must contain the letter C or P, 2nd cell is the Number" _
& "of items in a subset, the cells below are the values from Which" _
& "the subset is to be chosen."

Else
Which = "This requires " & Format\$(n, "#,##0") & _
" cells, more than are available on the worksheet!"
End If
MsgBox Which, vbOKOnly, "DATA ERROR"
Exit Sub
End Sub

Private Sub AddPermutation(Optional PopSize As Integer = 0, _
Optional SetSize As Integer = 0, _
Optional NextMember As Integer = 0)

Static iPopSize As Integer
Static iSetSize As Integer
Static SetMembers() As Integer
Static Used() As Integer
Dim i As Integer

If PopSize <> 0 Then
iPopSize = PopSize
iSetSize = SetSize
ReDim SetMembers(1 To iSetSize) As Integer
ReDim Used(1 To iPopSize) As Integer
NextMember = 1
End If

For i = 1 To iPopSize
If Used(i) = 0 Then
SetMembers(NextMember) = i
If NextMember <> iSetSize Then
Used(i) = True
AddPermutation , , NextMember + 1
Used(i) = False
Else
SavePermutation SetMembers()
End If
End If
Next i

If NextMember = 1 Then
SavePermutation SetMembers(), True
Erase SetMembers
Erase Used
End If

Private Sub AddCombination(Optional PopSize As Integer = 0, _
Optional SetSize As Integer = 0, _
Optional NextMember As Integer = 0, _
Optional NextItem As Integer = 0)

Static iPopSize As Integer
Static iSetSize As Integer
Static SetMembers() As Integer
Dim i As Integer

If PopSize <> 0 Then
iPopSize = PopSize
iSetSize = SetSize
ReDim SetMembers(1 To iSetSize) As Integer
NextMember = 1
NextItem = 1
End If

For i = NextItem To iPopSize
SetMembers(NextMember) = i
If NextMember <> iSetSize Then
AddCombination , , NextMember + 1, i + 1
Else
SavePermutation SetMembers()
End If
Next i

If NextMember = 1 Then
SavePermutation SetMembers(), True
Erase SetMembers
End If

Private Sub SavePermutation(ItemsChosen() As Integer, _
Optional FlushBuffer As Boolean = False)

Dim i As Integer, sValue As String
Static RowNum As Long, ColNum As Long

If RowNum = 0 Then RowNum = 1
If ColNum = 0 Then ColNum = 1

If FlushBuffer = True Or BufferPtr = UBound(Buffer()) Then
If BufferPtr > 0 Then
If (RowNum + BufferPtr - 1) > Rows.Count Then
RowNum = 1
ColNum = ColNum + 1
If ColNum > 256 Then Exit Sub
End If

Results.Cells(RowNum, ColNum).Resize(BufferPtr, 1).Value _
= Application.WorksheetFunction.Transpose(Buffer())
RowNum = RowNum + BufferPtr
End If

BufferPtr = 0
If FlushBuffer = True Then
Erase Buffer
RowNum = 0
ColNum = 0
Exit Sub
Else
ReDim Buffer(1 To UBound(Buffer))
End If

End If

'construct the next set
For i = 1 To UBound(ItemsChosen)
sValue = sValue & ", " & vAllItems(ItemsChosen(i), 1)
Next i

'and save it in the buffer
BufferPtr = BufferPtr + 1
Buffer(BufferPtr) = Mid\$(sValue, 3)
End Sub 'SavePermutation

VoG II 18:01 22 Sep 07

To use this, press ALT + F11 to open the Visual Basic Editor. Insert > Module then copy the code and paste it into the white window. Close the VBE.

Now on Sheet1 (and it must be called Sheet1 or an error will occur) starting in A1 enter data as follows:

C
3
1
2
3
4
5
6

[C says you want Combinations, the 3 in row 2 is the number to choose, and the values 1 to 6 are the population from which those aree to be chosen - so this example is a 3 from 6 'perm']

Then Tools > Macro > Macros, highlight ListPermutationsOrCombinations and click the Run button. A new sheet will be added listing the possibilities like this:

1, 2, 3
1, 2, 4
1, 2, 5
1, 2, 6
1, 3, 4
1, 3, 5
1, 3, 6
1, 4, 5
1, 4, 6
1, 5, 6
2, 3, 4
2, 3, 5
2, 3, 6
2, 4, 5
2, 4, 6
2, 5, 6
3, 4, 5
3, 4, 6
3, 5, 6
4, 5, 6

Acx 23:44 22 Sep 07

The way to work it out with pen and paper is

E.g. any 3 from 6

4x5x6
-------
1x2x3

= 20

Top row - last number ends in the 'from' amount (6) and decreases by the 'any' amount (3) Inc your first number.

Bottom row - always starts at 1 and increases by the 'any' amount (3).

Will work for all perms.

pj123 12:08 23 Sep 07

Thanks all.

Giving it a try later today. Will keep you informed.

pj123 13:29 24 Sep 07

Thanks VoG™. Didn't get round to trying it yesterday. Had a go this morning. Works perfectly.

Acx, thanks for your response but I think I am off pen and paper for this sort of thing.

My DOS based Perm Calculator does it so much better and so does the Excel function from VoG™.

Will tick as resolved.

This thread is now locked and can not be replied to.

Surface Pro 5 News - release date, UK price, features, specs

Microsoft Surface Studio hands-on review: the iMac killer is here

Best Mac antivirus 2017