У меня есть лист, который извлекает данные из API по строкам. Таким образом, одна формула будет охватывать, скажем, 6000 столбцов в строке 1, так же, как и строка 2. Длина каждого из них может различаться. Поэтому мне нужно создать динамические именованные диапазоны.
Я понял, как выполнить цикл с использованием цикла For...Next вниз по строке (с помощью SO), но это просто создает общий диапазон ячеек вместо необязательности формулы.
Мне это нужно сейчас, потому что я имею дело с более чем 300 диапазонами.
Sub SeriesScripts()
Dim lastcol As Long, i As Long, ws As Worksheet, rng As Range
Set ws = ThisWorkbook.Sheets("Master Sheet")
For i = 1 To 3
lastcol = ws.Cells(i, ws.Columns.Count).End(xlToLeft).Column
Set rng = ws.Cells(i, 1).Resize(1, lastcol)
ThisWorkbook.Names.Add Name: = "Series_" & i, RefersTo:=rng
Next i
End Sub
Это подходит для добавления диапазонов, о которых я не знал, но объект SERIES() по-прежнему фиксируется как заданный диапазон.
Я не знаком с синтаксисом R1C1. Может быть, это решение?
Мои предложения по формуле в двух вариантах. Первый – когда все ячейки заполнены, второй – когда некоторые ячейки могут быть пустыми.
Sub SeriesScriptsA()
Dim i As Long, ws As Worksheet
Set ws = ThisWorkbook.Sheets("Master Sheet")
For i = 1 To 3
ThisWorkbook.Names.Add Name: = "Series_" & i, RefersToR1C1:= _
" = " & ws.Name & "!R" & i & "C1:INDEX(" & ws.Name & "!R" _
& i & ",COUNTA(" & ws.Name & "!R" & i & "))"
ThisWorkbook.Names.Add Name: = "SeriesA_" & i, RefersToR1C1:= _
" = " & ws.Name & "!R" & i & "C1:INDEX(" & ws.Name & "!R" _
& i & ",MATCH(2,1/(" & ws.Name & "!R" & i & "<>"""")))"
Next i
End Sub
MATCH(2,1/(wsName !Ri<>"")) — хитрый трюк!