How to write an excel index match formula with varying criteria? - indexing

Good day,
I have this index/match formula constructed based on a csv table i donwloaded from our office system and it's working fine:
IFERROR(INDEX('2nd'!$A$1:$D$100,MATCH("Enter BIN 1 Quantity",'2nd'!$B$1:$B$100,0),4),0)
However, I noticed that some tables i donwloaded showed different search patterns . Sometimes it's
"Enter Bin1 Qty"(no space) and there are times its just "Bin 1 Qty" or Bin1 Quantity". How can I make my formula adapt to this varying search criteria?. Your kind help will be much appreciated.
Thanks a lot in advance.
Mike
On this Final Table i will be displaying all the data from index matches formula. Got 2 other sheets, 1st and 2nd where I will paste the downloaded csv tables. 2nd sheet displays the 1st table image i posted here (w/c include the varying description and its equivalent value).
Hi #OverflowStacker, I tried your solution below but its throwing number error. Based on the above tables, here is the formula based on your solution, kindly check any problem in referencing, thanks, appreciate the help in advance (i entered it as an array as you mentioned below)
INDEX('2nd'!$D$2:$D$100,SMALL(IF(ISNUMBER(SEARCH(INDEX($T$2:$T$5,SMALL(IF(ISNUMBER(SEARCH($T$2:$T$5,SUBSTITUTE('2nd'!B2," ",""))),ROW($T$2:$T$5)),1)),SUBSTITUTE('2nd'!$B$2:$B$100," ",""))),ROW('2nd'!$B$2:$B$100)),1))
This is where i placed the possible search strings.

This is rather complicated :). It's an Array-formula CTRLSHIFTENTER
=INDEX($G$1:$G$4,SMALL(IF(ISNUMBER(SEARCH(INDEX($D$1:$D$4,SMALL(IF(ISNUMBER(SEARCH($D$1:$D$4,SUBSTITUTE(A1," ",""))),ROW($D$1:$D$4)),1)),SUBSTITUTE($F$1:$F$4," ",""))),ROW($F$1:$F$4)),1))
You can create a list with search terms (here in column D) to get right keyword which is searched for in table 2 (columns F:G).

Related

Compare Dates in a column corresponding to Changes in an other row

I have a large sample of medical data I need to try and analyze patterns in Excel worksheet.
I also put them up in a database in MS ACCESS to do my first filters and stuff.
I have the infos of patients, with tests results(POS or NEG), dates of the sample.
I need to be able to check for each patients when the results change from POS to NEG and from NEG to POS
and compare the dates of those two samples.
So far I was doing it manually which isn't viable for my sample.
I was trying to do something in SQL, but that didn't work out for me.
I also am trying to do some VBA or Excel formulas but I admit I'm getting kind of stumped.
I know I should do some for each cell loop or something but I really am lost.
I already grouped each patients info together using sub-totals and stuff.
Your help or at least pointers would be greatly appreciated :D
Here's an example of my data.
enter image description here
Use a formula like this, that in case the name is the same as the row before and the POS/NEG is different from the row before gives you the number of days in between, blank otherwise:
Of course it will give you an error if you try to use it on the 1st line, just enter it in the 2nd line and copy/paste in all the rest.
This should give you the basis for the rest of your analysis.

Select column and filter contents before searching on another worksheet

I´m trying to wirte a code and need some help.
I´ve managed to write parts of it using many sources around the web, but got to a point where I can´t find something to use as model or maybe find the right function.
I have an excel workbook with 2 worksheets, on the first one I have data from income and payments. With the code below I´ve managed to sort out the payments by eliminating blank cells from a range on "Plan1" and then copied to the other worsheet - "Plan2"
On Plan2 I get the following results:
Now, as you may see most of the codes are ending in "01".
What I need is:
After selecting column C; - done
Get all the values and search for them on Plan1, but removing the trailing "01" from them (since they vary in length) before search and then color the results on Plan1.
Advices please.
EDIT: I need to ignore the lines that do not end on "01". The full column will be selected.

Query several ranges and add automatically a column to know the source of each row

I am trying to achieve the following in Google Spreadsheets.
First, I want to query several ranges (in different sheets from the same spreadsheet). I tried a formula like this =query(arrayformula({indirect(E2:E10)}),"select * where Col1 <>''") with no success
In E2:E10 I have a list of ranges. Column F contains a name that describes the source of the value in Column E.
My second problem is that I need to add a column to the output of that query that tells me the origin of each row.
If the sources are ranges of 3 columns by country I need to merge those tables and add that country to each row.
All credits to +Ben Liebrand who helped me out here: https://support.google.com/docs/profile/3464
"I just want to start of by saying that the indirect() function does not work in an arrayformula() function as expected. So you will need to take another approach. I can understand what you are trying to do so I added another TAB in your spreadsheet to demonstrate another approach. I know it was initially a specific design you were trying so I made some changes to what you had. Maybe you can take a look at what I have offered and maybe you can tweak your design.
I know what I am offering is just very rough but you will also notice that I removed the end row specifier from your ranges in the range table.
Don't assume my example to be the final result but I was just trying to show that the range you were trying to use with the indirect() function will not work.
So hopefully this will give you a new idea of how you can maybe handle this.
My formula also adds the country to each of the tables in the output. My formula looks like this
=query(ArrayFormula({
if(len(indirect(regexextract(F2,"\w+\!\w+")&":A")),G2,),indirect(F2);
if(len(indirect(regexextract(F3,"\w+\!\w+")&":A")),G3,),indirect(F3);
if(len(indirect(regexextract(F4,"\w+\!\w+")&":A")),G4,),indirect(F4);
if(len(indirect(regexextract(F5,"\w+\!\w+")&":A")),G5,),indirect(F5);
if(len(indirect(regexextract(F6,"\w+\!\w+")&":A")),G6,),indirect(F6);
if(len(indirect(regexextract(F7,"\w+\!\w+")&":A")),G7,),indirect(F7)
})," select * where Col1 <> '' ")
Hope this is of some help to you"
And I hope is useful to the community
Gerónimo

Create list from data range

I was hoping to get a bit of help regarding formulas in Excel/VBA, I'm looking to do the following but I'm not sure how best to do it:
Okay, so I have a materials export from a piece of software and it comes out with the following sort of data:
In essence I would like to have a catalogue stored on a separate sheet which the function references for text strings that may be contained in a takeoff.
i.e. in E2 the function will check the column B for cells containing the text strings in A16:A18 (the consoles) and return any results along with the corresponding quantity to columns E and F. Similarly this will occur for the controller and cables.
I'm sure there's a solution somewhere but I've been unable to find one for lack of knowing what to search exactly.
Thanks for any help guys, it's appreciated.
What you may want to use is the COUNTIF function. Try this:
COUNTIF(A$2:A$13,"*" & A16 & "*")
If I am not mistaken you can check for the values in A16:A23 in the database dump column B1:B13, then you want the summer quantity for the matching values, where a match means the text you look for must be contained in the database dump column.
To get the quantity accordingly use the following formula in cell B16:
=SUMIFS(C$2:C$13;B$2:B$13;"*"&A16&"*")
then drag it into the other cells. The asterisks are text wildcards, so there may be text in front or behind the text part we look for.

Excel - How do I find all relevant rows by typing unique invoice# listed Col A

I have a Worksheet with 10 columns and data range from A1:J55. Col A has the invoice # and rest of the columns have other demographic data. Goal is to type the invoice number on a cell and display all the rows matching the invoice number from col A.
Besides auto filter function, the only thing comes to my mind is VBA. Please advice what is the best way to get the data. Thanks for your help in advance.
Alright, I'm pretty proud of this one. Again avoiding VBA, this one uses the volatile formula OFFSET to keep moving its VLOOKUP search down the table until it's found all matches. Just make sure you paste enough rows of the formula that if there are many matches, there's room for all of them to appear. If you put a border around your match area then it would be clear if you ever ran out of room and needed to copy down the formula some more.
Again, in the main section, it's just a single formula (using index):
=IFERROR(INDEX($A$1:$J$200,$M3,MATCH(N$2,$A$1:$J$1,0)),"")
This gets to be so simple because the hard work of the lookup is done by an initial column which looks up the next row that matches the invoice number. It has the formula:
=IFERROR(MATCH($L$2,OFFSET($A$1:$A$200,M2,0),0)+M2," ")
Here is the working example that goes with those formulas:
Let me know if you need any further description of how it works, but it mostly uses the same rules as above so that it's robust in copying and moving around.
I've uploaded the Excel file so you can play with it, but everything you need to reproduce this feature should be in this solution.
Google Docs - Click link and hit Ctrl+S to download and open in Excel.
A popular solution to this problem is a simple VLookup. Lookup the invoice the user types in on the table A1:J55, and then return an adjascent column's data.
Here's an example of it working:
The formula in the highlighted cell is:
=VLOOKUP($L3,$A:$J,MATCH(N$2,$1:$1,0),FALSE)
What's nice about this formula is you only need to type it once and then you can copy it across and it'll automatically pick out the correct column of the table (that's the match part). The rest is very simple:
The first part says lookup value $L3 (the invoice number typed in),
The second part says look it up in range $A:$J (which is where your table is located). I've shown how you can select the entire columns $A:$J so that you can add and remove data without worrying about adjustin the range in your lookups. (Excel takes care of optimizing the formula so that unused cells aren't checked)
The third part picks the column from which the resulting data will be drawn once a matching row is found.
The FALSE part is an indication that the invoice number must match exactly (no approximate matching allowed)
The $ signs ensure that fixed ranges like the location of your source table ($A:$J) and your lookup value ($L3) don't get automatically changed as you copy the formula across for multiple columns.
The formula is pretty easy to adapt if you want to move around your table and the area where you do your lookup. Here's an example:
Bonus
If you want to add a little spiff, you can add a dropdown to the Invoice # field so that the user gets auto-completion and the option to browse existing values like so: