As part of a project I’m working on I need to create a cross join of users against symbols; the idea being that any of the given users might look at any of the given symbols. I have a list of users and a list of symbols which I essentially need a cross-join on.
For this example I’ll use cars and engine/transmission variants.
From these two lists I need to quickly create all possible combinations;
I can’t find any function that will do what I was so I’ve created a VBA function that will do it;
Function CrossJoin(r1 As Range, r2 As Range) As Variant Dim size As Integer Dim arr As Variant Dim offset As Integer size = r1.Rows.Count * r2.Rows.Count ReDim arr(0 To size, 0 To 1) offset = 0 For i = 1 To r1.Rows.Count For j = 1 To r2.Rows.Count arr(offset, 0) = r1.Cells(i, 1).Value2 arr(offset, 1) = r2.Cells(j, 1).Value2 offset = offset + 1 Next j Next i CrossJoin = arr End Function
To use the function select and empty cell and insert
=CROSSJOIN(A1:A4, B1:B4) (adjusting the input range as required) then when the function has evaluated extend the range to the size of the expected cross join. (in this case 16x2).
To calculate the array function hit
F2 then press
Ctrl+Shift+Enter to calculate the array.