Excel vba - Loop in 2 columns and sort - excel

I need a macro for this case
I try to sort this list as given in the example.

Related

Excel - Show all results with multiple results vlookup

In my Excel file there are different columns. One of them shows all the names. In my tool it's possible to look up the data by name. The problem is that some names appear more than once in the column. How can I show all the results in stead of only the first name founded?
VLOOKUP only returns one value. If you need multiple values, then you would need to write a excel macro
Naz

Merge data from excel files

I have about 70,000 excel files each of size about 300kb. The first column is date and time and rest columns are all doubles.
How do I merge them into 1 single csv file or bring them all together into one sheet of an excel work book. I was thinking about using Matlab but it runs out of memory.
You could try RDBMerge. It's a free add-in for Excel built for this sort of work.
Alternatively, you may find the following info useful:
http://ask.metafilter.com/106144/Combining-a-ton-of-Excel-files-into-one-Excel-file
If it's a one off this is what I would do:
Copy all details from both sheets to a single sheet in a new workbook
Sort descending by your date and time column
Duplicate the data and time column on the end (For vlookup, if you are comfortable using index you can avoid this)
Duplicate the sheet
Delete the data in the date and time column
Data / Remove duplicates to get a distinct set
Use a vlookup on some referential column to get the date and time (Make the last argument in the vlookup 0)
This will pull in the first instance it finds for the data (ie the highest date / time).
Should take about 2 mins all up.

how to optimize speed excel 2007 (±20,000 rows)

I'm in the process of working with an Excel file that contains two columns (old URL and new URL). But it contains about 20,000 rows.
And I have another file containing about 400 old/new URL that needs to be imported in the big ±20,000 rows file.
I have to do all kinds of processing, like:
- Find all duplicate rows (same two columns more than once...). That functionnality would be in a column and it would be good to run that function each time I add 1 row to check if that URL combination already exists in the file
Note that I already turned the sheet into a table.
2 questions now:
1) should I do some kind of vlookup from the ±20,000 rows sheet and the ±400 rows sheet, or VBA? I don't know what would be the best way to do this (i.e.: if that row from the ±400 rows sheet is not in the ±20,000 rows sheet, add it...). Should I use vlookups or populate arrays in VBA (speed-wise)? If I use vlookup, it is true that it is possible to put the vlookup function in a sheet and refer to it in every row instead of puting a vlookup function directly in every row?
2) How can I optimize the 20,000 rows sheet because now, each time I want to sort or filter, it takes an eternity to redraw and it freeze my PC for that time!
Thanks for you help.
Firstly to ommit the dupes from the 400ish row sheet that need to be added in, use a COUNTIFS formula against the big sheet, then sort by this value and only copy in things where there is < 1 for the value (or error).
Secondly I would probably do the same thing in the big sheet but referencing itself, anything with a value above 1 is a dupe.
Lastly, are there formulas in the 20,000 row sheet? I could set up a 20,000 row sheet with just a "1" in range A1:A20,000 and doing anything on it would be super quick. It all comes down to what data you have in there and what you can do to reduce it's load on the system (ie convert formulas to values if they no longer need to calculated)
Excel 2007 has a built-in feature and VBA you can use for your situation: Range.RemoveDuplicates or Data tab -> Data Tools group -> Remove Duplicates
For example data:
Click the Remove Duplicates button:
And you are done!
The VBA equivalent is:
ActiveSheet.Range("$A$1:$B$10").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
Note the 1 & 2 does not mean Columns A & B. It means the Columns of the selected Range.
If your worksheet only contains 2 columns, you could use UsedRange instead.

Listing duplicate emails in Excel mailing lists

Im trying to create a list of values in 'sheet 3 column A', that are created by listing all values that are duplicates in two other sheets.
The duplicates are to be found by looking through each value in 'sheet 1 column P' and checking if that value also exists in
'sheet 2 column A'
I've tried reading up on this and there seem to be a number of functions I can use and not sure if I should use.
You need to use the VLOOKUP function, combined with IF. Together they are very very powerful. I really suggest you read up on them.
The following formula in Sheet 3, Column A (starting at row 2) will do what you want:
=IF(ISNA(VLOOKUP(Sheet1!P2,Sheet2!$A$2:$A$99,1,FALSE)),"",Sheet1!P2)
Copy that formula down from A2. I've assumed you have headings in row A. If you have more than 98 rows of emails (values to check), change $A$99 to be something like $A$9999.
So, let me get this straight. You have two workbook tabs. You want to get the intersection of the set (figure out where they are overlapping, duplicate, however you want to say it).
I would do one of two things, depending on how much you like Excel and moving your data around.
Option 1: Create a PivotTable of the data (assumes no duplicates within lists, only between lists)
Copy the data from the second list after the end of the first list (so both lists are now one list)
Insert a Pivot Table (on the ribbon), choosing your single column for the source
PivotTable options will pop up. Put the email address field in RowLabels and Count in the Summarize Values box.
Click on the count column of the pivot and sort largest to smallest.
All your duplicates will have Count > 1
Option 2 - use CountIf
This does not involve moving your data.
Go to sheet 2. In the next column over (from your info, it would be Column Q), put the CountIf function:
=CountIf(Sheet1!A:A,P2)
Then you can sort descending on your new count column to find duplicates.
CountIf performs very well in Excel if your lists are very large.
This can be refined slightly using iferror giving:
=IFERROR(VLOOKUP(Sheet1!P2,Sheet2!$A$2:$A$99,1,False),"",Sheet1!P2)
but is essentially the same thing

Combining Excel sheets/groups of columns by a condition in Excel 2007

Is there a way to combine 2 Excel sheets (or groups of columns inside one Excel sheet) so that the rows in one sheet/group append to the other sheet/group where so that certain columns values match.
To clarify:
Lets say I have 2 sheets - Sheet1 and Sheet2. Sheet1 has the columns A,B,C,D. Sheet2 has columns A,E,F,G. Column A in both sheets contains the same data but differently sorted (it is not sorted in conventional way (alphabetically or numerically)). I need to combine these 2 sheets into one, but they need to be combined so that the values in A column match (if possible the result should be ordered in the same way as the Sheet2).
Ideally, the functionality I'm looking for would need to be like SQL's INNER JOIN command.
I'm using Excel 2007.
Thanks
I think you basically described the VLOOKUP function.
You have your two sheets, now you want to create a list, which extends A,B,C,D to A,B,C,D,E,F,G.
For that, you could just use
Sheet1!E1=VLOOKUP(Sheet1!A1,Sheet2!A:G,5,FALSE)
Sheet1!F1=VLOOKUP(Sheet1!A1,Sheet2!A:G,6,FALSE)
Sheet1!G1=VLOOKUP(Sheet1!A1,Sheet2!A:G,7,FALSE)
If you need to create an extra sheet3 as a result, use this:
Sheet3!A1=Sheet1!A1
Sheet3!B1=VLOOKUP(Sheet3!A1,Sheet1!A:D,2,FALSE)
Sheet3!C1=VLOOKUP(Sheet3!A1,Sheet1!A:D,3,FALSE)
Sheet3!D1=VLOOKUP(Sheet3!A1,Sheet1!A:D,4,FALSE)
Sheet3!E1=VLOOKUP(Sheet3!A1,Sheet2!A:G,5,FALSE)
Sheet3!F1=VLOOKUP(Sheet3!A1,Sheet2!A:G,6,FALSE)
Sheet3!G1=VLOOKUP(Sheet3!A1,Sheet2!A:G,7,FALSE)
Hope this interpretation was correct.
Edit:
By the way, because Excel is not mainly intended to function as a database, this operation is a bit messy, because it does not dynamically scale. At least with the second approach, using a thrid sheet. You will have to copy down A1 at least that far, to match the last used row from Sheet1. And if you should copy it down further, so you won't have to worry about it for a while, you might need to error-proof against the empty cells.

Resources