This should do it - it assumes no header rows and will write the combinations to sheet2 (which will be cleared first)...
Sub Permutations()
Const sSOURCE_SHEET As String = "Sheet1"
Const sSOURCE_RANGE As String = "A:C"
Const sTARGET_SHEET As String = "Sheet2"
Dim lLoop As Long
Dim lItems As Long
Dim lCols As Long
Dim lWriteLoop As Long
Dim lCombo As Long
Dim lThisVal As Long
Sheets(sTARGET_SHEET).Cells.Clear
With Sheets(sSOURCE_SHEET)
lItems = .Cells(.Rows.Count, .Range(sSOURCE_RANGE).Columns(1).Column).End(xlUp).Row
lCols = .Range(sSOURCE_RANGE).Columns.Count
For lLoop = 1 To lItems ^ lCols
lCombo = lLoop - 1
For lWriteLoop = 1 To lCols
lThisVal = lCombo Mod lItems
Sheets(sTARGET_SHEET).Cells(lLoop, lCols + 1).Offset(0, -1 * lWriteLoop).Value = .Cells(lThisVal + 1, lCols + 1).Offset(0, -1 * lWriteLoop).Value
lThisVal = Int(lThisVal / lItems)
Next lWriteLoop
Next lLoop
End With
End Sub
Bookmarks