A family of Microsoft spreadsheet software with tools for analyzing, charting, and communicating data.
Thanks Hans, unfortuneately thats not quite what I wos looking for. But in after some googling, I came across this bit of code with seems to do what I was looking for. It's quite lengthy, and although relatively quick with a small data set, take would take a while with a larger set. Might have to look into editing it to use arrays.
`Sub sub_CrossJoin()
Dim rg_Selection As Range Dim rg_Col As Range Dim rg_Row As Range Dim rg_Cell As Range Dim rg_DestinationCol As Range Dim rg_DestinationCell As Range Dim int_PriorCombos As Integer Dim int_TotalCombos As Integer Dim int_ValueRowCount As Integer Dim int_ValueRepeats As Integer Dim int_ValueRepeater As Integer Dim int_ValueCycles As Integer Dim int_ValueCycler As Integer
int_TotalCombos = 1 int_PriorCombos = 1 int_ValueRowCount = 0 int_ValueCycler = 0 int_ValueRepeater = 0
Set rg_Selection = Selection Set rg_DestinationCol = rg_Selection.Cells(1, 1) Set rg_DestinationCol = rg_DestinationCol.Offset(0, rg_Selection.Columns.Count)
'get total combos For Each rg_Col In rg_Selection.Columns int_ValueRowCount = 0 For Each rg_Row In rg_Col.Cells If rg_Row.Value = "" Then Exit For End If int_ValueRowCount = int_ValueRowCount
- 1 Next rg_Row int_TotalCombos = int_TotalCombos
- int_ValueRowCount Next rg_Col
int_ValueRowCount = 0
'for each column, calculate the repeats needed for each row value and then populate the destination For Each rg_Col In rg_Selection.Columns int_ValueRowCount = 0 For Each rg_Row In rg_Col.Cells If rg_Row.Value = "" Then Exit For End If int_ValueRowCount = int_ValueRowCount
- 1 Next rg_Row int_PriorCombos = int_PriorCombos
- int_ValueRowCount int_ValueRepeats = int_TotalCombos / int_PriorCombos
int_ValueCycles = (int_TotalCombos / int_ValueRepeats) / int_ValueRowCount int_ValueCycler = 0
int_ValueRepeater = 0
Set rg_DestinationCell = rg_DestinationCol
For int_ValueCycler = 1 To int_ValueCycles For Each rg_Row In rg_Col.Cells If rg_Row.Value = "" Then Exit For End If
For int_ValueRepeater = 1 To int_ValueRepeats rg_DestinationCell.Value = rg_Row.Value Set rg_DestinationCell = rg_DestinationCell.Offset(1, 0) Next int_ValueRepeater
Next rg_Row Next int_ValueCycler
Set rg_DestinationCol = rg_DestinationCol.Offset(0, 1) Next rg_Col End Sub
`