Solved

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

Posted on 2014-02-14
3
346 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 500 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 33

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

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

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

Suggested Solutions

Enums (shorthand for ‘enumerations’) are not often used by programmers but they can be quite valuable when they are.  What are they? An Enum is just a type of variable like a string or an Integer, but in this case one that you create that contains…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
The viewer will learn how to use a discrete random variable to simulate the return on an investment over a period of years, create a Monte Carlo simulation using the discrete random variable, and create a graph to represent the possible returns over…
This Micro Tutorial will demonstrate how to create pivot charts out of a data set. I also added a drop-down menu which allows to choose from different categories in the data set and the chart will automatically update.

776 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