Hi theriot,
The code could be made much more efficient by avoiding the selections:
Sub Spiral()
Dim userinput As Long, n As Long, i As Long, j As Long, rngAddr As Range
userinput = InputBox("go how far?")
n = 1: j = 0: i = 1
Set rngAddr = ActiveCell
Do Until n > userinput
Do Until j > i
If n <= userinput Then
Set rngAddr = rngAddr.Offset(0, 1)
rngAddr.Value = n
rngAddr.Interior.Color = vbRed
j = j + 1
n = n + 1
Else
Exit Sub
End If
Loop
i = i + 1
j = 1
Do Until j > i
If n <= userinput Then
Set rngAddr = rngAddr.Offset(-1, 0)
rngAddr.Value = n
rngAddr.Interior.Color = vbYellow
j = j + 1
n = n + 1
Else
Exit Sub
End If
Loop
i = i + 1
j = 1
Do Until j > i
If n <= userinput Then
Set rngAddr = rngAddr.Offset(0, -1)
rngAddr.Value = n
rngAddr.Interior.Color = vbGreen
j = j + 1
n = n + 1
Else
Exit Sub
End If
Loop
i = i + 1
j = 1
Do Until j > i
If n <= userinput Then
Set rngAddr = rngAddr.Offset(1, 0)
rngAddr.Value = n
rngAddr.Interior.Color = vbBlue
j = j + 1
n = n + 1
Else
Exit Sub
End If
Loop
i = i + 1
j = 1
Loop
Set rngAddr = Nothing
End Sub
Note: You also need some error-checking in case the active cell doesn't allow enough room for the spiral range to grow.