Search code examples
functionexceloffsetvba

Macro Loop with Dynamic Range


I'm trying to automate the following process using a Excel but I'm experiencing some difficulties as obviously I need to set up a variable within the OFFSET function:

Sheets("XXX").Visible = True
Sheets("XXX").Select
ActiveWorkbook.Names.Add Name:="XXX_aaa", RefersToR1C1:= _
    "=OFFSET('XXX'!R2C1,0,1,COUNTA('XXX'!C1),21)"
Sheets("XXX").Visible = False

Sheets("YYY").Visible = True
Sheets("YYY").Select
ActiveWorkbook.Names.Add Name:="YYY_bbb", RefersToR1C1:= _
    "=OFFSET('YYY'!R2C1,0,1,COUNTA('YYY'!C1),21)"
Sheets("YYY").Visible = False

Sheets("ZZZ").Visible = True
Sheets("ZZZ").Select
ActiveWorkbook.Names.Add Name:="ZZZ_ccc", RefersToR1C1:= _
    "=OFFSET('ZZZ'!R2C1,0,1,COUNTA('ZZZ'!C1),21)"
Sheets("ZZZ").Visible = False`

Is there an easy macro function I can use to automate this task (it has to be repeated 30 times !)

Thanks !


Solution

  • Try this on a COPY of the workbook you are working with:

    Sub Sample()
    Dim intCurrentSheet As Integer
    Dim lngLastRow As Long
    
    For intCurrentSheet = 2 To 31
    
        lngLastRow = Sheets(intCurrentSheet).Range("U1048576").End(xlUp).Row
    
        Sheets(intCurrentSheet).Range("A2:U" & lngLastRow).Name = Sheets(intCurrentSheet).Name & _
                                                               "_" & Chr(intCurrentSheet + 63) & _
                                                               Chr(intCurrentSheet + 63) & _
                                                               Chr(intCurrentSheet + 63)
        Sheets(intCurrentSheet).Visible = False
    
    Next intCurrentSheet
    
    End Sub