Доброе время суток.
Ничего сложного. Делаете рекурсивный вызов, например по такой структуре.
Public Sub Test()
Dim Indices(1 To 4) As Long
Dim fromId(1 To 4) As Long
Dim toId(1 To 4) As Long
fromId(1) = 1: toId(1) = 3
fromId(2) = 3: toId(2) = 5
fromId(3) = 4: toId(3) = 6
fromId(4) = 5: toId(4) = 7
Circles 1, 4, Indices, fromId, toId
End Sub
Private Sub Circles(ByVal curId As Long, ByVal lastId As Long, ByRef Indices() As Long, ByRef fromId() As Long, ByRef toId() As Long)
Dim i As Long
If curId = lastId Then
For i = fromId(curId) To toId(curId)
Indices(curId) = i
WriteResult Indices
Next
Else
For i = fromId(curId) To toId(curId)
Indices(curId) = i
Circles curId + 1, lastId, Indices, fromId, toId
Next
End If
End Sub
Private Sub WriteResult(ByRef Indices() As Long)
Dim sOut As String, i As Long, vStart As Long
vStart = LBound(Indices)
sOut = CStr(Indices(vStart))
For i = vStart + 1 To UBound(Indices)
sOut = sOut & "; " & CStr(Indices(i))
Next
Debug.Print sOut
End Sub
Успехов.