?
Solved

Macro to insert "X" number of rows between items in a list

Posted on 2014-02-14
3
Medium Priority
?
365 Views
Last Modified: 2014-02-14
I have a list of 100+ items and I would like insert 52 rows between each item in my list. I know this is probably pretty straightforward, but I don't have the time to figure it out and I know someone on here can help pretty quickly.

I've attached an example of my list.
InsertRowsExample.xlsx
0
Comment
Question by:thomas-sherrouse
3 Comments
 
LVL 19

Accepted Solution

by:
Ken Butters earned 2000 total points
ID: 39860180
Here is code... need to run InsertLines Macro.

I have variable set to 52... you can change that if you want different number of lines inserted.

Public Sub InsertLines()

Dim myLastCell As Range
Dim i As Long
Dim ws As Worksheet

Dim numRowsToInsert As Long

numRowsToInsert = 52


Set ws = Worksheets("Sheet1")
Set myLastCell = LastCell(ws)

For i = myLastCell.Row To 2 Step -1
    ws.Rows(i & ":" & i + numRowsToInsert).Insert shift:=xlDown
Next

End Sub


Function LastCell(ws As Worksheet) As Range

'
' Note "&" denotes a long value; "%" denotes an integer value
  
    Dim LastRow&, lastCol%

' Error-handling is here in case there is not any
' data in the worksheet

    On Error Resume Next

    With ws

  ' Find the last real row

    LastRow& = .Cells.Find(What:="*", _
      SearchDirection:=xlPrevious, _
      SearchOrder:=xlByRows).Row

  ' Find the last real column

    lastCol% = .Cells.Find(What:="*", _
      SearchDirection:=xlPrevious, _
      SearchOrder:=xlByColumns).Column

    End With

' Finally, initialize a Range object variable for
' the last populated row.
    
    Set LastCell = ws.Cells(LastRow&, lastCol%)


End Function

Open in new window

InsertRowsExample.xlsm
0
 
LVL 35

Expert Comment

by:Norie
ID: 39860204
This will insert 52 rows between each row.
Dim rng As Range

    Set rng = Range("A2")

    Do

        rng.Offset(1).Resize(52).Insert xlShiftDown

        Set rng = rng.Offset(53)

    Loop Until rng.Value = ""

Open in new window


This will insert 52 rows whenever there's a change in value.
Dim rng As Range

    Set rng = Range("A2")

    Do

        If rng.Value <> rng.Offset(1).Value Then
            rng.Offset(1).Resize(52).Insert xlShiftDown
               Set rng = rng.Offset(52)
        End If
     
        Set rng = rng.Offset(1)

    Loop Until rng.Value = ""

Open in new window

0
 

Author Closing Comment

by:thomas-sherrouse
ID: 39860209
Thanks - Got what I needed!
0

Featured Post

Vote for the Most Valuable Expert

It’s time to recognize experts that go above and beyond with helpful solutions and engagement on site. Choose from the top experts in the Hall of Fame or on the right rail of your favorite topic page. Look for the blue “Nominate” button on their profile to vote.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

How to get Spreadsheet Compare 2016 working with the 64 bit version of Office 2016
After seeing numerous questions for Dynamic Data Validation I notice that most have used Visual Basic to solve the problem. This suggestion is purely formula based and can be used in multiple rows.
Graphs within dashboards are meant to be dynamic, representing data from a period of time that will change each time the dashboard is updated with new data. Rather than update each graph to point to a different set within a static set of data, t…
This Micro Tutorial demonstrates in Microsoft Excel how to consolidate your marketing data by creating an interactive charts using form controls. This creates cool drop-downs for viewers of your chart to choose from.

850 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question