Finding and highlighting duplicates across multiple worksheets

V

Vijay

I basically need to be able to find and highlight duplicates across multiple
worksheets in a workbook. The highlighted duplicates must be written out to
a different blank worksheet.

I would also like to know from which worksheet the duplicate is found in.
All the data I want to compare are in columns C and D. There is another
condition that needs to be satisfied. Only compare the rows in columns C and
D when the value of of the cells in column E is "Y". There are quite a few
worksheets.

Can anyone help.

Thanks
 
V

Vijay

At the moment the code looks like this:

all the duplicates are written out to DUPLICATION_SHEET and am only checking
sheets whose name starts with 'Plan'.

Please correct the below code....

URGENT!!!! pretty please guys


Private Sub CheckDuplicates(ByVal strWB As Workbook, ByVal sDesc As String,
ByVal sStartCol As String, ByVal sEndCol As String)

Application.ScreenUpdating = False

Dim response As String
Dim strMsg As String
Dim intLastDataRowToCheck As Integer
Dim nRow As Integer
Dim nColumn As Integer
Dim nSourceRow As Integer
Dim bDuplicate As Boolean
Dim sFields() As String
Dim strLabel As String
Dim strOutputRec As String
Dim strParent As String
Dim strDesc As String
Dim iParent
Dim ws As Worksheet

intLastDataRowToCheck =
CInt(Worksheets(SHEET_CONTROL).Range(sRangeMaxRows).Value)

nRow = 2

strMsg = "Click OK to run Duplicate Checks for " & sDesc
response = MsgBox(strMsg, vbOKCancel, "Run Duplicate Checks for " & sDesc)

If response = vbOK Then

Dim nCount As Integer

Dim dFlat As Object
Dim dHier As Object

Set dFlat = CreateObject("Scripting.Dictionary")
Set dHier = CreateObject("Scripting.Dictionary")

dFlat.CompareMode = vbTextCompare
dHier.CompareMode = vbTextCompare

Sheets(DUPLICATION_SHEET).Cells.Delete shift:=xlUp

'Check only Plan worksheets
For Each ws In Worksheets

Select Case ws.Name

Case "Plan Duplicates"
Case "Control"
Case "HierarchyView"
Case "Validations"
Case "Account"
Case "Entity"
Case "Custom1"
Case "Custom2"
Case "Custom3"
Case "Custom4"
Case "AppSettings"

Case Else

For nCount = intStartDataRow To intLastDataRowToCheck

'Check only rows with Extract = "Y"
If Trim(ws.Range("E" & nCount)) = "Y" Then

strParent = Trim(CStr(ws.Cells(nCount, 2).Value))
strLabel = Trim(CStr(ws.Cells(nCount, 3).Value))
strDesc = Trim(CStr(ws.Cells(nCount, 4).Value))

strOutputRec = ws.Name & DELIM_ATTR & CStr(nCount) &
DELIM_ATTR & sStartCol & DELIM_ATTR & sEndCol

If strLabel <> "" Then

If Not dFlat.Exists(strLabel) Then

dFlat.Add strLabel, strOutputRec

Else

sFields = Split(dFlat(strLabel), DELIM_ATTR)
nSourceRow = CInt(sFields(COL_SOURCE_ROW))

'Check for Duplicates across worksheets

bDuplicate = False

For nColumn = ws.Range(sStartCol &
nCount).Column To ws.Range(sEndCol & nCount).Column
If ws.Cells(nSourceRow, nColumn) <>
ws.Cells(nCount, nColumn) Then
bDuplicate = True
End If
Next

If bDuplicate Then
Sheets(DUPLICATION_SHEET).Range("A" &
nRow) = "Rows " & nSourceRow & ", " & nCount & " are shared nodes with
conflicting attributes in " & ws.Name & ""
Call formatValRow(DUPLICATION_SHEET, nRow)
nRow = nRow + 1
ws.Rows(nSourceRow & ":" &
nSourceRow).Copy
Sheets(DUPLICATION_SHEET).Rows(nRow &
":" & nRow).Insert shift:=xlDown
nRow = nRow + 1
ws.Rows(nCount & ":" & nCount).Copy
Sheets(DUPLICATION_SHEET).Rows(nRow &
":" & nRow).Insert shift:=xlDown
nRow = nRow + 1
End If

End If

End If

End If

Next nCount

End Select

Next ws

'Cleanup
Set dHier = Nothing
Set dFlat = Nothing

Sheets(DUPLICATION_SHEET).Select
MsgBox "Checking Duplicates Completed"

Else

MsgBox "Duplicate Checks Process Cancelled"

End If

End Sub
 
L

Luke Alcatel

Vijay,
Let me get this straight. First you post an appeal for someone to write
some rather simple code for you. No response, so then you post code that
you have already written and you say nothing about what doesn't work but you
ask people to correct it. Do you really expect a response? If there is
anyone who would respond to such posts, please your contact information
because I have a lot of code waiting for you to write and correct.

Luke
 
V

Vijay

Hello Mr.Luke

First of all, let me thank you for posting 'your thoughts'. BTW mate, i'm
not here to post politically correct statements. The only reason i posted my
code was to give all the helpful people out there some sorta lead so that
they don't have to write any sample code (if possible). If my entire
procedure was wrong, they will certainly let me know! If you took time to
look at the size of the code, you wouldn't whinge like this. I didn't post an
entire module! It is just a simple procedure and who ever has worked in Excel
wouldn't find it difficult to correct my code.

If you are more intent on nitpicking than to help, then this is certainly
not the place for you. This is a place to share knowledge, not to fight. If
you are still keen on taking me on, i can think abt it during the weekend cos
now i don't have time for you and i have far more important things to worry
about!

Looks like you have lotsa time in your hands to post messages like these and
you can carry on if you wish but i don't give a damn! I had to write this
despite saying the above, cos people like you need to know how to behave...

Finally, Do me a favour will ya... Just don't generalise and pass on
statements! There are people out there who are more than willing to help. I
can certainly tell you are not one of 'em.

Dismiss!
 
H

Henry Markov

Vijay,
I think Luke is trying to say that your first post (please write this code
for me ...) and your second post (here's my code please fix it ...) are not
likely (as you have seen) to elicit helpful responses. If you post code you
should at a minimum state what works and what doesn't. Usually it's best to
try to work the problem yourself at least to the point that you can say
something like "when I use X to do Y, unexpected result Z happens."

Henry
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top