Как создать динамический именованный диапазон – репликация A1:INDEX(range, COUNT()) в VBA?

У меня есть лист, который извлекает данные из 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. Может быть, это решение?

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мои предложения по формуле в двух вариантах. Первый – когда все ячейки заполнены, второй – когда некоторые ячейки могут быть пустыми.

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<>"")) — хитрый трюк!

rotabor 24.08.2024 23:05

Другие вопросы по теме