Search code examples
excelvbadynamic-arraysnamed-rangesspill-range

VBA to insert or delete rows in named range based on spill range


Cross posted at: https://www.mrexcel.com/board/threads/vba-to-insert-or-delete-rows-in-named-range-based-on-spill-range.1214814/#post-5937281

I have a named range "nameList" (B3:E20) that are populated by a spill range from dynamic array formula in cell B3, and there's a table just below cell B24. If the spill range row count are less or more than the number of rows of nameList then I want the unused cell to be deleted or insert new rows if not enough, Basically I would like the nameList to be resized dynamically based on spill range.

Spill range data are sometimes 2 rows only (too much unused rows) or up to 50 rows (spill error due to the table below) that's why I want the nameList to be resized

I've been looking for similar topic for numerous hours now but still no luck.

Here's a code I made so far from the answer below.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lsRow As Long
Dim lsEndRow As Long

lsRow = Range("B3").End(xlUp).Row
lsEndRow = lsRow

    Do While lsEndRow = Range("B" & Rows.Count).End(xlUp).Row
        If lsEndRow + 1 > "" Then
        Range(lsEndRow).EntireRow.Insert
        lsEndRow = Range("B" & Rows.Count).End(xlUp).Row
        End If
    Loop
    
Application.CutCopyMode = False
Application.EnableEvents = True
ActiveSheet.Range("B3").Select
End Sub

Solution

  • SOLVED but in different approach.

    My workaround is to insert plenty rows and trigger the dynamic array formula.

    Range("B3").Rows.End(xlDown).Offset(1).Select
    Selection.EntireRow.Resize(50).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    

    Then delete the empty rows in nameList.

    Range("nameList").Select
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.Resize(Selection.Rows.Count - 1).Select
    Selection.EntireRow.Delete