Solved

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

Posted on 2014-02-14
3
357 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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 34

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

Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

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
This article describes how you can use Custom Document Properties to store settings and other information in your workbook so that they will be available the next time you open the workbook.
The viewer will learn how to create two correlated normally distributed random variables in Excel, use a normal distribution to simulate the return on different levels of investment in each of the two funds over a period of ten years, and, create a …
This Micro Tutorial will demonstrate how to use longer labels with horizontal bar charts instead of the vertical column chart.

726 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