I have data in 22 columns extending to various rows.
Is there a way to extract the Unique Records (to a new location) from all 22 columns at once like you can with the Advanced Filter?
(VBA is ok if there's no other way)
I have data in 22 columns extending to various rows.
Is there a way to extract the Unique Records (to a new location) from all 22 columns at once like you can with the Advanced Filter?
(VBA is ok if there's no other way)
Here's a VBA way. Select area then run
VBA Noob![]()
Sub ExtractDuplicateRecords() Dim c As Range Dim i As Long i = Selection.Columns.Count + 1 Application.ScreenUpdating = False For Each c In Selection If Application.CountIf(Columns(i), c) = 0 Then Cells(65536, i).End(xlUp).Offset(1, 0) = c End If Next c With Cells(1, i) .Value = "Unique List" .EntireColumn.AutoFit End With Application.ScreenUpdating = True End Sub
_________________________________________
![]()
![]()
Credo Elvem ipsum etian vivere
_________________________________________
A message for cross posters
Please remember to wrap code.
Forum Rules
Please add to your signature if you found this link helpful. Excel links !!!
Here's an example demonstrating an approach you may be interested in:
Assumptions:
Sheet1 contains your data in cells A1:B10
Sheet2 is where you want the extracted data to be displayed
Using Sheet2:
A1: EmpID
B1: Age
Insert>Name>Define
Names in workbook: Sheet2!Extract
Refers to: =Sheet2!$A$1:$B$1
I1: EmpID
I2: 24
Insert>Name>Define
Names in workbook: Sheet2!Criteria
Refers to: =Sheet2!$I$1:$I$2
Still using Sheet2:
Insert>Name>Define
Names in workbook: Sheet2!Database
Refers to: =Sheet1!$A$1:$B$10
(Notice: you are on Sheet2, and creating a Sheet2-level range name, but
the referenced range is on Sheet1)
The reason: An advanced filter cannot SEND data to another sheet, but
it can PULL data from another sheet.
Now...set up the Advanced Data Filter:
<Data><Filter><Advanced Filter>
Select: Copy to another location
List Range: (press F3 and select Database)
Criteria Range: (press F3 and select Criteria)
Copy To: (press F3 and select Extract)
Click [OK]
Note: if you want to run that Advanced Data Filter repeatedly,
you'll need to re-select Database each time
....OR...if you're feeling a bit ambitious...
You can build a simple macro to automatically re-run the filter:
Press [Alt]+[F11] to open the VBA editor
Right click on the VBA Project folder for your workbook
Select: Insert>Module
Then, copy/paste this code into that module:
To run the code:PHP Code:
Option Explicit
Sub PullMatchingData()
Range("Sheet2!Database").AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Range("Sheet2!Criteria"), _
CopyToRange:=Range("Sheet2!Extract"), _
Unique:=False
End Sub
Tools>Macro>Macros (or [Alt]+[F8])
Select and run: PullMatchingData
To test, change the value of I2 and run it again.
Is that something you can work with?
Thanks both,
I used VBANoobs code
Ron,
Thanks for the explanation, I knew there was a way with a Named Range, but just naming the range containing the 22 columns didn't work for me! I'll try yours out later.
I'm assuming your columns are from C1 to X20
Input formula in cell A2:
![]()
=INDEX(C1:X20,1,1)
Input formula in cell A3 and copy down.
![]()
=INDEX($1:$65536,INT(MIN(IF(COUNTIF($A$2:A2,$C$1:$X$20)=0,1000*ROW($C$1:$X$20)+COLUMN($C$1:$X$20)))/1000),MOD(MIN(IF(COUNTIF(A$2:A2,$C$1:$X$20)=0,1000*ROW($C$1:$X$20)+COLUMN($C$1:$X$20))),1000))
The formula is an-array need to hold down:
Ctrl,Shift,Enter
See the attachment below.
Hope it helps!
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks