excel - COUNTIF - excel

I have a table with three columns. Column C contains the formulas. Right now, I'm putting in the formulas by hand. I need a modified version of the same formula that I can drag-down and uses the correct ranges.
| Column A | Column B | Column C
|-------------------------|---------------------|-----------------------------
| abiding_jj citizen_nn | (abiding1) | 1[=COUNTIF(B$1:B$1,B1)]
| (BLANK ROW) | |
| abrupt_jj end_nn | (abrupt2) | 2[=COUNTIF(B$3:B$7,B3)]
| abrupt_jj end_nn | (abrupt1) | 3[=COUNTIF(B$3:B$7,B4)]
| abrupt_jj end_nn | (abrupt1) | 3[=COUNTIF(B$3:B$7,B5)]
| abrupt_jj end_nn | (abrupt1) | 3[=COUNTIF(B$3:B$7,B6)]
| abrupt_jj end_nn | (abrupt2) | 2[=COUNTIF(B$3:B$7,B7)]
| (BLANK ROW) | |
| abrupt_jj halt_nn | (abrupt1) | 3[=COUNTIF(B$9:B$12,B9)]
| abrupt_jj halt_nn | (abrupt3) | 1[=COUNTIF(B$9:B$12,B10)]
| abrupt_jj halt_nn | (abrupt1) | 3[=COUNTIF(B$9:B$12,B11)]
| abrupt_jj halt_nn | (abrupt1) | 3[=COUNTIF(B$9:B$12,B12)]

If I understand correctly, you want to treat observations that are separated by a blank row as different "groups". This could be solved by adding an extra column that creates "group" numbers that you can then use in a countifs formula.
An example with the "groups" in column A:
Column A contains 1 in A1, to mark the first group, and a formula in subsequent rows: =IF(ISBLANK(B#),A#+1,A#) (as shown in the snapshot, with # being the previous row).
It's not very elegant but it seems to do what you want.

Related

Excel sheet merging different column

Having an excel file as shown as below:
First sheet:
| Animal_with_age|
|----------------|
| Animal-Dog123L |
| at-cat234L |
| MS-Donkey12 |
| occoco98L |
| Ms-dog donkeyone|
Second sheet:-
| Animal |
|-------------- |
| Dog |
| CAT |
| Donkey |
| coco |
| dog donkeyone |
I need the output as below:
sheet 1:
| Animal_with_age|Animal|
|----------------|------|
| Animal-Dog123L |Dog |
| at-cat234L |Cat |
| MS-Donkey12 |Donkey|
| occoco98L |coco |
|Ms-dog donkeyone| dogdonkeyone|
Is that possible? Is that possible if i convert to dataframe?
Using Filter, INDEX-MATCH & SEARCH formulas, we can do full to partial string matching...
=INDEX(FILTER(Sheet2!$A$2:$A$6,ISNUMBER(SEARCH(Sheet2!$A$2:$A$6,Sheet1!A2)),0),MATCH(MAX(LEN(FILTER(Sheet2!$A$2:$A$6,ISNUMBER(SEARCH(Sheet2!$A$2:$A$6,Sheet1!A2)),0))),LEN(FILTER(Sheet2!$A$2:$A$6,ISNUMBER(SEARCH(Sheet2!$A$2:$A$6,Sheet1!A2)),0)),0))
Output of sheet1 -> Paste formula in sheet1 cell b2 & drag till last row;
Hope this Helps...

Count matches of entire record in two separate tables - excel

Ive been trying to find a formula which would count me the match between two tables (like inner join) in excel.
I have a table1 with columns(ID,UserName,Function) and table2 (UserName,Function, etc...) need to count an explicit matches of table1(UserName&Function) and table2(UserName&Function)
tried sumproduct(--(table1[UserName:Function]=table2[UserName:Function]) but it seems like it compares it column by column and returns incorrect value, i tried to concatenate those columns within sumproduct, but still doesnt work.
Is it possible to make it in one formula or shall i build udf with sql query?
Would it be possible to return the records and list it as an array by using FILTERXML formula?
sample data:
table1:
| ID | UserName | Function |
| -- | -------- | ----------|
| 1 | oopz | FCA4001 |
| 2 | oopz | FCA4002 |
| 3 | arronT | FCA4001 |
table2:
| UserName | Function |
| -------- | ----------|
| randalO | FCA4001 |
| oopz | FCA4001 |
| arronT | FCA4005 |
Thanks in advance!:)

Return unique column headers matching criteria

Consider the following data below:
| 1st | 2nd | A | B | C | D | E | F | G | H |
|-----|-----|---|---|---|---|---|---|---|---|
| y | x | | | 1 | | | | | |
| y | x | | | 1 | | | | | |
| y | x | | | | 1 | | | | |
| | x | 1 | | | | | | | |
| y | | 1 | 1 | 1 | | | | | |
| y | x | | | | | | 1 | | |
| y | | | | | | | | 1 | |
| | x | | | | | 1 | | | |
| | x | | | | | | | | 1 |
| y | x | | | | | | | | 1 |
What I wish to do is to return all column headers (from A to H) that meets the following condition: it should have a value of 1 that is both aligned with a y and x value from the first two columns.
I already have a working array formula to do this, which is as follows:
{=INDEX($C$1:$J$1,SMALL(IF(($A$2:$A$11="y")*($B$2:$B$11="x")*($C$2:$J$11=1),COLUMN($C$1:$J$1)-COLUMN($B$1)),ROW(1:1)))}
However, while I drag this down, it returns two C values and one for D, F and H.
This is since there are two 1's under header C that meets the said condition. What I want is to return unique values, so C should only be returned once. I tried to make use of MATCH and additional COUNTIF instead of the SMALL function, but it is returning an error, and the 'Evaluate formula' feature of Excel isn't helping. Below if the erroneous formula I experimented with:
{=INDEX($C$1:$J$1,MATCH(0,IF(($A$2:$A$11="y")*($B$2:$B$11="x")*($C$2:$J$11=1),COUNTIF($N$1:N1,COLUMN($C$1:$J$1)-COLUMN($B$1))),0))}
A workaround I am currently doing is to make my first formula a "helper column" and then create another formula based from the first formula's result to return only the unique values. However, the double array formula is heavily affecting the efficiency of Excel's calculation due to the huge volume of data I'm dealing with.
Any help/suggestions will do please (no VBA please, since I believe it's not needed here). Thanks!
Insert a helper row. I did it just under your header row before your data. In this row you check to see if there is a 1 that lines up with an x and a y. I assumed this to be non blank, but if its specific values change the formula from <>"" to ="y" or =134 as the case may be. Place the following formula under your first column header you are interested in and copy right.
=--(0<SUMPRODUCT(($B$3:$B$12<>"")*($C$3:$C$12<>"")*(D3:D12=1)))
Then where you want to generate your list in a column without space and sorted in the order the appear in from left to right in the headings, use the following formula and copy down as required:
=IFERROR(INDEX($1:$1,AGGREGATE(15,6,COLUMN($D$2:$K$2)/$D$2:$K$2,ROW(A1))),"")
The above formula put in a blank value when no column heading applies are you have copied the formula down beyond the number of applicable columns.
The above formulas are based on the proof of concept image below. Adjust ranges to suit your needs.
Have you tried without the use of an array formula? I don't know how large the data actually is. But, this might be what you are looking for:
=IF(COUNTIFS($A:$A,"y",$B:$B,"x",C:C,1)>0,C1,"")
Assuming column A is "1st" and "H" is your last column at colunm J. Try pasting the formula at "K1" and drag it to your right until "S1".

Index/Match with Varied Offset

Running into some trouble performing an Index/Match where the offset rows could be spaced 1 row apart, 2 rows apart, or 3 rows apart. Below is an example of the setup:
Sheet1:
| A | B | C | D | E | F |
-------------------------------------------------
| | | | | Apple | |
-------------------------------------------------
| Ser1 | | | | | |
-------------------------------------------------
| | | | | Orange| |
-------------------------------------------------
| Ser2 | | Ser3 | | Ser4 | |
-------------------------------------------------
| Ser5 | | | | | |
Sheet2:
| A |
---------
| Ser1 |
---------
| Ser2 |
---------
| Ser3 |
---------
| Ser4 |
---------
| Ser5 |
I have a list of the serial numbers (ser1, ser2, etc) in another sheet, and I need to match values in Column E where the correct value is above the serial number by 1, 2, or 3 rows. As you can see, serial numbers could be in column A, C, or E.
Ex: Ser1 should match on Apple. Ser2, Ser3, ser4, and Ser5 should match on Orange.
I can't seem to figure out the correct Index/Match that work completely since the offset at the end of the formula is either + or - by a static row number.
Rough solution:
In your sheet Make a structure like this:
| A | Row | Lookup
---------
| Ser1 |
---------
| Ser2 |
---------
| Ser3 |
---------
| Ser4 |
---------
| Ser5 |
For column Row put:
=SUMPRODUCT((Sheet1!A$1$:E$5$=A2)*ROW(Sheet1!A$1$:E$5$))
this will calculate row in which serial number occures in your data range. Then you may put in Lookup column:
=LOOKUP(2,(1/(INDEX(Sheet1!$E$1:$E$5,1,1):INDEX(Sheet1!$E$1:$E$5,B2-1,1)<>"")),Sheet1!$E$1:$E$5)
This formula will lookup for last non-empty cell in column E (please refer here for more comments) in range that is above selected serial number.
This is a partial solution as for "Ser5" you will receive "Ser4". To overcome that issue you may perform additional Vlookup on achieved results.

Kind of group by in Excel without VBA

I need another transformation help in Excel
| A | B |
---| ----|--------|
1 | ID | Course |
2 | 1 | A1 |
3 | 1 | A2 |
4 | 2 | A1 |
5 | 3 | A2 |
I want to have a kind of group by, i.e.
| A | B | C |D | ...
---| ----|---------|---------|---------|----
1 | ID | Course1 | Course2 | Course3 | ...
2 | 1 | A1 | A2 | | ...
3 | 2 | A1 | | | ...
4 | 3 | A2 | | | ...
Any ideas? Is it possible without VBA macro?
I believe that the following link on removing duplicates from column would suit your needs (in your case you would do it horizontally).
http://www.get-digital-help.com/2009/03/30/how-to-extract-a-unique-list-and-the-duplicates-in-excel-from-one-column/
Per your reply to Robert, if you want to do it without VBA, try this... Select all cells in the first column. Copy and paste them into the first column of another worksheet. Use Excel's Remove Duplicates function on the pasted data. Then use INDEX functions in the columns to the right in order to pull the first, second, etc values matching that first column value.

Resources