In your first case, the fuzzy lookup will combine all three fields as a single string, and then evaluate the% similarity based on the # of characters in the entire string. In your second case, having three separate match columns will give equal weight to each comparison. Separate calculations are being performed on the color and the fruit. The add on is called Fuzzy Lookup and is available from. Is there an easier way for me to get this add on working on my Mac?
![]()
I'm writing a spreadsheet for my finances and need a little help. Here is a VBA solution which implements a rather weak fuzzy lookup. Maybe it will work on a Mac, maybe not (I've had mixed experiences when a colleague who has a Mac has tried to run some of my programs): Function FLOOKUP(pat As String, arr As Variant, ColNum As Long, Optional CaseSensitive = True) As Variant'does a linear search of first column of array or range arr until it finds a'string which is a fuzzy match for pat, returning the corresponding'entry in column ColNum of arr. If no match is found NA is returnedDim A As Variant, i As Long, s As String, p As String, pStar As Stringp = IIf(CaseSensitive, pat, UCase(pat))pStar = '.' & p & '.'
If TypeName(arr) = 'Range' ThenA = arr.ValueElseA = arrEnd IfFor i = LBound(A) To UBound(A)s = A(i, 1)If Not CaseSensitive Then s = UCase(s)If p Like '.' & s & '.' Or s Like pStar ThenFLOOKUP = A(i, ColNum)Exit FunctionEnd IfNext iFLOOKUP = CVErr(xlErrNA)End FunctionIn this code s is considered to be a fuzzy match of t if and only if either s Like '.' & t & '.'
or t Like '.' & s & '.' . In other words, if either s is a substring of t or vice-versa.If Excel VBA for the Mac doesn't know about xlErrNA, experimentation suggests that this is just 2042.
You could always return e.g. False rather than an error code if no match is found.The linear nature of the search implies that it probably won't scale very well, but perhaps it will work for your application.
This post explores Excel’s lookup functions, approximate matches, fuzzy lookups, and exact matches. The built-in Excel lookup functions, such as VLOOKUP, are amazing. When implemented in the right way for special projects or in recurring use workbooks, they are able to save a ton of time.
The VLOOKUP function alone has saved countless hours in my recurring use workbooks. However, the VLOOKUP function, similar to Excel’s other lookup functions such as HLOOKUP and MATCH, is built to perform an exact match or a range lookup. Both of these are quite different from an approximate match or a fuzzy lookup. This post discusses the details of these ideas, and demonstrates how to perform a fuzzy lookup in Excel 2010 and later.
UPDATED BLOG POST:. Understanding Built-In Lookup FunctionsThe built-in Excel lookup functions, such as VLOOKUP, HLOOKUP, and MATCH, work with similar lookup logic. To simplify this post, we’ll use just one as the example. Since the VLOOKUP function is probably the most used and most familiar lookup function, we’ll use it as we explore these ideas.The basic idea of an Excel lookup function is to look for a value in a list. For example, we could ask Excel to find “ABC Company” in a list of customer names. That is the basic idea, but the application of lookup functions are numerous and the implementations can become quite sophisticated and powerful.For this post, I’d like to split the tasks that a lookup function performs into two steps. I’ll call step one the match, and step two the return.
In the first step, the match, Excel must find the matching value. You tell Excel the value to find, such as “ABC Company” and you tell Excel where to look, such as in a range of cells.
You are asking Excel to find the lookup value in the lookup range.Step two, the return, is the function’s result. That is, what value the function should return to the cell.
Some lookup functions, such as the MATCH function, tell Excel to return the position number. Other lookup functions, such as the VLOOKUP function, tell Excel to return a related value. So, based on which lookup function you select, and which function argument values you enter, Excel knows what to return once it finds its match. So far so good?Let’s do a quick example at this point.I would like to find a specific customer name “ABC Company” in a list of customers, and if found, I would like Excel to return the customer id which is found in the next column.I would use a VLOOKUP function, and I would ask it to find “ABC Company” in the Customer Table, and return the ID. Assuming the customer name was entered in C7, and the customers were stored in a Table named Table1, then the following function would do the trick:=VLOOKUP(C7, Table1, 2, FALSE)Where:. C7 is the value to find. Table1 is the lookup range.
2 is the column that has the value we wish to return. FALSE means we are not performing a range lookupThis function is entered in C8 in the screenshot below.As you can see, the ID AC100 was successfully returned to the formula cell C8. And that my friend is the basic idea of the VLOOKUP function. Find a value (the match) and compute the result (the return).It is important to note that the lookup value, the text string “ABC Company” must be found in the lookup range. Except for case (upper and lower), the two values must match exactly.
“ABC Company” would not match “ABC Company, Inc.”, “ABC Co”, or “ABC Company “. No leading spaces, no trailing spaces, no extra abbreviations or characters. They must be the same.
This is called an exact match. If the value is not the same, the function will not match it, and you’ll get an error, as shown in the screenshot below.Now that we have covered the basics, it is time to explore the VLOOKUP’s fourth argument. The Truth about the VLOOKUP Fourth ArgumentThe fourth argument of the VLOOKUP function is officially named: rangelookup. It is a boolean argument, meaning you can pass it a value of TRUE or FALSE, or any other representation of TRUE or FALSE. The thing that tends to mislead Excel users is the description that Microsoft used for these options. Excel describes the TRUE value as “Approximate Match” and FALSE as “Exact Match.” A clearer description would have been something like TRUE “You are doing a range lookup” and FALSE “You are not doing a range lookup” but in any event, the descriptions are what they are.When you select TRUE (Approximate Match) you are not asking Excel to match values that are approximately the same as each other.
The description Approximate Match would tend to imply that the function would match “ABC Company” and “ABC Company, Inc.” since they are approximately the same name. In some cases and in some data sets, this idea would work. But this idea does not work in all cases, and thus, can’t be relied upon in our workbooks. For example, in the screenshot below, the function did not find a match between “ABC Company” and “ABC Company, Inc.” as evidenced by the incorrect ID returned in C8:In the following screenshot however, the function did find a match between “ABC Company” and “ABC Co” as evidenced by the expected ID returned to C8:The way that the function actually works when TRUE is selected is this: it walks down the list row by row, and ultimately stops on the row that is less than the value and where the next row is greater than the value. This is why the lookup range must be sorted in ascending order for the function to return an accurate result when the fourth argument is TRUE.This idea can be confusing when thinking about text strings, but makes more sense when thinking about numbers. For example, when trying to find the correct commission rate based on the sales value.
In this case, you want to perform a range lookup. You want to look up a value from within a range. This is illustrated in the screenshot below.The function walks down row by row trying to determine which row to stop on.
It continues down until it finds a row that is greater than the lookup value, and then it stops on the previous row. It stops on the row that is less than the value, and where the next row is greater than the lookup value. This is pretty easy to understand when thinking about numbers, but can be harder to visualize when thinking about text strings. The key to understanding this function argument however, is to realize that the logic is identical when operating on text strings and numbers. This is why “ABC Company” does not match “ABC Company, Inc.”, because “ABC Company Inc.” is greater than ABC Company. This is why “ABC Company” will match “ABC Co”, because “ABC Co” is less than “ABC Company.” As you can see, this is not what we have in mind when thinking about approximate match. What is a Fuzzy Lookup aka Approximate MatchAn approximate match, to us, means that two text strings that are about the same, but not necessarily identical, should match.
![]()
For example, “ABC Company” should match “ABC Company, Inc.,” “ABC Co,” and “ABC Company.” We think about an approximate match as kind of fuzzy, where some of the characters match but not all.The idea of a fuzzy lookup is that the values are not a clear match, they are not identical. But that they are likely a match, there is a probability that they are a match. They likely represent the same underlying entity.Now that we realize the VLOOKUP function does not truly perform approximate match logic, at least, not in the way we want it, what do we do?
Add-InWhen you hit a wall, go around it. Since the built-in lookup functions do not perform fuzzy logic when performing the match, we hit a built-in limitation of Excel. Microsoft has offered a way to work around this limitation by offering a free add-in.Microsoft offers a free add-in that enables Excel to perform fuzzy lookups. It is called “Fuzzy Lookup Add-In for Excel” and is available at the time of this post at the link below:Once installed, this add-in performs fuzzy lookups. It does not change the behavior of any of the built-in lookup functions.
It does not enable your VLOOKUP functions to perform fuzzy lookups. It is an add-in which basically processes two lists and computes the probability of a match.You specify the two tables, and within each table the columns to inspect. Basically, you define step one the match. You then define step two by identifying which columns from the tables should be included in the result. You can also specify the probability threshold.
You hit go, and the add-in performs its work, and then outputs the resulting table starting at the active cell. It basically generates a static report based on the settings you select.Here is a screenshot of the output, showing that it successfully matched “ABC Company” and “ABC Company, Inc.” in the same data set that caused our VLOOKUP function to fail.For more information about the fuzzy lookup add-in, and more detail on how to use it, please visit the Microsoft link above. The add-in comes with instructions, a sample Excel file, and a pdf file with background and the logic it uses to do its magic.
It also comes with a license, so, you’ll want to be sure to read the license terms in the LicenseTerms.rtf document included with the download.There is some extremely interesting computer science and math working behind the scenes, including Jaccard similarity, tokenization of records, and transformations. Pretty heavy mathematics in there. Thanks Microsoft Research for this add-in!! August 5, 2014 at 10:22 pm.I thought that this was a wonderful add on for excel. With my job i find i need to find partial matches in the same column of a table and identify them. This seemed to answer my prayers. However i am finding a big issue, which i am hoping is fixable.When i do a fuzzylookup on two columns and one has “apple” and the other “apple:” it brings back a perfect match not a partial match. The system is viewing this as a perfect match, it is ignoring the “:”This makes the add on useless as this sort of partial match is required to be identified is required as well as “colour” vs “color”.
Any thoughts on how this maybe fixed? If it is, this would be perfect.
Are there any other free add ons that i could use that would work.Thank youDonnchadh. jefflenning Post author. August 14, 2014 at 7:18 am.Donnchadh,I’m unaware of add-in settings or options that would allow you to modify the built-in behavior to meet your needs.
I modified the Similarity Threshold setting and various others, but none seemed to produce the desired result. Thus, you may need to solve it in two steps. The first step is using the add-in to generate the results table and the second step is using a formula to let you know if the two items in the results table are identical. For example, assuming that the apple/apple: results were in cells C10 and D10, you could write a formula such as:=C10=D10You could fill this formula down and it would provide TRUE for rows that were an exact match and FALSE otherwise.Thanks,Jeff. Dennis. September 16, 2014 at 9:17 am.Dennis,I believe the add-in allows you to provide a “Transformation Threshold” for individual columns via the Column Configuration options.
The default Column Configuration options are Default, PhoneNumber, SSN, and ZipCode. You can actually add a new custom configuration. On the bottom of the Add-In panel, you’ll see a Configure button which opens the Configure dialog. In the Column Configurations tab, you can click the Add button to create a new configuration, for example, BDate.
Set the EditTransformationThreshold value to 1 which means exact match. Then, close the Configuration dialog. In the Fuzzy Lookup panel, you want to select the two Name columns and then click the match icon to push the selection down into the Match Columns list box. Set the configuration for that one to say Default, which is a fuzzy match. Then, select the BDate columns from both tables and click the match icon to push the selection down into the Match Columns list box.
Set the configuration to say BDate, the custom configuration you just made that uses 1 for exact match. Then, delete any other Match Column entries that may have been added automatically, so that you only have the two we added manually.I believe this will provide the result you are seekingthanks!ThanksJeff. LJ. October 9, 2014 at 12:05 pm.Patrice,One approach to tell if the 9-number string appears in the list that contains text and numbers is with the COUNTIFS function.
Since the COUNTIFS function supports the use of wildcards, it is a fairly easy task to determine if there is a matching value or not.For example, if your list of 9-number values are in column A, and the text/number list is in column G, you could write the following formula in Cell B1 and fill it down:=COUNTIFS(G:G,”.”&A1&”.”)This tells Excel to count the number of cells in G that contain the 9-number string in A1 even if it includes preceding or trailing text values. For rows where the function returns 0, it means the value can’t be found; any rows with 1 or more means it can be found in that number of cells. This approach assumes that the 9-numbers are sequential in the text/number string, for example 123456789 and AA123456789BB.
It won’t work if the letters are in between the numbers, such as 1234A5678B9C.If you need to return a related value, rather than just determine if the value exists on the other list, then you could use VLOOKUP along with wildcards instead. The following blog post explains more about using VLOOKUP with wildcards:Hope it helps!ThanksJeff. Betsy. December 22, 2014 at 4:12 pm.Betsy,A few different ideas come to mind. You could write a VLOOKUP function that retrieves the “correct” value from the related list in a column.
Then, you could do a copy/paste values. This would be a great approach when the list is really long and there are many changes and you aren’t up for writing a macro. Another approach if the number of changes is small, like one or two, is to use the Find/Replace command. If there are lots of changes and the formula based approach with VLOOKUP won’t work, you could try a macro that performs the Find/Replace for you.Hope these ideas help!ThanksJeff. Sara. December 5, 2014 at 10:41 am.Jeff,Great information and wonderfully presented!
Thank you for your insight! I do have a tough question which I have not been able to find answered on the site. I have two sheets where I am comparing four columns for a match.
If the columns match, I need to return a numeric value from one spreadsheet to the other. The data I am comparing includes, a date (mm/dd/ccyy), two number fields and a 12 byte mixed alpha/numeric field. The total size is 19,000 plus rows. Both sheets are sorted numerically by the first and second numerical columns. I have been researching the VLOOKUP, but have not been able to determine how multiple column criteria can be used. Do you have any suggestions of what function(s) can be used to complete this task?Thank you!.
jefflenning Post author. January 8, 2015 at 7:28 pm.Jeff,I used to use Fuzzy Lookup on my old PC. I recently received a new PC and I’ve had a lot of trouble getting Fuzzy Lookup installed. Is there a special trick to getting it incorporated into excel? I’ve downloaded the file and it doesn’t appear on the quick acccess toolbar within excel. Here are things I’ve done so far:– Gone into EXCEL OPTIONS under ADD-INS– The FUZZY LOOKUP appears under Inactive Applications Add-Ins.– I’ve gone to MANAGE ADD-INS and it does not appear– I’ve gone to COM ADD-INS and I see Fuzzy Lookup unchecked; I then check the box, however it doesn’t do anything; I then re-enter into COM ADD-INS and the box is unchecked again (it doesn’t seem to take)– I’ve uninstalled and reinstalled the program– I’ve rebooted my machine– I’ve tried on two computers (one with Excel 2007 and another with Excel 2010); same issue on bothAny thoughts?.
Kurt LeBlanc. March 31, 2015 at 5:11 am.I’m trying to match some specified account names to transaction references given containing all sorts of random punctuation, spaces and typos. I’ve tried vlookup, index/match in combination with iferror and with variations on whether the match should be less than/ greater than, true or false chucked in some wildcard references also to see whether the results were any better.
Some of the formula combinations came close to giving me the correct returned value most of the time but, with so much data, I just refuse to go through each one to see if I can spot the errors.I then tried the fuzzy match add-in as my head was hurting. Still returned incorrect values.Also tried a vba fuzzymatch function I plagiarized from the internet but it broke my excel (albeit temporarily).Any ideas on how I can solve this problem please?. jefflenning Post author.
April 13, 2015 at 2:07 pm.Gemma,It sounds like you are asking Excel to match an account name to transaction references which contain all sorts of random punctuation, spaces, and typos. The built-in capabilities of Excel are great for doing exact matches, but, as you know, not good at this type of match.
I believe the tool that will provide the most accuracy most often is the fuzzy lookup wizard.However, an approach which is more manual the first period but quick in subsequent periods is to store the values in a lookup table. Unfortunately, this means building the lookup table manually the first month, and then, updating it when new transaction references appear.
For example, this is the approach often used when reconciling credit card transactions. Since the credit card statement description is often uniform, this can speed things along in subsequent periods. The lookup table would have two fields, the transaction description and then the account.
For example, the description of AVIS-DFW-10024Z is the credit card activity description and then you map it to the Automobile Expense account. Then you map Chipotle-001 to Meals and Entertainment. Depending on the number of transactions and whether or not there is consistency each period, this may be helpful.Best of luck!ThanksJeff. Gemma Erasmus. May 6, 2015 at 1:48 am.I got trouble in lookup between two tableName&Date EffectiveDate Name RateADAM&42064 1-03-2015 ADAM 5%MARY&42064 1-03-2015 MARY 6%I want to get rate depend on Name&Date as my lookupvaluetherefore for ADAM&42064 lookup value from effectivedate 1-03-2015 onwards the rate will be 5% otherwise it will be 0% if no data. The problem is when lets say I clear the data for the last row, the result will catch the upper row data instead become 0 rate.
FYI the effectivedate, name and rate column key in by user. I need to catch the rate between two range of dates for example 1st march 2015- 31st march 2015.please help me. N tq in advance. Kurt LeBlanc. September 17, 2015 at 10:22 am.James,If the values between the 2 databases you want to compare have exact matching values, then, I would probably use COUNTIFS or VLOOKUP instead of the Fuzzy Lookup Addin. The Fuzzy Lookup Addin is great when the values between the two lists may be different, for example ABC Co and ABC Company.
But, when the values are exactly the same, such as ABC Co and ABC Co, it will probably be easier to compare with a built-in function. I have an article which discusses how to perform such list comparisons here:Hope it helps!ThanksJeff.
mariana. February 20, 2016 at 2:16 pm.I tried using Excel fuzzy lookup on a few jobs after reading this article and was only able to do “stemming” matches, not real fuzzy logic. For example Excel fuzzy lookup can match “Company ABC” with “Company ABC Inc.” But even notepad can do that with “Find/Replace”, (e.g., Find “Company ABC” and Replace with “Company ABC Inc.” ? My jobs which I assume are not uncommon are needing to match things like “122 Main Street #22” with “122 Mane Unit 22” along with typos/errors where a few random characters are incorrect. In any event I ended up going with a cloud based app:.
Kurt LeBlanc. June 8, 2016 at 2:00 am.I have two tables with over 36000 rows each and tried fuzzy lookup on one column match in each.I continually get get out of memory despite shutting everything down, have 8GB RAM and still I don’t get a finished result?I am matching the description of assets, so less than 100 characters in a cell and trying to see which are thus missing from a given location from one group versus which ones they have on the same location and therefore any the other will be missing.Is there anything in set up I should be doing? I’ve adopted purely the default approach. Kurt LeBlanc. September 9, 2016 at 7:22 am.Great post – thank you. May I just pose a suggestion, with or without which your article is still great!Could you please provide the link/answer to the topic of the article upfront (rather than in the middle) so that more advanced excel users such as yourself could quickly find the answer? I almost lost the thread when you went into the (very well) detailed and displayed explanation of Vlookup False/True but kept on reading!Thank you and please do not take my suggestion as criticism as it is not intended to be in anyway.
jefflenning Post author. September 23, 2016 at 5:31 am.When I install the add-in, the terms of use tell me that it is licensed as part of the MSDN licensing program and not for production use. This would mean that it cannot be used for work applications. Are you aware of that restriction? It seems that other commenters are using it for work use, so maybe they have not read the license and terms of use? It might be worth noting the current terms in your article, or at least directing users to read the terms during the install.
The tool is free, but not licensed for all use yet so still has limited value for on the job application. jefflenning Post author.
July 18, 2017 at 10:47 am.Hello Jeff,I love the fuzzy lookup add-in, but as our company has moved to 64-bit we are having compatibility issues. I have googled this issue and see that other users are having similar problems: the add-in installs, you set everything up, press Go, but then nothing happens. I reached out to Microsoft, but they were unable to help. Are you aware of an alternative or way to fix this issue with a seemingly incompatibility with 64-bit machines?Thanks!. Jeff Lenning Post author. April 26, 2019 at 9:40 pm.Hey everyone, I have a question about this.
I have a large exported dataset (about 500,000 rows.) One of the rows is more or less a comment section where the user wrote comments about the interaction with the customer. We are looking for a list of records where any of the 8 keywords appear within those cells.I’ve created a wordbank containing about 30 spelling, case and abbreviation variations each. Will it be possible to use the Fuzzy Lookup tool to look in that column for any of the words in the bank; and then return a list of say, the User ID’s located within the rows where it finds one of the bank words? I hope I’ve explained that well enough. Jeff Lenning Post author.
![]() Comments are closed.
|
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
March 2023
Categories |