Please help!! VLOOKUP AND COMBINATION FUNCTION

Y

Yossy

Possible two-person teams that can be formed from 8 candidates (28) i.e
=COMBIN(8,2).

However, my question is Lets assume the list of all 8 candidates names' are
John, Dustin, Mary, David, Peter, Rossy, Liz and Mike. How do I get the list
of all the two-person team that will total 28. All help will be appreciated.

I was thinking of using the vlookup together with the COMBIN function but
can't figure it out. Thanks
 
M

Michael

If the information below helps you please rate this posting.
Regards,

Mike Arch.


This maybe a better approach. It is a Combination/Permuation Sub built by
Mirna Larson.
Column A
C
2
John
Mike
David
Nancy
Dustin
Rossy
Eliz
Peter

The letter "C" on A1 means combination the number 2 on A1 is how many people
on each combination and your players are listed below A2, the result is
John, Mike
John, David
John, Nancy
John, Dustin
John, Rossy
John, Eliz
John, Peter
Mike, David
Mike, Nancy
Mike, Dustin
Mike, Rossy
Mike, Eliz
Mike, Peter
David, Nancy
David, Dustin
David, Rossy
David, Eliz
David, Peter
Nancy, Dustin
Nancy, Rossy
Nancy, Eliz
Nancy, Peter
Dustin, Rossy
Dustin, Eliz
Dustin, Peter
Rossy, Eliz
Rossy, Peter
Eliz, Peter

Here is the code:
Option Explicit

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

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
 
Y

Yossy

Thanks Micheal. Another question please. I also have 4 vertical bars each bar
with High and Low
points. I will like to draw out the 2 possible combination of comparison of
the High and Low points of the bars. I think it should be =COMBIN(8,2) as
well. Since there are 8points in the 4 bars. I was also thinking 16points.
Help anyway

E.g Bar49 Bar50 Bar51 Bar52
H9 H7 H12 H9
L3 L1 L7 L1

I want the code to compare all bars high and low points and display all the
possible comparison of High to High, High to Low, Low to Low and Low to High.
The result will be displayed like the following:
Bar49 High > Bar50 High (i.e H9 is higher than H7)
Bar49 Low > Bar50 Low
Bar49 High < Bar51 high
Bar49 High = Bar52 high
Bar50 High = Bar51 Low

etc. Please help me set this function. I might be wrong with the combination
however, I have oulined how the result should be. Many Thanks
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top