I have a consolidator tool that consolidates data from different worksheets. It can handle up to 1 million rows. However, when I click the button to check duplicates, there's an error that says "There isn't enough memory to do this action." I noticed that this error only happens when this macro runs. Please excuse the bad practice code as I am new to programming and this is what currently works right now. Is there anyway I can clean this code properly while still maintaining the functionality?
This is how it works:
| Employee ID | Status |  
E100             Deactivated 
E100            Activated 
Turns into:
| Employee ID | Status | Status | 
  E100        Deactivated  Activated
Code:
Sub mergeCategoryValues()
Dim lngRow As Long
Dim rngPrimaryKey As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
'This is using activesheet, so make sure your worksheet is
' selected before running this code.
Sheets("Consolidated").Activate
With ActiveSheet
     Set rngPrimaryKey = .Range("A:Z").Find("Full Name")
    Dim columnToMatch As Integer
    columnToMatch = rngPrimaryKey.Column
    'Figure out the last row
    lngRow = .Cells(1000000, columnToMatch).End(xlUp).Row
    .Cells(columnToMatch).CurrentRegion.Sort key1:=.Cells(columnToMatch), Header:=xlYes
    For Each Cell In ActiveSheet.UsedRange
    If Cell.Value <> "" Then
    Cell.Value = Trim(Cell.Value)
    End If
    Next Cell
    'Loop through each row starting with last and working our way up.
    Do
        'Does this row match with the next row up accoding to the Job Number in Column A?
        If .Cells(lngRow, columnToMatch) = .Cells(lngRow - 1, columnToMatch) Then
            'Loop through columns B though P
            For i = 1 To 1000 '1000 max (?)
                'Determine if the next row up already has a value. If it does leave it be
                '   if it doesn't then use the value from this row to populate the next
                '   next one up.
                If .Cells(lngRow - 1, i).Value <> "" Then 'if not blank
                    If .Cells(lngRow - 1, i).Value <> .Cells(lngRow, i).Value Then 'if previous value is not equal to current value
                    ''''''
                    'INSERT NEW COLUMN HERE
                         If i <> 1 Then 'if column is not "Data Source"
                                If .Cells(lngRow, i).Value <> "" Then
                                 Cells(lngRow - 1, i + 1).EntireColumn.Insert
                                .Cells(lngRow - 1, i + 1).Value = .Cells(lngRow, i).Value
                                'INSERT COLUMN NAME
                                .Cells(1, i + 1).Value = .Cells(1, i).Value
                            End If
                        Else
                        .Cells(lngRow - 1, i).Value = .Cells(lngRow - 1, i).Value & "; " & .Cells(lngRow, i).Value
                    End If
                    Else
                   'Do Nothing
                   End If
              End If
            Next i
            'Now that we've processed all of the columns, delete this row
            '   as the next row up will have all the values
            .Rows(lngRow).Delete
        End If
        'Go to the next row up and do it all again.
        lngRow = lngRow - 1
    Loop Until lngRow = 1
End With
With ActiveWindow
    .SplitColumn = 1
    .SplitRow = 0
End With
ActiveWindow.FreezePanes = True
Worksheets("Consolidated").Range("A:Z").Columns.AutoFit
Application.ScreenUpdating = True
Application.EnableEvents = True
If Err <> 0 Then
    MsgBox "An unexpected error no. " & Err & ": " _
    & Err.Description & " occured!", vbExclamation
End If
End Sub
 
    
