Is there calculation time limit in Google Sheet? - google-sheets

I'm using Array Formula in Google Sheet to calculate some values.
Each row has around 200 fields (from Google form).
Using the array formula, I've multiplied each column to a cell in another sheet (200 fields there).
The response has the no of units 1, 2, 3, ... and another sheet has price 5, 10, 100.
So, each unit is being calculated by its price to get a total value.
=ArrayFormula(IF(ISBLANK('Form Responses 1'!T2:T),0,'Form Responses 1'!T2:T * Data!T2))
Ok, then I've to find the total sum of all these results, for that, I'm using MMULT.
=MMULT(T2:EV100,TRANSPOSE(ARRAYFORMULA(COLUMN(T2:EV100)^0)))
Now, the actual problem is that the ArrayFormula is only showing the result (the value 0) to 104 rows only.
Is there a limitation on the amount of calculation? Or the rows will increase over time?
I've tried ArrayFormula in an isolated sheet, and it goes to the bottom.

Poor me.
I just noticed that the sheet attached with Google form had only 103 rows, that is why the arrayFormula was only showing results till 103 rows.
I added 1000 more rows and it expanded. But it is slower than before, I guess the calculations are being performed in my browser.

Related

Iterate over list in a cell to countif it meets a criteria in another in Google Sheets

I'm wondering if there's a way to iterate over a list of values in a single cell, to then look up the value of each item in that last, and then to count how many times it occurs in another list. I would also be ok if we just put a list of the qualifying IDs in this cell. Here's a link to a demo of the data (https://docs.google.com/spreadsheets/d/1aoFIzQ9gjNYLQqpWO_6UVjn_JO9aWFSNOMyrT1VPK-0/edit?usp=sharing).
As an example, I would want to know how many of the IDs in cell B9 use "software" tools (J3:J). I would then place the count of this in D9. So, D9 should either say "4" or have the following IDs: 28, 72, 189, 534. E9 would say "2" or have following IDs: 141, 856, and F9 would say, "1" or have the ID: 664.
Is there a simple way of doing this?
paste in D9 and drag to the right:
=TEXTJOIN(",", 1, IFNA(FILTER($H:$H, $J:$J=D$2,
MATCH($H:$H, FLATTEN(SPLIT($B9, ",")), 0))))
and in C9:
=LEN(REGEXREPLACE(""&TEXTJOIN(",", 1, $D9:$F9), "[0-9]+", ))+1
If you would like an array solution (i.e., one formula per column that produces all results for all rows in that column), try this:
1.) For best performance, regardless of approach, you should keep each sheet trimmed to only the max number of columns and rows you anticipate ever needing. So I recommend that you first select and delete Rows 201 to 1001, and delete Column L to X (or delete any rows and columns beyond the maximum number you need in your real sheet). The formula proposed below will work whether you take this step or not; but you'll improve performance speed if you take this step, because every array formula must process all rows its provided, whether blank or not.
2.) Select and delete everything from D3:F (i.e., D3 as the upper left of the range and the last row in F as the bottom right of the range).
3.) Place the following formula into cell D3:
=ArrayFormula(MMULT(REGEXMATCH(IFERROR(LOWER(VLOOKUP(ARRAY_CONSTRAIN(SPLIT($B3:$B&REPT(",0",100),",",1),ROWS($B3:$B),100),$H:$J,3,FALSE))),LOWER(D2))*1,SEQUENCE(100,1,1,0)))
You will immediately see results fill in for all rows in Column D.
4.) Drag this formula to the right, into cells E3 and F3. Results for those columns will fill in accordingly for all rows.
The formula allows for up 100 comma-separated values in each cell of B3:B. However, if you think you won't ever have more than, say, 50, change the three instances of 100 in the formula to 50 (or to just above whatever you think the maximum number of values per cell will ever be). The closer you can get to that max, the more optimal the processing time will be.
In addition...
If you'd like to replace your Col-C values with a single array formula:
1.) Delete everything from C3:C.
2.) Place the following variation of your original Col-C formula in cell C3:
=ArrayFormula(IF(A3:A="",,LEN(B3:B)-LEN(SUBSTITUTE(B3:B,",",""))+1))

how can i make google sheet itrate over columns

I have a sheet like this how can make a cell in front of x under the sum column get the sum of the x count column and y get the sum y count column
of course, I use sum function on both but the issue I face is how to make the z ,x1,y1,z1 the same I try to fill it down but as you see in the picture it is wrong
how can I do it for 100 row ?
This formula seems to give the result you want:
={"Header","Sum";
ARRAY_CONSTRAIN(TRANSPOSE(D1:1),COUNTA(D1:1),1),
ARRAYFORMULA(MMULT(TRANSPOSE(N(D2:AJ10)),{SEQUENCE(ROWS(D2:AJ10),1,1,0)}))}
It places the two column labels in the first row, then transposes all of the header values into a vertical column in A2:A, but prevents any blank rows by using ARRAY_CONSTRAIN, and a check for the number of header values to transpose.
The main result is the Sums, calculated using MMULT. You need to enter the range of the cells you are going to sum over - I've used D2:AJ10, entered twice in the formula. MMULT can slow down performance the more cells it has to review, but this seemed fine for 33 columns by 9 rows. Test it out in your actual sheet, and report back if any issues.
REFERENCES:
ARRAY_CONSTRAIN To limit size of an array result, by # rows and # columns
MMULT The matrix product of two matrices. Can be used for summing, if one matrix is one dimensional (eg. a row or a column) with values of just 1.

Count number of times values increase in range - Google Sheets

how are you? I'm just not sure what to do here, but I surely can use your help!
I have a series of values in a row range, such as in the following:
1000 2000 1500 2100 3200
I need to figure out a google sheets formula to put in the 6th cell of this row that counts the number of times the value of any cell is greater than the one to the left of it. In this example, my result should be 3.
Is there any way that this can be done? In Excel or Google Sheets, either is great to learn.
Thank you
You can also try the following formula
=COUNTIF(QUERY({{"";TRANSPOSE(B2:F2)},{TRANSPOSE(B2:F2);""}},
"select Col1-Col2 offset 1 label Col1-Col2 ''",0), "<0")
Assuming you have data in A2:E, place the following in F2:
=ArrayFormula(IF(A2:A="",,MMULT(IF(B2:E>A2:D,1,0),SEQUENCE(4,1,1,0))))
Since there are only four columns that might be greater than others (B:E), you can structure it this way. MMULT is hard to explain, but it essentially multiplies everything in each row of one matrix (range) by everything in another range and then adds them. SEQUENCE just forms a column of four 1's by which to multiply then add together everything in each row of the first range. Since anything times 1 is the original number, this just serves to to row-by-row addition.
This formula will process as many rows as have data in A2:E.
try in 7th column on row 2:
=ARRAYFORMULA(MMULT(IF(A2:E4<B2:F4, 1, 0), {1;1;1;1;1}^0))

ArrayFormula Google Sheets - remove high and low from average

I'm trying to use an arrayformula to calculate the average across 7 columns while removing the max and min number from those columns. The tricky part is there is no preset limit on how may cell will be filled, each time its different.
I have the formula to calculate the average complete:
=ARRAYFORMULA(IF(ISBLANK($A$2:$A),"",IF($J$2:$J="Granted",($AO$2:$AO+$AP$2:$AP+$AQ$2:$AQ+$AR$2:$AR+$AS$2:$AS+AT2:AT)/6,0)))
I've tried using the Trimmean function but it isn't working with the array formula, =Trimmean(AO2:AU2,0.33) any suggestions on how to get it to work?
Assuming the values in the cells that you want to ignore are empty, you want :
Average of all cells that are filled and not maximum or minimum
Which is
Sum of all cells that are filled and not maximum or minimum / (number of filled cells - 2)
Thus
=(sum(YourRange)-max(YourRange)-min(YourRange))/(count(YourRange)-2)
should give you what you want

Google Sheets CountIFS

I have a Google spreadsheet that I am trying to count scores of 1 to 5. I can do a COUNTIF to count the number of 5s, 4s, 3s, etc.
I need to count the the values separately depending if the value of the first row begins with a space or not. The COUNTIFS formula will not work, since the arrays are the same size.
My formulas are:
With space:
=COUNTIFS(B1:F1,=" *",B2:F5,"=5")
Without space:
=COUNTIFS(B1:F1,="<> ",B2:F5,"=5")
Here is a sample of my spreadsheet: https://docs.google.com/spreadsheets/d/1xmEpTgBKDh-ZuLuxijbqAwx4nRKrThv5LnTI5TgP5XI/edit?usp=sharing
I have several forms and the number of cells that begin with a space varies per sheet and I rather create a formula that works for all of them.
Is there another option I can use other than COUNTIFS?
Try something like
=countif(filter(B2:F5, regexmatch(B1:F1, "^\s")), "=4")
and see if that works?
And for the header rows that do not start with a space
=countif(filter(B2:F5, left(B1:F1, 1)<>" "), "=3")

Resources