Solved

Worksheet Comparison (additions/deletions included)

Posted on 2013-06-11
30
393 Views
Last Modified: 2013-06-18
I need something to compare two excel worksheets and highlight differences.   I’ve done a bit of searching and found some macro solutions for this, but none have worked so far.
So,  can someone help me put together a macro to do this for me?  


Two sheets to compare, each containing 10 columns.  The uniqueness of a row is defined by 3 separate columns  (If those three cells are the same, and any of the other 7 are changed then it's an update, otherwise it's a new line)

Note:  there could be anything from 500 to 10000 rows in these sheets.

The difficulty in the comparison is that there could be any number of rows added to / deleted from the middle of the sheet.  As in, a block of 50 rows could be removed.  And a block of 100 rows added in another section.
I need an output that will highlight (or move to knew sheets) additions / deletions and modifications.
In any of the macros I’ve tried so far, the issue comes about when, for example, some rows are deleted in Sheet2, then the results for the rest of the comparison get messed up.  The macro is comparing the wrong rows and every line after that is counted as a change.  

I can give sample data if someone is willing to help, although I would rather keep the sample data private if that’s possible?
0
Comment
Question by:obrienjimmy
  • 16
  • 14
30 Comments
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
The approach I took was not to mark the rows that aren't found in both sheets but to hide those that are found. Therefore the ones you are interested in are the ones that remain visible.
All the code is in one module which you can conveniently drag into your project. Run the Sub HideDuplicates from a button, a worksheet shortcut or directly from the VBE. But before you can do that there are a few switches to throw:-
1. At the top of the code module there are 4 enumerations which you need to set to match your own workbook.
        NwsFirstDataRow = 2     ' MUST be > 1
        NwsTest1 = 1            ' columns are numbered 1 for A, 2 for B etc
        NwsTest2 = 2
        NwsTest3 = 3
Note that the FirstDataRow can't be 1 and must be the same on both sheets.
The 3 test columns - those which are identical in duplicates - can be any columns in your worksheet, not necessarily adjacent. The code doesn't allow for them to be of different length. The length is measured on the first one in the list and if any of the others is longer the extra rows will be ignored.

2. Near the beginning of Sub HideDuplicates you must enter the names of your two worksheets.
        Set Ws(1) = .Sheets("Sheet1")
        Set Ws(2) = .Sheets("Sheet2")
Write between the quotation marks.

I hope this works for you.
EXX-130611-Hide-Duplicates.xlsm
0
 

Author Comment

by:obrienjimmy
Comment Utility
Although not really what I'm looking for (I'd also like to highlight the change in each row), it's definitely a step in the right direction.  

I took some sample data and put it into your excel file.  It worked okay for the simple cells.  But when I tried executing for a full comparison I get a type error:

Run-time error '13':  Type mismatch

debug points to:
    Set Fnd = .Find(What:=SearchFor, After:=.Cells(SearchAfter), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=SearchDir, MatchCase:=SearchCase)
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
Try changing the declaration of the variable ConCat from String to Variant:
Private Sub AddTestColumn(Ws As Worksheet)

    Dim Concat As Variant

Open in new window

Highlighting changes is another can of worms altogether and I would prefer to deal with it in another thread. In this thread the task is set to mark those items which aren't unchanged. I think that giving a list of only those items fulfills that requirement. Remember, you were considering to write them to another sheet. That is, de facto, what you got now. Anyway, you may like to explain what you find wrong with what I have done and it can be improved. However, before we can come to that we have to make it work with your data. If the above suggestion doesn't help you would need to provide me with real data that I can test with.

As you have pointed out, the complaint is about Type mismatch. The type in question is the data type. Our joint testing seems to prove that the data type you use in your sheets is different from what I used in mine.
0
 

Author Comment

by:obrienjimmy
Comment Utility
To be fair, the very first line of the very first post states:
"I need something to compare two excel worksheets and highlight differences".
I think it's pretty obvious what my end game requirement is there :)

But okay.... lets get this method working first and I'll go from there.   If we can get to a point where I have a list of changes at the end of it I'll be happy.  One definite requirement is that I knew what the change is though.  i.e. if it's a new line item, deleted line item or a modified line item.
So in the version above it would work if we only had added / deleted items.  i.e. whats left in sheet one is deleted, whats left in sheet two is new.  But then when you add the updated rows (which appear in both sheets) to this it becomes confusing as to what's what.  Maybe we could push the updated sheets into a third sheet??

Oh, and ps: the string to variant change didnt fix the type mismatch.  
Does the cell format impact the data type in a cell? I just checked the cell formats and all are set to General.  I tried setting them all to text, but made no difference.
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
I don't know what causes the problem. Can you give me 10 rows of actual data? Better still, give me my own workbook with your own data pasted in, which is failing the test. The problem might be in the way you copied the data into my workbook. The code might have been altered inadvertently. All we know is that before it worked and now it doesn't.

Frankly, I thought I had a brilliant solution for "highlighting" the changes. :-)
What could possibly surpass showing nothing else?

Now I realise that you didn't mean to draw attention to rows but to cells. As of now I don't have the slightest idea of how to achieve that, and I don't want to ask the questions here that need to be asked because asking them would detract from the more pressing task at hand. Hence my feeling to look for physical separation.

However, to give you a preview, you have stated that if three columns aren't changed any remaining changes represent an update, else it's a new line. I have separated (or am about to separate)  Unchanged and Updated from NewLines. Is it, then, that the NewLines (and, perhaps, the Unchanged) should be hidden and the Updates examined to highlight changes? If so, I would agree that it is indeed the subject of this thread.
0
 

Author Comment

by:obrienjimmy
Comment Utility
Is there any way for me to email or pm you sample data (or your file with my data)??  
I don't want to sanitize the data and although it'll be nonsense to most people, it's still data that my overlords would be very unhappy with me about publishing.... and once its attached here it stays (or is there a way to remove the attachment after?)

I did change the code, but all I updated was the number of columns from 3 to 10.  It's possible I interpreted the code wrong though.  Although the change did work for a 7 column sample set I tried first.

No,  I do require to see the list of NewLines and Removed lines as well.  I need to see everything that's different, which your method does achieve.  I just want to be able to visually know the type of change (i.e. whether the row I'm looking at is a NewLine or an Update to an existing line for example.)
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
1. My code identifies duplicates by comparing 3 columns. If these 3 columns are identical all others are deemed to be likewise. Is that OK? Do these rows need to be processed any further? If yes, how?
2. My code hides all rows identified as duplicates using the above criteria.
You say that you need to see everything. So, how would you like duplicates to be marked?

I suggest you contact the EE Support Team and ask them to forward your file to me. If there is a way to upload the data as private on this site they will help you. I have always found them to be very cooperative.
0
 

Author Comment

by:obrienjimmy
Comment Utility
Okay, ill ask them. Thanks.

Ah, I see you slightly misinterpreted my requirement.  I'll explain further.
The 3 columns I mentioned in the first post are to be used for the uniqueness of a row...i.e. to identify new additions vs modification of existing rows.

Examples:
If there is a row in Sheet2 with the unique combination (B,F,G columns) that doesn't appear in Sheet1 then it is a completely new row.

If there is a row in Sheet1 with unique combination (B,F,G columns) that doesn't appear in Sheet2 then it is a deleted row.

If there is a row in Sheet2 with the unique combination (B,F,G columns) that does appear in Sheet1 (which will be majority of of rows) then the rest of the columns need to be checked for modification.  If any other column doesn't match then the row has been updated.

This could also be checked in reverse.  In your method you concatenate the columns*.  If you do that for all 10 columns and hide it when you find an equal row in Sheet1.  If not equal and B,F,G are equal, then it's updated, otherwise an addition.

Do you get me?
0
 

Author Comment

by:obrienjimmy
Comment Utility
okay, I figured out what the type mismatch is about.  I started at the 7 column one I had working yesterday and added each column individually from there.  
One of my columns has blocks of text in it.  So an example would be:

LIST OPTIONS:
a) Required
b) Not Required

This includes new lines etc.  This seems to be causing the problem.  Presumably the String / Variant data type can't include this type of info? Or can't compare it perhaps?
Thoughts?
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
The code concatenates the Values of the 3 critical columns and writes that concatenation to a dedicated column. It then looks for an identical concatenation in the other sheet. It doesn't matter how you fill a cell, it always has a Value. And it doesn't matter what you write into a cell, it is always a Variant. I now wonder if it is possible that the concatenation of the 3 cell values could be an empty string. You mention "new lines". If this evaluates to a test string of 0 length that might cause the hiccup.

I can't think of a reason why the column with a validation drop-down should cause a problem. However, obviously, this column should be examined more closely. Have you been able to ascertain in which row of sheet1 the error occurs? Did you gain access to the column (column A) which is dedicated to the concatenation strings? Are you sure you set the Enum correctly to point at the 3 relevant columns?
0
 

Author Comment

by:obrienjimmy
Comment Utility
You misunderstand, it's not a validation drop-down. It's a block of text that can be anything.  Just so happens the example I gave looks like a drop-down.
Another example would be something like :
Internal formula: IF COMPARE_NO_CASE ( { listSpecProp MasterBatchRecord@5250458995-prodStepCollection-BasicOperation@5250459910-prodStepCollection-CommonBF@5250459925-prodStepCollection-CommonBF@5250459927-specPropCollection-ListSpecProp@5250459928 } ; " \a) Required\ " )
 THEN " \1Yes\ "
 ELSE " \1No\ "
 ENDIF

When I said new line, I meant within the block of code.  tabs / newlines etc ...
There must be something in this cell format causing the problem.  I'll run a few tests later myself and figure out the issue there.  

Did you see my post (ID: 39240509) explaining my requirements again?  You never responded to that so not sure if you saw it.
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
Indeed, I did overlook that post. Thank you for pointing it out to me. Now there are two tasks before us.
1. Get the system of determining equality of 3 columns only going.
2. Determine what to do with the result of that test.
This looks like we might solve problem #1 only to find that we don't need it. But then, if we know what to do with the test result we would naturally want the test.

On #1
I agree that there must be something there, but the final Value (Range property) can only be \1Yes\ or \1No.\ Neither constitutes a problem, nor does a blank. A forward slash might be problematic, but not a back-slash. I wonder if it is possible to have all three test columns blank which MIGHT cause a problem.
I need to look at real data. Frankly, the "internal formula" you quote is a mystery to me and I would like to see it in action. If that can't be arranged I should guide you to find the row where the error occurs.

On #2
You plan on finding difference between two lists which broadly seem to fall into three categories:
1. Items added to the 2nd list
2. Items deleted from the second list
3. Items modified in the second list
This leaves out the following possibilities:
a) Items added to the first list
b) Items deleted from the first list
c) Items modified in the first list
Therefore it seems like you have an inactive master list and an active child list. Now you wish to see which of the changes made in the child should be copied into the master. Am I right so far?
What is the next step, after everything has been marked? I should presume that you intend to produce a new "master" - combine the two lists into one. If so, the items added to the 2nd list should be included in the master, items deleted from the second list perhaps deleted in the Master as well, and items modified to be reviewed.
To me it looks like this train of thought could lead to methods other than the one I have proposed, but I get stuck on the need to compare cell Values (the property)  with each other in order determine change. So, we come back to why the cells which you have discovered aren't filled with Variants or concatenate with others into something that isn't a Variant.
Full circle. What's there to do?
0
 

Author Comment

by:obrienjimmy
Comment Utility
Okay, going to try and go through this.  I’m not sure if you’ve missed or misunderstood some of the things I’ve said, but your initial code works fine…..
 As I’ve explained, the three columns are only to differentiate between new or existing lines, so you’re original code wasn’t taking into account modifications.
 What I tried to do was expand your code to include the full 10 columns.  I know this isn’t exactly what I wanted either, but I wanted to check that the full comparison would work.  And it didn’t due to that final column I spoke of.
So….. in response…..

Indeed, I did overlook that post. Thank you for pointing it out to me. Now there are two tasks before us.
1. Get the system of determining equality of 3 columns only going.

Done.   Never had a problem.

2. Determine what to do with the result of that test.
Well, we now know if the line item is old or new.  If new, we can ignore the rest of that row.  If old, we need to compare the rest of the columns for any differences with the row in sheet 1.  If there are any modifications, then flag the row as an updated row somehow.

On #1
I agree that there must be something there, but the final Value (Range property) can only be \1Yes\ or \1No.\ Neither constitutes a problem, nor does a blank. A forward slash might be problematic, but not a back-slash. I wonder if it is possible to have all three test columns blank which MIGHT cause a problem.
I need to look at real data. Frankly, the "internal formula" you quote is a mystery to me and I would like to see it in action. If that can't be arranged I should guide you to find the row where the error occurs.

You seem to be misinterpreting what this column is.  It is just a BLOCK of random text. Not a formula of any kind.  There may be formula text within it (like the example above -"internal formula" has zero to do with excel), or list of options (like the first example I gave) or nothing at all.  It’s basically an export of a CLOB field from an oracle database.  


On #2
You plan on finding difference between two lists which broadly seem to fall into three categories:
1. Items added to the 2nd list
2. Items deleted from the second list
3. Items modified in the second list
This leaves out the following possibilities:
a) Items added to the first list
b) Items deleted from the first list
c) Items modified in the first list

Therefore it seems like you have an inactive master list and an active child list. Now you wish to see which of the changes made in the child should be copied into the master. Am I right so far?
What is the next step, after everything has been marked? I should presume that you intend to produce a new "master" - combine the two lists into one. If so, the items added to the 2nd list should be included in the master, items deleted from the second list perhaps deleted in the Master as well, and items modified to be reviewed.
To me it looks like this train of thought could lead to methods other than the one I have proposed, but I get stuck on the need to compare cell Values (the property)  with each other in order determine change. So, we come back to why the cells which you have discovered aren't filled with Variants or concatenate with others into something that isn't a Variant.
Full circle. What's there to do?

You are correct in that it is a master list and an active child list.  But we will not be making ANY modifications to either list.  
List 1:  Is an approved locked down list exported from an application.
List 2: Is a new draft version exported from an application.
Due to the fact the application doesn’t have an ability to visually show what changes have been made between versions, I am trying to achieve this through export and excel.  So what I want at the end of the day, is to be able to look at this excel file and visually tell what has been modified since the last version.


I'm going to do some sanatization of the data and give you some real data to work with.
Cheers....
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
Please try the macro "CompareSheets" in the attached workbook. It marks cells that were changed in those rows identified as equal, previously hidden. All other rows remain untouched.
There is a very good channce that the macro will stumble on the column you have already identified as a trouble maker. If so, we have to name and exclude it.
EXX-130614-Mark-Changes.xlsm
0
 

Author Comment

by:obrienjimmy
Comment Utility
Well now we're getting somewhere.... looks perfect at first glance anyway :)

I posted some sanitized sample data there, but it appears to not be up.... perhaps attachments have to be reviewed first or something?  Should be on the way though.....

Unfortunately, exclusion of the problem column (and I haven't checked the new macro yet) is just not an option for me. In fact, it's probably the most important column with regards checking for changes.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
In that case we may have to give it special treatment. Please check the new version of my code while I wait for your data.
0
 

Author Comment

by:obrienjimmy
Comment Utility
few things:

1) In the sanitized data I sent I think I forgot to make changes between the sheets.
2) In the data I sent you, columns 2,6 and 7 are the columns that define uniqueness.

3) In the new version of the macro you no longer hide unchanged rows (i.e. if markchanges() finds nothing then the row could be hidden - or entire row colour coded).  Is there a reason for this or just left out for now while we are testing?
4) Connected to 3, but due to that I can no longer tell added/deleted rows from completely unchanged rows.

5) I ran some tests by bringing one of the problem columns (9 and 10 in my sample data) in.  It didnt cause the crash/bug anymore, but it didn't seem to work with the data either.... i.e. it wasn't marking if there was change in that column.
0
 

Author Comment

by:obrienjimmy
Comment Utility
Okay, I'm starting to think that maybe I didnt submit the post with my sample data. So going to attach it again, this time with the new macro file.
EXX-130614-Mark-Changes-RD.xlsm
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
There are two reasons for why my code doesn't do what you expect it to do. One is that your sheets are heavily colored already. The cells' conditional formatting overrides whatever cell color the program might set. If you wish for any sort of color marking you should remove the CF in order to see it.
The other reason is that I may not understand what you want. I have sorted the entries into "same" and "not same" based on the 3 most relevant columns.
"Same" items are examined whether they contain any changes which are then color marked. However, even if I would select more obtrusive colors you wouldn't be able to see them because Excel doesn't display them due to CF rules.
"Not same" items are left untouched. This is the point I may not understand: what is it that you wish to be done with them?

The internal formula is a normal string to Excel. There is absolutely no problem with it. I now suspect that the cause of the failure might be string length. Excel may not be able to look for strings that are longer than 255 characters. Once you concatenated all 10 columns the length of the strings you tried to look up probably exceeded that limit causing Excel to doubt whether the data type was correct. It was, but it was too much of it.
0
 

Author Comment

by:obrienjimmy
Comment Utility
If you wish for any sort of color marking you should remove the CF in order to see it.
Ah, I see.  I'll remove that from further tests.  

I have sorted the entries into "same" and "not same" based on the 3 most relevant columns. "Same" items are examined whether they contain any changes which are then color marked.  "Not same" items are left untouched. This is the point I may not understand: what is it that you wish to be done with them?

Technically there are 4 types.  You already have Same and Not Same.  But both of those have two types each.

Items that are Same further split to
Same - Changed: rows that markchanges() finds a difference.  These will be marked by the colour coding on the cells. (already in macro)
Same - Unchanged: rows that markchanges() finds nothing. These need to be marked somehow too. e.g. hiding the row. (not in macro)

Items that are Not Same further split to

Not Same - New: rows that are in Sheet2 but not in Sheet1. Marked by appearing in Sheet2, without any colour coding. (already in macro)
Not Same - Deleted: rows that are in Sheet1 but not in Sheet2. Marked by appearing in Sheet1 without any colour coding. (already in macro)

The internal formula is a normal string to Excel. There is absolutely no problem with it. I now suspect that the cause of the failure might be string length. Excel may not be able to look for strings that are longer than 255 characters. Once you concatenated all 10 columns the length of the strings you tried to look up probably exceeded that limit causing Excel to doubt whether the data type was correct. It was, but it was too much of it.

Okay, well this is definitely a big problem, some of those blocks of text can be a few thousand characters in length.  If a comparison can't be done on those fields then this whole method is a no go unfortunately.
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
Luckliy it isn't a big problem because the limit on string size is somewhere around 32,000 characters, and two strings of that size can be compared - for all I could find out. The smaller limit of 255 characters applies to the size of a string that you might search for in another string or a document.
In the attached workbook the code has been modified to hide exact duplicates in sheet2, not in sheet 1.
There is another method of marking you might consider. As you know, I am adding a column temporarily. It is used for identifying "same" items. As the program works its way down this column (A) in Sheet1. The concatenated strings could be deleted, since they aren't of any further use, and the cells used for some kind of marking.

In Sheet2 the contents of column A wouldn't be required any further for items already found and checked. Again the cell could be used for marking, just so long as the mark can't be confused with any possible concatenation. Interestingly, perhaps, this method would leave you with another category of rows in Sheet2 - the not same will still be "marked" with concatenations which would have to be removed and might, therefore, easily be replaced with somethign else.

With a system based on the helper column A you could leave your CF in place and the program could write the modified column ID's (like A, C, F) in column A.
EXX-130614-Mark-Changes.xlsm
0
 

Author Comment

by:obrienjimmy
Comment Utility
I like the idea of marking the first column all right.
Just curious about the following comment:
just so long as the mark can't be confused with any possible concatenation

How do you ensure that?  Does this mean we can't use standard strings in the new column?
0
 

Author Comment

by:obrienjimmy
Comment Utility
Could you clarify something for me about part of your code.
    
   Enum Nws                    ' Worksheet navigation
        NwsFirstDataRow = 2     ' MUST be > 1
        NwsTest1 = 1            ' columns are numbered 1 for A, 2 for B etc
        NwsTest2 = 2
        NwsTest3 = 3
    End Enum

Open in new window


My assumption all along has been that I should change these values to the numbers representing the columns that I want to use for uniqueness.
In my case (my sample data) that equates to 2, 6 and 7.  

Is that understanding correct?  


Also, for future updates, can you use my sample data in your tests... might make it easier for me rather than copying in the sample data each time and changing the code.  Might also help you visualize my requirements a bit easier.
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
Your understanding is correct. The enumerations must point at the columns you designate.

The program adds a new column A in both sheets. Then it works down the column in Sheet1. After the value in Sheet1 has been used it will no longer be required.
Each value in Sheet1!A:A will be searched for in Sheet2!A:A. If found, the value in Sheet2!A:A will also not be needed any more because the idea that it might have to be found another time is excluded.
However, each value in Sheet1 will be looked for in all of Sheet2!A:A. Therefore, any change you may make in the lookup range should not result in a value that might be present in any of the cells in Sheet1!A:A not yet looked up in order to avoid having an unintended match made.
0
 

Author Comment

by:obrienjimmy
Comment Utility
Sounds good.  I think that's a good route to go down.  I could always add conditional formatting later to alter row colours depending on that column too.

Can you put an attachment with that method coded in please, and if you wouldn't mind, do so with the sample data I posted.  
The only remaining question is the large text column.  Does the current iteration of the macro deal with the comparison of that column?  

Once both of those are there, I think I'll be happy enough to continue the process on my own.  Thanks for the persistence with the project too by the way.  Appreciated.
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
Your instruction is too vague. Do I understand correctly that you would like to have rows marked in column A rather that cells colored or rows hidden?
If so, please specify for each case we have defined how to mark the row in sheet1 and the corresponding row in sheet2.
0
 

Author Comment

by:obrienjimmy
Comment Utility
I'd go with what I had specified from an earlier post:
MarkChanges works on the 3 columns Identified to find unique/non-unique rows.  
Using this column marking method there may be no reason to hide rows at all... so mark in both sheets if possible.

Same - Changed: rows that markchanges() finds an identical row in Sheet2, and a modification to at least one of the other 7 cells (incl large text one).

Same - Unchanged: rows that markchanges() finds an identical row in Sheet2, and no modification to any of the other 7 cells.  


Not Same - New: rows that are in Sheet2 but not in Sheet1.  Obviously can only be marked in Sheet2.

Not Same - Deleted: rows that are in Sheet1 but not in Sheet2. Obviously can only be marked in Sheet1.

I will eventually have to improve this macro to include marking/highlighting of individual changes (i.e. text within a cell), but I will leave that to another time/question.  I think I've made you work hard enough for your points :)
0
 
LVL 14

Accepted Solution

by:
Faustulus earned 500 total points
Comment Utility
OK, this should work. Please test.
EXX-130618-Mark-Changes.xlsm
0
 

Author Closing Comment

by:obrienjimmy
Comment Utility
Thanks Faustulus.  That works perfectly.  I'll be back with another question to upgrade to highlighting text changes at some point.
0
 
LVL 14

Expert Comment

by:Faustulus
Comment Utility
Thank you for the points.
I'm not much of a friend of CF. Perhaps you like to consider just coloring the cells in column A as they are being filled, with the conditions being worked out by the code, leaving the rest of the sheet with whatever CF there is.
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

A little background as to how I came to I design this code: Around 5 years ago I designed an add-in that formatted Excel files to a corporate standard, applying different cell colours and font type depending on whether the cells contained inputs,…
This code takes an Excel list of URL’s and adds a header titled “URL List”. It then searches through all URL’s in column “A”, looking for duplicates. When a duplicate is found, it is moved to the top of the list. The duplicate URL’s are then highlig…
The viewer will learn how to create two correlated normally distributed random variables in Excel, use a normal distribution to simulate the return on different levels of investment in each of the two funds over a period of ten years, and, create a …
This Micro Tutorial demonstrates in Microsoft Excel how to consolidate your marketing data by creating an interactive charts using form controls. This creates cool drop-downs for viewers of your chart to choose from.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now