I have a set of inventory records (84,000 user workstations) that have some duplicate records (~2%). The database is suppose to have a single record per workstation (unique ID). Each record has a date associated with it, and the duplicate records each have a different date. I need to keep the most recent record (based on date) and discard the duplicate records with the old dates.
Last edited by dajlwj; 01-12-2012 at 08:29 AM. Reason: Attached a sample file
Please attach a sample workbook so we can help you faster.
Cheers,
Arlette
If I helped, Don't forget to add to my reputation (click on the star below the post)
Don't forget to mark threads as "Solved" (Thread Tools->Mark thread as Solved)
Use code tags when posting your VBA code: [code] Your code here [/code]
Thanks Arlette, I've attached an example file to my original post. For clarity the duplicated items are hilighted in red. I need only the most recent (based on date) which means only one of the either 2 or 3 entries having the same device name.
-Dave
Use this code -Option Explicit Dim lrow As Long Dim i As Long Sub sort_latest() ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A:A") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C:C") _ , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A:D") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With With Worksheets("Sheet1") lrow = .Range("A" & Rows.Count).End(xlUp).Row For i = lrow To 2 Step -1 If .Range("A" & i).Value = .Range("A" & i - 1).Value Then If .Range("C" & i).Value < .Range("C" & i - 1).Value Then .Rows(i & ":" & i).Delete lrow = lrow - 1 End If End If Next i End With End Sub
Cheers,
Arlette
If I helped, Don't forget to add to my reputation (click on the star below the post)
Don't forget to mark threads as "Solved" (Thread Tools->Mark thread as Solved)
Use code tags when posting your VBA code: [code] Your code here [/code]
Arlette,
I'm afraid I don't know how to implement this solution. I was hoping for a solution that used cascaded or nested excel functions that I could enter into a cell, then perhaps select only those records flagged having the most recent date.
Thanks,
-Dave
I am not very fluent in complicated formulae, but can provide a solution with VBA.
All you have to do is press Alt+F11, you will get a code window. On the left hand side, you will see Microsoft excel objects. Right click and select insert -> Module. Copy the above code into that module. Go back to your excel sheet, select View -> Macros and select the macro to be run.
Cheers,
Arlette
If I helped, Don't forget to add to my reputation (click on the star below the post)
Don't forget to mark threads as "Solved" (Thread Tools->Mark thread as Solved)
Use code tags when posting your VBA code: [code] Your code here [/code]
I've have a solution that works for me. I'd be interested in a critique if you have the time. If you open the test file in my previous post, the columns are in the following order - Device, OS, Date, Type. In my solution I moved the Date over one column to put it next to the Device. This made the array for the VLOOKUP compact. The one other thing that was needed was to sort the list by Date from newest to oldest. This guarenteed that the first Date that existed for a given Device was the most recent. I next inserted a column (NewestDate) with the formula =IF((VLOOKUP(A2,A:B,2,FALSE)=B2), B2, "old") to identify old dates. The Dups column is left in for testing.
My interest was to discover an Excel function solution to do this. I appreciate the code solution previously posted, and I also know this is possible to accomplish manually using spread sheet menu options.
-Dave
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks