Find cell address of value found in range - excel
tl;dr In Google Sheets/Excel, how do I find the address of a cell with a specified value within a specified range where value may be in any row or column?
My best guess is
=CELL("address",LOOKUP("My search value", $search:$range))
but it doesn't work. When it finds a value at all, it returns the rightmost column every time, rather than the column of the cell it found.
I have a sheet of pretty, formatted tables that represent various concepts. Each table consists of
| Title |
+------+------+-------+------+------+-------+------+------+-------+
| Sub | Prop | Name | Sub | Prop | Name | Sub | Prop | Name |
+------+------+-------+------+------+-------+------+------+-------+
| Sub prop | value | Sub prop | value | Sub prop | value |
+------+------+-------+------+------+-------+------+------+-------+
| data | data | data | data | data | data | data | data | data |
| data | data | data | data | data | data | data | data | data |
⋮
I have 8 such tables of variable height arranged in a grid within the sheet 3 tables wide and 3 tables tall except the last column which has only 2 tables--see image. These fill the range C2:AI78.
Now I have a table off to the right consisting in AK2:AO11 of
| Table title | Table title address | ... |
+---------------+-----------------------+-----+
| Table 1 Title | | ... |
| Table 2 Title | | ... |
⋮
| Table 8 Title | | ... |
I want to fill out the Table title address column. (Would it be easier to do this manually for all of 8 values? Absolutely. Did I need to in order to write this question? Yes. But using static values is not the StackOverflow way, now, is it?)
Based on very limited Excel/Google Sheets experience, I believe I need to use CELL() and LOOKUP() for this.
=CELL("address",LOOKUP($AK4, $C$2:$AI$78))
This retrieves the wrong value. For AL4 (looking for value Death Wave), LOOKUP($AK4, $C$2:$AI$78) should retrieve cell C2 but it finds AI2 instead.
| Max Levels |
+------------------+---------------+----+--+----+
| UW | Table Address | | | |
+------------------+---------------+----+--+----+
| Death Wave | $AI$3 | 3 | | 15 |
| Poison Swamp | $AI$30 | | | |
| Smart Missiles | $AI$56 | | | |
| Black Hole | #N/A | 1 | | |
| Inner Land Mines | $AI$3 | | | |
| Chain Lightning | #N/A | | | |
| Golden Tower | $AI$3 | | | |
| Chrono Field | #N/A | 25 | | |
The error messages for the #N/A columns is
Did not find value '<Table Title>' in LOOKUP evaluation.
My expected table is
| Max Levels |
+------------------+---------------+----+--+----+
| UW | Table Address | | | |
+------------------+---------------+----+--+----+
| Death Wave | $C$2 | 3 | | 15 |
| Poison Swamp | $C$28 | | | |
| Smart Missiles | $C$54 | | | |
| Black Hole | $O$2 | 1 | | |
| Inner Land Mines | $O$28 | | | |
| Chain Lightning | $O$54 | | | |
| Golden Tower | $AA$2 | | | |
| Chrono Field | $AA$39 | 25 | | |
try:
=INDEX(ADDRESS(
VLOOKUP(A2:A3, SPLIT(FLATTEN(D2:F4&""&ROW(D2:F4)), ""), 2, ),
VLOOKUP(A2:A3, SPLIT(FLATTEN(D2:F4&""&COLUMN(D2:F4)), ""), 2, ), 4))
or if you want to create jump links:
=INDEX(LAMBDA(x, HYPERLINK("#gid=1273961649&range="&x, x))(ADDRESS(
VLOOKUP(A2:A3, SPLIT(FLATTEN(D2:F4&""&ROW(D2:F4)), ""), 2, ),
VLOOKUP(A2:A3, SPLIT(FLATTEN(D2:F4&""&COLUMN(D2:F4)), ""), 2, ), 4)))
Try this:
=QUERY(
FLATTEN(
ARRAYFORMULA(
IF(
C:AI=$AK4,
ADDRESS(ROW(C:AI), COLUMN(C:AI)),
""
)
)
), "
SELECT
Col1
WHERE
Col1<>''
"
, 0)
Basically, cast all cells in the search range to addresses if they equal the search term. Then flatten that 2D range and filter out non-nulls.
Related
SUMIFS on Filtered Data
I am trying to do a SUMIFS in an Excel sheet where I need to take into consideration cells that are filtered. I can accomplish this with a pivot table, but the same source data is already being using in a handful of Bubble Charts which update on filtering anyways. The only reason for this other table to the data needs to be aggregated differently to get the desired chart out. I am trying to avoid Pivots so that once the user selects their filters in the Source Table (using Slicers) the destination table and accompanying chart just update. If I use a pivot table to handle this part the user will have to duplicate work by putting their parameters into the Slicers and the PivotTable. Row# in the real data is a unique identifier for each row. For filtering there is roughly 20 columns that could be filtered. I have seen that SUMPRODUCT can do this, but I cannot wrap my head around how to do it with my data set. Source Table Example +------+---------------+-------+-------+-------+---------+----------+ | Row# | Amount | Class |Channel| Other | Columns | ToFilter | +------+---------------+-------+-------+-------+---------+----------+ | 1 | $122,616.16 | 10 | A | Stuff | Stuff | Stuff | | 2 | $128,587.43 | 1 | B | Stuff | Stuff | Stuff | | 3 | $273,055.04 | 10 | C | Stuff | Stuff | Stuff | | 25 | $144,087.59 | 4 | A | Stuff | Stuff | Stuff | | 26 | $273,537.45 | 2 | A | Stuff | Stuff | Stuff | | 27 | $110,177.94 | 2 | B | Stuff | Stuff | Stuff | | 3674 | $455,133.20 | 2 | C | Stuff | Stuff | Stuff | +------+---------------+-------+-------+-------+---------+----------+ Destination Table Example +---------+---------------+---------------+--------+---------------+-----+---------------+ | Channel | 1 | 2 | 3 | 4 | ~ | 10 | +---------+---------------+---------------+--------+---------------+-----+---------------+ | A | $- | $273,537.45 | $- | $144,087.59 | ~ | $122,616.16 | | B | $128,587.43 | $110,177.94 | $- | $- | ~ | $- | | C | $- | $455,133.20 | $- | $- | ~ | $273,055.04 | +---------+---------------+---------------+--------+---------------+-----+---------------+
Assuming the source table is located at A1:G8, and the destination table is located at A10:K13 . Put '=IFERROR(INDEX($C$2:$C$8,MATCH(1,INDEX((B$10=$D$2:$D$8)*($A11=$E$2:$E$8),0,1),0)),"-")` in B11 and drag till the end. Idea : use multiple criteria index match & wrap it in iferror(). $ is used to lock the reference column/row. Ref : https://exceljet.net/formula/index-and-match-with-multiple-criteria Please share if it works/not. ( :
I want to count IF both condition are true Logically count by AND excel
I have two Columns both are categorical columns. Like Age_group and Engagement_category. And I want to get count no. of each engagement_category in each Age_group. This is like GROUP BY function in SQL. | Engagement_category | Age_group | |:-------------------:|:---------:| | Nearly Engaged | 21-26 | | Not Engaged | 31-36 | | Disengaged | 36-41 | | Nearly Engaged | 21-26 | | Engaged | 21-26 | | Engaged | 26-31 | I tried Excel COUNTIFS function but it is showing the count of each unique value in the criteria range that I have provided. Expected OUTPUT is something like this. | Age_group | Engaged | Nearly Engaged | Not Engagaged | Disengaged | |:---------:|:-------:|----------------|---------------|------------| | 21-26 | 1 | | | | | 26-31 | | | | | | 31-36 | | | | | | 36-41 | | | | | | 41-46 | | | | | | 46-51 | | | | | Thanks!
Use COUNTIFS function, see document: https://support.office.com/en-us/article/countifs-function-dda3dc6e-f74e-4aee-88bc-aa8c2a866842 Please try: =COUNTIFS(B:B, "21-26", A:A, "Engaged")
Try inserting a pivot table: Highlight the source data which is the 2-Column table including headers, go to Insert tab and click the Pivot Table button, set up the Rows, Columns and Values column as below: The key is to drag the Engagement_Category to both Columns and Values field.
Pivot, dynamic data source
I have a pivot chart which currently has the data source referring to my table. Every week I run my code and a new row of data is appended to the bottom of my table. The pivot does pick up this new data every week as it refers to the table, however, I want to take one less week each week So I have a years worth of data. So I want to include around rows. Is there anyway to adjust my table to only include the years worth of rows? Here is my sample data: +----------+------------------+-----------------+ | week | stack | overflow | +----------+------------------+-----------------+ | 12/20/17 | -142,335,432.00 | -41,641,109.88 | | 12/27/17 | -105,428,220.20 | -47,448,990.63 | | 1/3/18 | -88,520,154.56 | -24,858,774.97 | | 1/10/18 | -42,033,431.10 | 14,573,779.35 | | 1/17/18 | -66,101,748.16 | -8,670,735.22 | | 1/24/18 | -75,871,649.12 | -18,000,154.21 | | 1/31/18 | -77,027,686.63 | -11,784,198.64 | | 2/7/18 | -96,720,126.71 | -52,219,288.98 | | 2/14/18 | -119,118,554.60 | -34,743,350.28 | | 2/21/18 | -116,529,554.70 | -20,774,072.93 | | 2/28/18 | -86,871,998.53 | -25,993,521.20 | | 3/7/18 | -90,351,387.27 | -21,259,727.05 | | 3/14/18 | -77,968,076.28 | -51,609,924.29 | | 3/21/18 | -120,805,352.60 | -40,338,490.97 | | 3/28/18 | -92,247,583.62 | -14,525,648.04 | | 4/4/18 | -70,821,451.36 | -35,866,864.46 | | 4/11/18 | -82,694,486.66 | -59,009,729.82 | | 4/18/18 | -79,034,094.39 | -64,231,312.42 | | 4/25/18 | -63,415,815.16 | -28,612,265.37 | | 5/2/18 | -80,372,191.96 | -53,375,611.61 | | 5/9/18 | -72,619,415.73 | -50,642,469.19 | | 5/16/18 | -109,654,240.70 | -45,762,784.43 | | 5/23/18 | -100,407,366.50 | -39,577,966.11 | | 5/30/18 | -105,794,095.80 | -65,071,199.59 | | 6/6/18 | -83,630,201.98 | -60,981,969.88 | | 6/13/18 | -104,644,821.50 | -63,754,760.71 | | 6/20/18 | -75,229,424.33 | -55,803,681.24 | | 6/27/18 | -65,237,135.62 | -54,693,832.65 | | 7/4/18 | -60,025,672.33 | -44,367,918.60 | | 7/11/18 | -30,172,175.09 | -28,392,163.28 | | 7/18/18 | -20,687,864.39 | 24,300,285.63 | | 7/25/18 | -40,476,447.03 | 4,850,881.09 | | 8/1/18 | -31,211,625.05 | -67,887,918.30 | | 8/8/18 | -29,736,938.87 | -32,905,703.80 | | 8/15/18 | -74,934,647.91 | -65,611,884.73 | | 8/22/18 | -25,220,747.20 | -7,019,746.86 | | 8/29/18 | -24,608,552.13 | -8,065,633.97 | | 9/5/18 | -30,119,599.95 | -26,225,633.08 | | 9/12/18 | -29,836,379.12 | -10,045,560.95 | | 9/19/18 | -61,281,567.61 | -58,427,878.27 | | 9/26/18 | -47,418,209.59 | -33,451,409.22 | | 10/3/18 | -41,321,336.46 | -25,112,764.44 | | 10/10/18 | -1,241,932.51 | 21,814,274.35 | | 10/17/18 | -19,791,273.66 | -12,199,449.75 | | 10/24/18 | -20,501,406.84 | 1,225,387.11 | | 10/31/18 | -64,116,464.30 | -5,308,628.21 | | 11/7/18 | -83,657,672.02 | -19,922,992.91 | | 11/14/18 | -112,704,007.53 | -32,939,535.69 | | 11/21/18 | -71,969,954.54 | -51,335,709.79 | | 11/28/18 | -79,668,484.56 | -67,887,918.30 | | 12/5/18 | -44,134,343.99 | -32,905,703.80 | | 12/12/18 | -71,700,079.84 | -65,611,884.73 | | 12/19/18 | -82,238,011.30 | -74,725,620.20 | | 12/26/18 | -59,385,932.41 | -54,947,256.94 | | 1/2/19 | -42,717,830.26 | -31,110,199.14 | | 1/9/19 | -11,029,444.63 | 7,309,440.90 | +----------+------------------+-----------------+
Changing the source range for the pivot will be tricky as Excel does not allow non-contiguous cells to be used in pivot tables. Instead you can create the pivot by selecting entire column to account for all future entries. Then the pivot can be manipulated to show a changing range as shown in the code below. Hope that works for you. EDIT The code is updated below to include 50(can be changed) from the bottom. Sub MovingPivot() Dim ws As Worksheet Dim dtTop As Date Dim i As Integer, n As Long Const NumWeeks = 50 'Change this to set weeks range Set ws = ActiveSheet 'Set reference to your worksheet here 'reset the pivot filters ws.PivotTables("Table1").PivotFields("Date").ClearAllFilters 'remove blank values ws.PivotTables("Table1").PivotFields("Date").PivotItems("(blank)").Visible = False 'find the date entry in 50 places from bottom. i = 0 For n = ws.PivotTables("Table1").RowRange.Count To 1 Step -1 If i = NumWeeks Then dtTop = ws.PivotTables("Table1").RowRange.Cells(n).Value Exit For End If i = i + 1 Next n ws.PivotTables("Table1").PivotFields("Date").PivotFilters.Add2 Type:=xlAfterOrEqualTo, Value1:=Format(dtTop, "dd-mmm-yyyy") End Sub
If you want to continue using a Pivot Chart, you can use the time line slicer to include/exclude data. You'll need to adjust the time line or filter manually after the data has refreshed. Or write VBA to set the filters. A non-vba version that does not require slicers can also be achieved with a standard chart (not a pivot chart). Create named ranges with Offset functions that grab just the rows of data that you are interested in, then plug these range names into the standard chart. When new data is added to the table, the named ranges that feed the standard chart will also be updated. If you need a step by step, take a look at https://peltiertech.com/Excel/Charts/DynamicLast12.html
Filter filter criteria and then apply in countif statement in Excel
I have a table of filter criteria like this: +----------+----------+------+------+------+ | Category | SpecName | Spec | Pass | Fail | +----------+----------+------+------+------+ | A | S1 | 3 | | | | A | S2 | 4 | | | | B | S1 | 5 | | | | C | S1 | 2 | | | +----------+----------+------+------+------+ I have a table I want to apply the filter criteria to like this: +----------+----+----+ | Category | S1 | S2 | +----------+----+----+ | A | 5 | 3 | | B | 4 | | | A | 5 | 5 | | C | 2 | | | A | 2 | 6 | +----------+----+----+ I want to fill the Pass and Fail columns in the filter criteria table with a count of items in second table with values >= the corresponding spec, like so. +----------+----------+------+------+------+ | Category | SpecName | Spec | Pass | Fail | +----------+----------+------+------+------+ | A | S1 | 3 | 1 | 2 | | A | S2 | 4 | 1 | 2 | | B | S1 | 5 | 0 | 1 | | C | S1 | 2 | 1 | 0 | +----------+----------+------+------+------+ Here are steps for how I might do it in a scripting language: Filter first table to get all spec filter criteria for the Category on that row, as follows for the first row. +----------+----------+------+ | Category | SpecName | Spec | +----------+----------+------+ | A | S1 | 3 | | A | S2 | 4 | +----------+----------+------+ Copy table 2 to a variable iTable +----------+----+----+ | Category | S1 | S2 | +----------+----+----+ | A | 5 | 3 | | B | 4 | | | A | 5 | 5 | | C | 2 | | | A | 2 | 6 | +----------+----+----+ For each spec name: Find column in iTable with spec name Filter spec name column in iTable by spec After all filters applied, we would have: +----------+----+----+ | Category | S1 | S2 | +----------+----+----+ | A | 5 | 5 | +----------+----+----+ Then just count the rows in iTable and assign to the cell in Pass column of the criteria table Is this possible with Excel formulas? If not, does anyone know how to do it with VBA?
Looking at an alternative layout for you spec criteria. Expand you columns to suit your need. With each spec criteria being its own column life gets really easy. You just need to adjust your formula to match the number of criteria you have. Based on the table at the end for layout, place the following formula in D3 and copy down as required. =SUMPRODUCT(($G$2:$G$6=A3)*($H$2:$H$6>=B3)*($I$2:$I$6>=C3)) That will give you a count of passing all criteria. Its also a function that performs array like calcs. It could be repeated in the next column but in order to reduce dependency on array calculation and potentially speed things up depending on the amount of data to check, place the following in the top of the fail column and copy down as required: =COUNTIF($G$2:$G$6,A3)-D3 Basically it subtracts the passes from the total count. This assumes you can only have PASS and FAIL as options.
Microsoft Excel - Use a drop down list to extract data from another workbook
If i select an option from a drop down list, how do i then display data extracted from another workbook. So far, i have seen examples of showing single row data from another worksheet. But i have yet to see a method of extracting multiple rows and columns of data from a different workbook. Week 1.xls: A B C ------------------------------------------------- | SKU | Description | Vendor Style | ------------------------------------------------- | | | | | 000001 | Description 1 | CA0080-03E | | 000002 | Description 2 | EX1134-59D | | 000003 | Description 3 | EM0132-59A | | 000004 | Description 4 | EW8694-52D | | 000005 | Description 5 | FC0003-18D | | 000006 | Description 6 | EK2273-59E | Master.xls: A B C ------------------------------------------------- ________ _ | SKU | Description | Vendor Style | |________|>| <---Drop Down List ------------------------------------------------- | | | | | | | | | | | | | | | | | | | | | | | | If i choose, e.g. Week 1 in the drop down list. I want the data from Week 1.xls to fill in the table in Master.xls. If i choose, e.g. Week 2 in the drop down list. I want the data from Week 2.xls to fill in the table in Master.xls. Is this possible? I'm thinking vlookups may be involved here in order to point to each workbook. Thank you.