Adding row to a table without messing Arrayformula - google-sheets

I am looking for some workaround for my Google Sheets I share with my co-workers.
I have a data set in Sheet1 (col's A to E), which contains data including empty rows. By using Arrayformula I am pulling data from Sheet1 to Sheet2, only if they meet specific conditions (A="1" and B="DFAS"). Then I apply filter to hide empty rows.
Here comes my problem: next to data pulled by Arrayformula I want to be able to input data (in col's F and G) which correspnds to specific rows from Sheet1, and it has to stay there. The problem is that if I add new rows in Sheet1 the result of Arrayformula shifts but col's F and G in Sheet2 stays as they were, and it all gets messed up.
Do you have any idea how to work around it?
I am sharing the google sheets file: https://docs.google.com/spreadsheets/d/1MvuEDqidLPKfSHATYQ68X9pJFhixTg9TJrq4F3crgUs/edit?usp=sharing

Related

IMPORTRANGE in Google Sheets preserving the structure of the destination sheet

Suppose that we have the following Google Sheet (called File_1):
And we import all the columns (A to C) via IMPORTRANGE("https://docs.google.com/spreadsheets/...", "Sheet1!A:C") into another sheet (called File_2), which also contains an additional column New_col with some data in it:
Now, suppose that the source sheet changes like this, i.e., a new row is added in-between the existing rows:
The destination sheet will become like this, in essence keeping Column D in its previous state and 'breaking' the relation of the 'test' value in cell D2 with the A1-B1-C1 row.
What I would like to have instead is the following destination sheet:
Is there a way to do that from within Google Sheets?
You are describing how formula results get misaligned with manually entered data. There is no turn-key solution to work around the issue. Lance has given a thorough treatment of the row misalignment issue and how it can be dealt with in some cases.

How to use CountIf in Google Sheets that only counts cells if there is content in another cell?

I need some help with a CountIf type formula in Google Sheets.
I have a large spreadsheet of a consolidated NHL schedule where I am going to enter stats that I care about. In a separate spreadsheet I am going to have averages for the stats I care about.
I want to have a formula that uses the Column A of Sheet2 to count the games in Sheet1 that have content in the other cells of Sheet1 (so, games that have been played).
If this works then Column B of Sheet2 will have the correct # of games played which is all the cells that have content/stats next to the teams name in Sheet1 so that I dont have to manually update that part and then the count of games played can go straight to the average formula.
The pictures are manually entered but just showing that since the Blackhawks have content next to their name in Sheet1, I would want Sheet2 Column B to read 1 based on a formula.
Thanks!!!
Sheet1
Sheet2
I would just do a COUNTA on a column (so that counts the rows in a specific column that are not blank), on a filtered table that match the team names:
So:
=COUNTA(FILTER(Sheet1!D:D,Sheet1!B:B=A3))

ArrayFormula to automatically calculate specifics columns

I want an array formula to use with Google Forms data to automatically calculate running metrics on my data.
In this case, in column H, M, R and S I want it to auto-calculate whenever new responses come in. Columns H, M and R are ok except for column S.
I'm trying to use this formula below for the sum of each row in these specific columns H, M and R results in a grand total at the column S but isn't working.
=ARRAYFORMULA(SE(A2:A="";; MATRIZ.MULT(H2:H+M2:M+R2:R; TRANSPOR(SINAL(COL(H2:H+M2:M+R2:R))))))
What I'm doing wrong?
My Google Sheet:
https://docs.google.com/spreadsheets/d/1c6ZLnonx8BZ_KV0elW5xiuyQZPi86LOIUzdyVbBHAXQ/edit?usp=sharing
You have this at the beginning of your formula:
SE(A2:A=""
But A2:A is blank for all rows. So you are getting blanks in Column S, because that is what you instructed the formula to do.
Since you know that you will have something in R2:R of every active row, just change that segment of your formula to the following:
SE(R2:R=""
However, you are adding formulas directly to the form intake sheet. This is never a good idea; it can cause many problems. The professional standard is to leave form intake sheets alone, with no additional formulas, columns, conditional formatting, etc. Instead, use a separate sheet to bring over results from the form intake sheet and then process/add in that second sheet.

Google Sheet consolidate data

I'm trying to consolidate the data from different sheets in the same File for Google Sheets. However, I get the following error:
Error
Array result was not expanded because it would override data in A3
Basically, I wanted it to get all the values within each sheet range and insert it into one sheet because re-entering the same data twice is very time consuming
Here is what I have tried that causes the error:
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/1iS3hBtbkAyi5ql9V-6YwerQWXKx2ED8SR5bR3PY3Bm4/edit#gid=0", "Sheet2!A2:B30")
When you get those kind of errors is because you are importing a matiz of information that if shown will override data that you already have in your sheet.
What I recommend to solve this usually is to create a new sheet and make the import in a blank new sheet but if you are trying to consolidate 2 columns into 4(2 of each duplicating the data) make sure that you are giving the correct space between each other, for example I guess you will want to put the first import in cell A1 and the second in C1. And if you are putting just one IMPORTRANGE formula in a sheet with data already there just make sure it won't overlap.
This means your problem is basically information overlapped when
importing using IMPORTRANGE formula
Basic things to try to resolve the issue or find out a path to do it can be:
select cell A3 and push delete button.
Or
create a new sheet and try the formula again with an empty sheet.
delete everything you have in cell A3 or add a row between A2 and A3
or use this formula:
=IMPORTRANGE("1iS3hBtbkAyi5ql9V-6YwerQWXKx2ED8SR5bR3PY3Bm4", "Sheet3!A2:B2")

Setting formula range from first to last populated cell in a column?

For a league I run we keep track of games played and w/l/t and calculate that into a ranking score. The player name is listed in column U and the ranking score in column AD of a fixed table. I then use an array formula to list the players in ranking order in column E (then vlookup to pull in other stats based on the value in E for that row). Specifically I use this formula in column E:
=ARRAY_CONSTRAIN(ARRAYFORMULA(INDEX($U$4:$U$153,MATCH(LARGE($AD$4:$AD$153-ROW($AD$4:$AD$153)/COUNT($AD$4:$AD$153),ROW(E72)-ROW(E$4)+1),$AD$4:$AD$153-ROW($AD$4:$AD$153)/COUNT($AD$4:$AD$153),0))), 1, 1)
I need to be able to add players to the table in U:AD without having to edit the formula every time, i.e. from $U4:$U153 and $AD$4:$AD$153 to $U4:$U154 and $AD$4:$AD$154 in all the various places in the formula then copy the new formula all the way down.
Is there a way that I could define the range as $U$4:$U(last populated row) and the same for column AD in the above formula?
I eventually be using this in both Excel and Google Sheets so I would really like to avoid scripting. First I'm looking to solve this for Google Sheets.
Here is a copy of the sheet I am working on.
You could use INDEX and COUNTA
Instead of $U4$U153,
$U4:INDEX(U4:U,COUNTA(A4:A))
The COUNTA portion will give the number of populated rows and feed it into INDEX to give $U4:$U153
The answer for the Google sheet that you shared.
skip to the end for the simple solution
I used the indirect method by entering a formula in E1 that counts the AD column for player stats and adds 3 to get the last row. (I was going create the full range AD4:AD?? but you also have U4:U73 in the formula)
=counta(AD4:AD)+3
I then changed your formula use indirect, indirect("$AD$4:AD"&E$1), to reference the last row number in cell E1 to create the required range.
=iferror(ARRAY_CONSTRAIN(ARRAYFORMULA(INDEX(indirect("$U$4:U"&E$1),MATCH(LARGE(indirect("$AD$4:AD"&E$1)-ROW(indirect("$AD$4:AD"&E$1))/COUNT(indirect("$AD$4:$AD"&E$1)),ROW(E4)-ROW(E$4)+1),indirect("$AD$4:$AD"&E$1)-ROW(indirect("$AD$4:$AD"&E$1))/COUNT(indirect("$AD$4:AD"&E$1)),0))), 1, 1),"")
I discovered by accident that if you remove the ARRAY_CONSTRAIN from your formula and change U4:U73 to U4:AC73 then the formula will populate the scores to the right of your formula where you currently have vlookups. I put an example of this in E4 but note that you will have to delete the vlookup formulas if you want to fill the formula down otherwise it will show REF
I also added iferror so that the formula can be copied to the same row as the end of the "open slots" in column A without showing errors.
Also, I got to this point and was thinking that since you're using Google Sheets, a better way to do this could be to use the QUERY function to pull the data and also sort it using ORDER BY with a single formula in cell E4.
I've not really used the QUERY function but maybe it's time to learn.
EDIT
Turns out it doesn't take much learning
=QUERY(U4:AD,"SELECT U,V,W,X,Y,Z,AA,AB,AC ORDER BY AD DESC")
Put the formula above in cell E4 and delete everything beneath and scores to the right and you're done. you'll notice that there is no indirect because Google understands that you don't want the blank rows.
https://docs.google.com/spreadsheets/d/16IclEmKwDFdInIAZhH2vt-tLJ5pbwX06jv9xrUXwhnY/edit?usp=sharing
Why are you using $ signs around U4:U153,remove $ signs for rows that will give you flexibility while keeping columns fixed.As your drag the formula,the data array will append the newly filled cells or you can create table using Ctrl+T that will automatically expand as you keeping adding data.

Resources