Hi,

This is another code with the same style as above and similar to it,
this time it highlights instead of delete duplicate values...

I am wondering why these two codes take seconds to execute on about
2000 rows when the Excel delete duplicates takes milliseconds... The
code for highlighting is not equivalent to the Excel function. I
understand highlighting duplicates values goes from top to bottom, it
highlights EVERY duplicates values in a column, it's not taking in
consideration duplicate rows... when the remove duplicate function
delete duplicate rows...

To sum up, I'm wondering why these code take quite some time? What is
the "Remove duplicate" function made with? I understand if I use it in
the code in the first post (I would need more knowledge of Excel
objects, methods, properties I don't have yet) it would avoid the use
of looping through the entire data but doing this with an array in
memory shouldn't take so long???


Option Explicit

Dim TableA() As Variant
Dim TableB() As Long

Sub HighliteDuplicateValues()

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim wb As Workbook
Set wb = ThisWorkbook
Dim ws As Worksheet
Set ws = wb.Worksheets(1)

Dim wsLastRow As Long, wsLastCol As Long 'worksheet base 1 array
Dim bigStr As String

ReDim TableA(0, 0)
Dim TaLastR As Long, TaLastC As Long

ReDim TableB(0)
Dim TbLastR As Long, TbLastC As Long
TbLastR = 0

Dim i As Long, j As Long
Dim it As Long, jt As Long
Dim tmp As Long
Dim x As Variant

Dim markValue As String
markValue = "---%%%"

'Copy all values into TableA
'Add one more column in TableA to concatenate rows values

wsLastRow = ws.Range("A1").CurrentRegion.Rows.Count
wsLastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column

TaLastR = wsLastRow - 2
TaLastC = wsLastCol

ReDim TableA(TaLastR, TaLastC)

For i = 0 To TaLastR
    For j = 0 To TaLastC
        TableA(i, j) = ws.Cells(i + 2, j + 1).Value
    Next j
    For jt = 1 To TaLastC
        bigStr = CStr(bigStr) & CStr(ws.Cells(i + 2, jt))
    Next jt
    TableA(i, j - 1) = CStr(bigStr)
    bigStr = ""
Next i


'Count duplicate values from concatenation
'Set the  tableB dimensions from counting duplicates
'Copy row numbers of duplicate values into new table

ReDim Preserve TableA(TaLastR, TaLastC + 1)
ReDim TableB(TbLastR + 2)

For i = 0 To TaLastR - 1
    If CStr(TableA(i, TaLastC + 1)) = "" Then
        For j = 0 To TaLastR
            If i <> j Then
                If CStr(TableA(i, TaLastC)) = CStr(TableA(j, TaLastC))
Then
                    TableA(i, TaLastC + 1) = markValue
                    TableA(j, TaLastC + 1) = markValue
                    TableB(TbLastR) = i + 2
                    TableB(TbLastR + 1) = j + 2
                    TbLastR = TbLastR + 2
                    ReDim Preserve TableB(TbLastR + 1)
                End If
            End If
        Next j
    End If
Next i

ReDim Preserve TableB(TbLastR - 1)

'''Test 1 : Mark duplicates on worksheets for comparaison and counting

For i = 0 To TaLastR
    If CStr(TableA(i, TaLastC + 1)) = markValue Then
        ws.Cells(i + 2, 3) = TableA(i, TaLastC + 1)
    End If
Next i


ws.Range("A1").Select

'Highlight values in worksheet based on row numbers in new table

'Function to sort
x = SortArray(TableB)

'Apply color on duplicate
For i = 0 To TbLastR - 1
    tmp = TableB(i)
    ws.Cells(tmp, 1).Interior.Color = 65535

Next i

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub


Function SortArray(ByRef Table() As Long) As Variant
    Dim tmp As Long
    Dim i As Long, j As Long

    For i = 0 To UBound(Table) - 1
        For j = i + 1 To UBound(Table) - 1
            If Table(i) > Table(j) Then
                tmp = Table(i)
                Table(i) = Table(j)
                Table(j) = tmp
            End If
        Next j
    Next i

    SortArray = Table()

End Function

-- 
----------------------------------------------------------------------------------
Some important links for excel users:
1. Follow us on TWITTER for tips tricks and links : 
http://twitter.com/exceldailytip
2. Join our LinkedIN group @ http://www.linkedin.com/groups?gid=1871310
3. Excel tutorials at http://www.excel-macros.blogspot.com
4. Learn VBA Macros at http://www.quickvba.blogspot.com
5. Excel Tips and Tricks at http://exceldailytip.blogspot.com
 
To post to this group, send email to excel-macros@googlegroups.com

<><><><><><><><><><><><><><><><><><><><><><>
Like our page on facebook , Just follow below link
http://www.facebook.com/discussexcel

Reply via email to