У меня есть лист, где я использую несколько именованных диапазонов в формуле.Эти именованные диапазоны имеют относительные ссылки в них.Каждый год мне приходится копировать лист, удалять старые имена и назначать новые.Я пытаюсь заставить всю книгу делать все это программно, чтобы сэкономить время.
Я стараюсь избегать использования функции смещения, и все, что я нахожу в сети, говорит мне только о том, как преобразовать ее с помощьюфункция, но для формул (не диапазон, как мне нужно.) Код ниже берет мой диапазон и делает их все абсолютными.Как мне заставить их оставаться родственниками?Я пробовал R1C1, который, я думаю, действителен только для формулы.В качестве исходного кода я использовал сайт: https://powerspreadsheets.com/vba-create-named-range/
Option Explicit
Sub createNamedRange() 'https://powerspreadsheets.com/vba-create-named-range/
Dim myWorksheet As Worksheet
Dim i As Byte
Dim myNamedRange As Range
Dim myRangeName As String
Set myWorksheet = ThisWorkbook.Worksheets("Sheet1") 'identify worksheet containing cell range, and cell range itself (below)...
For i = 1 To 12 'i represents each month. we'll set range dependent upon month
Select Case i
Case Is = 1
Set myNamedRange = myWorksheet.Range("B8")
Case Is = 2
Set myNamedRange = myWorksheet.Range("B14,B8")
Case Is = 3
Set myNamedRange = myWorksheet.Range("B20,B14,B8")
Case Is = 4
Set myNamedRange = myWorksheet.Range("B30,B20,B14,B8")
Case Is = 5
Set myNamedRange = myWorksheet.Range("B36,B30,B20,B14,B8")
Case Is = 6
Set myNamedRange = myWorksheet.Range("B42,B36,B30,B20,B14,B8")
Case Is = 7
Set myNamedRange = myWorksheet.Range("B52,B42,B36,B30,B20,B14,B8")
Case Is = 8
Set myNamedRange = myWorksheet.Range("B58,B52,B42,B36,B30,B20,B14,B8")
Case Is = 9
Set myNamedRange = myWorksheet.Range("B64,B58,B52,B42,B36,B30,B20,B14,B8")
Case Is = 10
Set myNamedRange = myWorksheet.Range("B74,B64,B58,B52,B42,B36,B30,B20,B14,B8")
Case Is = 11
Set myNamedRange = myWorksheet.Range("B80,B74,B64,B58,B52,B42,B36,B30,B20,B14,B8")
Case Is = 12
Set myNamedRange = myWorksheet.Range("B86,B80,B74,B64,B58,B52,B42,B36,B30,B20,B14,B8")
End Select
myRangeName = MonthName(i) & "Denominator2019" 'specify defined name
ThisWorkbook.Names.Add Name:=myRangeName, RefersTo:=myNamedRange 'create named range with workbook scope. Defined name and cell range are as specified
Next i 'run back through loop and complete other months
End Sub