I am hung up on this iterative calculation in GS. I need an array formula to give me a basic TRUE or FALSE response based upon the result in the cell immediately above. I've created a sandbox chart here: https://drive.google.com/open?id=1YzC5mbxv4jDGnBn8HJ62ehBxMx1UGlNJczVVCm3Vjh4
Column A includes a checkbox next to each Category. Column B is a list of Category Names and each sub-entry. We're going to constantly add new sub-entries over time. When a user checks the box next to the Category, I want the Category name and all sub-entries to be labeled TRUE (as shown in column D). I have dragged this formula down in Column D, however, this is not a sustainable solution as our table will eventually contain about 6,500 categories each with 10-30 sub-entries. We need an array formula solution.
=ARRAYFORMULA(IF(ROW(A2:A) <= MAX(IF(NOT(ISBLANK(B2:B)), ROW(A2:A))),
VLOOKUP(ROW(A2:A), FILTER({ROW(A2:A), A2:A}, LEN(A2:A)), 2), ))
Related
I need a FILTER formula to get an output of the cells within the range of the two labels matching the conditions from the two drop-down lists.
For example, given the below sheet, I need the output to be what's highlighted, given the two conditions from the drop-down lists:
I also need to be able to add more date rows, expanding downward.
I've tried using QUERY:
=TRANSPOSE(QUERY(Accounts!B2:F, "SELECT * WHERE B="""&B2&""" ",1))
This only gives me the row of contents (apple, carrot, cake, steak, soda).
Here you can find my solution:
https://docs.google.com/spreadsheets/d/1cWBLLmJx6mTlYrvPRvRE_y9NpBOJj_ILBgXmoB9suv4/copy
Note that when you merge cells, the value is only in the top one or the leftmost one. So if you have multiple rows for each data, you should multiplicate these cells.
I make additional column for this - first date I just copy and below it I insert a formula: (in H5)
=if(isblank(A5),H4,A5) - it says - if cell in column A is empty, take value from above, but if you find something there, put it here. Then I copy this formula down the sheet.
Then it gets easier.
To filter with data validation you have to first find right column using formulas INDEX and MATCH and then filter it against data values in additional column.
Does it work for you?
I'm not a VBA coder, and I would prefer an excel formula if possible, the easiest solution will be the best one.
Test workbook screenshot
As you can see, I have plenty of columns, which are filterable.
I am attempting to retrieve an average of Column L, but I want the data to be calculated for the correct month in G3:R3.
The resulting calculation needs to be recalculated when filtered, between customers, sites, status, job type etc.
I am referencing the resulting cells in another sheet, which gives an idea of trends I can glance at, as such filtering by month in each sheet, is not an option.
=AVERAGE(IF(MONTH(E9:E1833)=1,(J9:J1833)))
This one does not update with the filtered data.
=SUM(IF(MONTH(E9:E1833)=1,J9:J1833,0)) /SUM(IF(MONTH(E9:E1833)=1,1))
This one does not update with the filtered data.
I have tried 5 different SUBTOTAL formulas, some with OFFSET, none of these produce the same result I get when checking manually.
Each worksheet has over 1,500 hundred rows, the largest is 29148 rows. The data goes back as far as 2005.
Please can someone help me find a solution?
One possible solution is to create a helper column which returns 1 if the row is visible and returns 0 if the row is invisible (or blank). This allows a bit more freedom in your formulas.
For example, if you want to create a helper column in column X, type this into cell X9 and drag down:
= SUBTOTAL(103,A9)
Now you can create a custom average formula, for example:
= SUMPRODUCT((MONTH(E9:E1833)=1)*(X9:X1833)*(J9:J1833))/
SUMPRODUCT((MONTH(E9:E1833)=1)*(X9:X1833))
Not exactly pretty but it gets the job done. (Note this is an array formula, so you must press Ctrl+Shift+Enter on your keyboard instead of just Enter after typing this formula.)
With even more helper columns you could avoid SUMPRODUCT altogether and just accomplish this by doing a single AVERAGEIFS.
For example if you type into cell Y9 and drag down:
= MONTH(E9)
Then your formula could be:
= AVERAGEIFS(J9:J1833,X9:X1833,1,Y9:Y1833,1)
There isn't a clean way to do this without at least one helper function (if you want to avoid VBA).
I am trying to make a list which is partially automated by vlookup and the user complete the values (from a list) that Vlookup didn't find.
after the list is completed, the values are copied to other Sheet to save the data for analysis.
for example: column A is business names ("McBurger"), Column B is category ("Food") each category is a defined name, and column C is sub-category ("Junk").
Now, Column B (category) has Vlookup in the cell, to find (from other sheet) if the "Mcburger" was already defined as "Food". Column C also have Vlookup in the cell, to find (from the other sheet) if the "Mcburger" was already defined as "Junk" in the subcategory.
If vlookup find the match, it complete the list automatically, if not...the list stays empty and the user need to complete the category and subcategory with dynamic range from a list.
Column C (subcategory) is a dynamic range of column B(category)
from what I've tried, when column B (category) is empty, then trying to write the dynamic range in column C, gives error: Data validation in C1 =indirect(B1) because it cannot direct to a blank....
How can i create a list that part of the data that was previously filled, is pulled to the row, and the rest is manually entered by the user.
Appreciate your help in any direction to solve it, not necessarily in the way i describe above.
Thank you !
In gspread, is it possible to get the last row or cell number that is filled?
The API reference page doesn't seem to help.
Gspread has "row_count", but I am not sure it returns all rows in a spreadsheet, or just the filled ones. If that doesn't help, there is a slightly less direct, but completely functional way to do it:
1.) let's assume your data is in column A, and it has been filled in consecutively row by row (i.e. no skipped rows)
2.) in another free cell in your spreadsheet--let's assume cell B1--use the native Google Sheets function COUNTA, which will count the number of values in a dataset, and specify column A as the target, i.e. "=COUNTA(A:A)"
3.) now just request the value of cell B1 with gspread's acell, i.e. "last_row_updated = myWorksheet.acell("B1").value"
You can use the following code, taken from this answer to this similar question:
def last_filled_row(worksheet):
str_list = list(filter(None, worksheet.col_values(1)))
return len(str_list)
I'm new to Sharepoint 2010 with what I would call a highschool freshman level of coding experience, though I can generally stumble and tinker my way through. I don't currently have access to Sharepoint designer, but from the searching I've done so far, it may required. Still I'm hoping to find an OOTB solution to the problem below.
I have been tasked with building a incident resolution tracking sheet on Sharepoint. My boss is very concerned with being audited by legal, and has some very specific requirements about required information. Column A contains a drop down list of 5 choices that indicate the Final Solution. Column B Contains a drop down list with 4 choices that indicate the Initial Problem. Based on The selections in A and B, different Columns in C-X are required to be blank, not blank, or contain specific entries. The only way I can find to do this is to create a list validation containing a nested if for each combination of A and B resulting in 20 nested ifs. However sharepoint is limited to 7 nested ifs, so I'm looking for any possible solutions.
*This List will primarily be accessed in Datasheet view, so "HTML in calculated column" type solutions are not viable.
You can use calculated columns to break up the validation formula into more manageable chunks.
Let's start with a simple example.
Condition 1: If the initial problem was that the user's computer was too slow and the final solution was restarting the computer, you need to fill in the [C] column.
Condition 2: If the initial problem was that the user was on fire and the final solution was dousing them with water, you need to fill in the [D] column.
You could perform that list validation all in one formula, as below:
=IF(
AND([A]="Restarted Computer",[B]="Computer is slow"),
NOT(ISBLANK([C])),
IF(
AND([A]="Doused with water",[B]="User is on fire"),
NOT(ISBLANK([D]),
TRUE
)
)
But that's long and ugly (especially when you condense it to one line).
Instead, you could add two calculated columns, one for each condition you want to check. For the sake of this example, let's say you add a column called C_is_valid and a column called D_is_valid:
C_is_valid calculated column formula:
=IF(AND([A]="Restarted Computer",[B]="Computer is slow"),NOT(ISBLANK([C])),TRUE)
D_is_valid calculated column formula:
IF(AND([A]="Doused with water",[B]="User is on fire"),NOT(ISBLANK([D]),TRUE)
Updated validation formula:
=AND([C_is_valid],[D_is_valid])
It's easy to see how this can simplify even a very complex set of validation conditions...
=AND(C_is_valid,AND(D_is_valid,AND(E_is_valid,AND(F_is_valid,AND(G_is_valid,AND(H_is_valid,I_is_valid)))))
But even that could be simplified by consolidating some of those AND()s into multiple calculated columns, so that your final validation formula could be as simple as:
=AND([First set of conditions is valid],[Second set of conditions is valid])