Это будет делать именно то, что вы просили. Создает период листа, и если он уже существует, он будет зацикливаться, пока не найдет следующий доступный номер и не создаст следующий лист. В качестве примера я добавил, что он скопирует диапазон A2: H20 с листа, который был активен при запуске макроса, и вставил его на вновь созданный лист.
Sub CopyToNewSheet()
Dim ws As Worksheet
Dim i As Long
Dim SheetName As String, active as String
active = ActiveSheet.Name
SheetName = "Period"
Do While SheetExists(SheetName) = True
i = i + 1
SheetName = "Period " & i
Loop
With ThisWorkbook
Set ws = .Worksheets.Add(After:=.Sheets(.Sheets.Count))
ws.Name = SheetName
.Sheets(active).Range("A2:H20").Copy
.Sheets(SheetName).Range("A2").PasteSpecial
'I could've used ws.Range("A2").PasteSpecial instead but I wanted the copy and paste to look similar.
End With
End Sub
Function SheetExists(SheetName As String, Optional wb As Excel.Workbook)
Dim s As Excel.Worksheet
If wb Is Nothing Then Set wb = ThisWorkbook
On Error Resume Next
Set s = wb.Sheets(SheetName)
On Error GoTo 0
SheetExists = Not s Is Nothing
End Function
Функция SheetExists взята отсюда: Excel VBA, если существует рабочий лист ("wsName")