I have a sheet that is attached to a form on my website. It's using gravity forms for wordpress. Not sure what changed, but now every time a new submission comes in from the form it makes the formulas change on other sheets. I've done the $ signs in the formulas but it's still changing. The formulas are based off of the response sheet capturing all the answers.
How can I lock the formulas so they don't change every time a new response comes in? I want it always pulling from A2, even when new responses come in. I've seen the "Indirect" formula suggestion but my formulas are already complex. Here's one:
=ArrayFormula(vlookup(transpose(split(query(rept(row(Sheet1!$A$2:A)&" ",Sheet1!$B$2:B),,9^9)," ")),ArrayFormula({row(Sheet1!$A$2:A),Sheet1!$A$2:R}),{2,19},0))
This formula works perfectly, and once I change it all back to A2 after the first response comes in it works fine... but I make a new sheet with every form and I also reset the sheets when I turn forms on and off. I would like to not have to change it every time a first response comes in for every sheet. Any suggestions?
use in row 1:
={"header"; INDEX(IFNA(VLOOKUP(TRANSPOSE(SPLIT(
QUERY(REPT(ROW(Sheet1!A2:A)&"", Sheet1!B2:B),,9^9), " ")),
{ROW(Sheet1!A2:A), Sheet1!A2:R}, {2,19}, ))}
Form responses are always inserted in newly created rows that cannot be referenced directly in advance.
The usual recipe to work around this is to dynamically copy form responses to another sheet where the values can be referenced normally. To do this, choose Insert > New sheet and place this formula in cell A1 of the new sheet:
={ 'Form Responses 1'!A1:F }
...where F corresponds with the last form responses column that you want to copy.
Then modify your formulas to reference the new sheet instead of the form responses sheet.
Related
I want to tweak an Array Formula that I'm trying to use to transpose a set of responses from a Google Form into a single 'list' in a cell in the linked Google Sheet.
Here is a simplified mock-up of the Google Sheet: https://docs.google.com/spreadsheets/d/1BKgjGK2RbXC5FkCgBOU53dLEb3fDeQADujenrqRgnT0/edit?usp=sharing
As you can see, I have a working Array Formula 'hidden' in the header for Column A, which takes the content from columns B:K in each row and transposes them with line breaks to make a nice neat list in the first cell at the start of each row (A2, A3, A4, etc.) Here is the Array Formula for ease of reference:
=ARRAYFORMULA({"Points to Develop";
transpose(query(transpose ($B$2:$B&CHAR(10)&$C$2:$C&CHAR(10)&$D$2:$D&CHAR(10)&$E$2:$E&CHAR(10)&$F$2:$F&CHAR(10)&$G$2:$G&CHAR(10)&$H$2:$H&CHAR(10)&$I$2:$I&CHAR(10)&$J$2:$J&CHAR(10)&$K$2:$K)
))})
The problem I'm having is that the formula stops working as soon as a new Google Form is submitted, as the new row of responses arrives at the top and 'pushes the formula down'/throws everything out of alignment, when all I want is for it to stay in place and run automatically every time a Form is submitted. As you can probably gauge by my limited technical terminology, I'm very much a novice at this!
How can I fix this formula, or is there a simpler or better alternative that will achieve the same results?
As often happens in life, the nature of the problem turned out to be the source of the solution. Here’s a condensed version of my thoughts as I slowly found my way to an answer (you can almost hear the hamster wheels turning in my head!):
The problem with formulas in a Google Sheet linked to a Google Form is that each new entry/submission from the form always arrives in Row 2 …
In fact, the only thing that stays ‘in place’ in the Google Sheet is the Header Row/Row 1 …
So, rather than using a formula that refers to a ‘Row 2’ that will become ‘Row 3/4/5/etc.’ as new Google Forms are submitted, I should use a formula that always refers to Row 1, that is, by using OFFSET
The obvious (if inelegant) formula that resulted from this is [I've also placed this in the final column in the Google Sheet that I linked to in my original question]:
= ARRAYFORMULA({"Points to Develop [Working OFFSET Formula]"; transpose(query(transpose(OFFSET(A1:A,1,1)&CHAR(10)&OFFSET(A1:A,1,2)&CHAR(10)&OFFSET(A1:A,1,3)&CHAR(10)&OFFSET(A1:A,1,4)&CHAR(10)&OFFSET(A1:A,1,5)&CHAR(10)&OFFSET(A1:A,1,6)&CHAR(10)&OFFSET(A1:A,1,7)&CHAR(10)&OFFSET(A1:A,1,8)&CHAR(10)&OFFSET(A1:A,1,9)&CHAR(10)&OFFSET(A1:A,1,10)))) })
I am sure that there are neater ways of getting to the same result, but this is one that works for me … and is within my levels of comprehension, so I can fine-tune and fix it as needed.
I'm building a spreadsheet to track my macronutrients and calories. I made a google form for inputting information and it populates a "responses" sheet on google sheets. I made a different sheet within the same spreadsheet to perform all the calculation and generate graphs.
But every time I enter a new response into the form, it creates a new row and changes all the cell references in the calculations sheet. For example, I reference cell A2 from the responses
='Form Responses'!A2
and when I actually fill out the form and it populates, A2 in the responses sheet is filled in but the reference in my calculations sheet has been changed to A3.
='Form Responses'!A3
I tried using $ but it did the same thing, automatically changes the cell that I referenced.
Any way to have my calcuations sheet reference the newly created rows automatically?
In a new tab use for example, = {'Form Responses'! A: Z} and use this data to do your calculations and you will have no problems!
Solution
To avoid the row value to change reference when adding a new response, you will need to add the $ next to the number instead of next to the column value (A):
='Form Responses'!A$2
Moreover, an easy way to reference your whole column is to reference a range instead such as:
='Form Responses'!A:A
And then just drag it through your column. If you want it to be more specific (select the range you want):
='Form Responses'!A2:A999
I hope this has helped you. Let me know if you need anything else or if you did not understood something. :)
I am using a Google Form to collect data into a Google Sheet, I made another sheet and want to fetch data to this new sheet when a new form is submitted.
Used =QUERY('Form responses 1'!A228) to get data from the Form responses 1 sheet and it works good. I dragged the cell and the formula get copied correctly to the lower cells like =QUERY('Form responses 1'!A229) =QUERY('Form responses 1'!A230) and so on.
But now when a form is submitted nothing gets updated in the new sheet, I noticed the cell address has somehow skipped a place and when I do a new drag and drop from top column everything works fine. The cell references are copied correctly so that it should work on new form submit, but as soon a form is submitted the next row formula gets omitted, like the row got deleted in new sheet. i.e. After form submit if the current row formula is =QUERY('Form responses 1'!A228) and net row formula WAS =QUERY('Form responses 1'!A229) it gets changed to =QUERY('Form responses 1'!A330) and no row gets updated in the new sheet.
Try just ={'Form responses 1'!A228:A} . This is a formula that will bring in every cell from A228 to the bottom of the sheet. This way you do not have to keep dragging down formulas.
Every time a new row of answers is added the formula on another shit will skip the already referenced rows where the new data has just been added.
If i manually drag it down across a number of fields it updates properly and shows the correct number. However if i already have it in those fields when an answer from my google form is entered instead of it updating to show the correct number it stays as 'False' , as it would do when referencing a blank field, and the field reference goes up by one skipping the field it was already referencing.
I've tried absolute referencing with "$b2" and moved it to different positions however it still skips the row it was meant to be referencing. Any idea on how to stop this. Code is below-
=IF('Form Responses 1'!B$16 = "dog","1",IF('Form Responses 1'!B$16="Cat","2",IF('Form Responses 1'!B$16="Frog","3",IF('Form Responses 1'!B$16="Bird","4"))))
Essentially there are three columns, Timestamp, Pick a word and email. Those are populated automatically by the google form in to the sheet "Form Responses 1". The column i'm working with is B which is Pick a word. If that cell equals a certain word the corresponding number is outputted in the field with the formula in it. When new data is entered in to B16 for example on Form Responses the formula on the other sheet will change B16 to B17 and skip that row.
Any help is appreciated and I've got a fair understanding of the formulas so don't worry about going in to too much detail :)
Just answered a similar question here.
The workaround is to use INDIRECT() with ROW()
=IF(INDIRECT("'Form Responses 1'!B"&Row(A16)) = "dog","1",IF(INDIRECT("'Form Responses 1'!B"&Row(A16))="Cat","2",IF(INDIRECT("'Form Responses 1'!B"&Row(A16))="Frog","3",IF(INDIRECT("'Form Responses 1'!B"&Row(A16))="Bird","4"))))
Or
=IF(INDIRECT("'Form Responses 1'!B"&Row(A1)+X) = "dog","1",IF(INDIRECT("'Form Responses 1'!B"&Row(A1)+X)="Cat","2",IF(INDIRECT("'Form Responses 1'!B"&Row(A1)+X)="Frog","3",IF(INDIRECT("'Form Responses 1'!B"&Row(A1)+X)="Bird","4"))))
Where X is your offset.
Hope this helps
I have a google form that my students fill out daily. All form responses feed into one workbook. From the workbook, I have a spreadsheet for "Clean" data. Which is just the information from the responses sheet needed to graph progress. The formula I am using in A2 is: ='Form Responses 1'!N2
Nothing too complicated right?
However, each day that I want to show the kids their progress on the charts, I have to select the last two entries in the Clean Data worksheet and copydown the formulas in order for the new data to appear. Apparently, every time there is a new form submission, google sheets changes the cell address in the formulas. Is there any way around this?
As JPV commented, the "pushing down of formulae" by form submissions may be counteracted by using an array formula (in row 2):
=ArrayFormula('Form Responses 1'!N2:N)
And as Akshin commented, if you were in fact bringing over a couple of columns for graphing purposes, you can do it all in one with QUERY. For example:
=QUERY('Form Responses 1'!A:N,"select A, N",1)