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

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

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

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

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.

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

Set Results = Worksheets.Add

vAllItems = Rng.Offset(2, 0).Resize(PopSize).Value

ReDim Buffer(1 To BufferSize) As String

BufferPtr = 0

If Which = "C" Then

AddCombination PopSize, SetSize

Else

AddPermutation PopSize, SetSize

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

End Sub 'AddPermutation

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

End Sub 'AddCombination

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

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

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.

Thanks all.

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

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.