Home » excel » Creating a new row in Excel VBA macro (what am I doing wrong?)

Creating a new row in Excel VBA macro (what am I doing wrong?)

Posted by: admin April 23, 2020 Leave a comment

Questions:

I am working on an Excel macro that merges two spreadsheets – a list of companies, and a list of emails associated with those companies. Whenever a company has more than one email associated, I need to create a separate row for that email.

Everything goes correctly until I attempt to create the new row with the code Rows(row).Resize(1).Insert towards the end of the macro. As soon as it gets to this line, Excel duplicates each row’s first column ad infinitum (until column XEI).

How do I modify my code so that I create one new row (under the row my loop is currently on) instead of a million columns? My code is as follows:

Sub Commandbutton1()


ThisWorkbook.Sheets("company").Activate


Sheet2.Range("A1:A10000").Select

Selection.Copy


ThisWorkbook.Sheets("Sheet1").Activate


Sheet1.Range("A1:A10000").Value = Sheet2.Range("A1:A10000").Value

Sheet1.Range("B1").Value = "First Name"

Sheet1.Range("C1").Value = "Last Name"

Sheet1.Range("D1").Value = "Email"




Dim i As Integer


i = 1


Do While i <= 100

Dim companyName As String
companyName = Cells(i, 1).Value
firstname = Cells(i, 2).Value
lastname = Cells(i, 3).Value

'Query contacts list
'Find all rows containing companyName
'Find the email in those rows
'Add the email to row i

Dim slot As Integer

slot_email = 4


Dim result As String
Dim sheet As Worksheet
Set sheet = ActiveWorkbook.Sheets("contact")


Dim isFirstInstance As Integer

isFirstInstance = 0

Dim j As Integer

For j = 1 To sheet.Range("A:A").Cells.SpecialCells(xlCellTypeConstants).Count



    Dim k As Integer
    For k = 1 To 39
        Dim cellVal As String
        cellVal = ActiveWorkbook.Worksheets("contact").Cells(j, k).Value
            If cellVal = "" Then
            Exit For
        ElseIf cellVal = companyName Then
            Debug.Print ("For company " & companyName & ", found value on row " & j & " col " & k)
            Cells(i, 4).Value = ActiveWorkbook.Worksheets("contact").Cells(j, 4).Value
            Cells(i, 2).Value = ActiveWorkbook.Worksheets("contact").Cells(j, 2).Value
            Cells(i, 3).Value = ActiveWorkbook.Worksheets("contact").Cells(j, 3).Value

            isFirstInstance = isFirstInstance + 1
                Debug.Print (isFirstInstance & " on column " & k)

            If isFirstInstance > 1 Then
                Debug.Print ("Found a duplicate contact!")

                Dim row As String
                row = i

                Rows(row).Resize(1).Insert

                i = i + 1
            End If

        End If
    Next k
Next j

i = i + 1


Loop



End Sub
How to&Answers:

I believe Rows(row).Resize(1).Insert is going to shift your single column down instead of the whole row (for you to then insert the new row of data). I think you want to use: Rows(5).EntireRow.Insert for example and also use Application.CutCopyMode = False so that it doesn’t try to insert your previously copied data

Answer:

Sub InsertRowAtSecondLine()
    Dim rowOfInterest As Long
    rowOfInterest = 2
    Cells(rowOfInterest, 1).EntireRow.Insert
End Sub

will transform

a
b
c
d

to

a
<blank row>
b
c
d