Google Sheets - linking two separate sheets and importing values - google-sheets

I have two spreadsheets:
A budget sheet, with estimated costs and actual costs. Replicated here: https://docs.google.com/spreadsheets/d/1J8wPicVyfs98QXRXRCHZoq-Y6Uoi75Iv8WitGja4Pic/edit#gid=0
A cost tracking sheet, with the actual costs and reference to receipts. Replicated here: https://docs.google.com/spreadsheets/d/1YclB3V3817Q-RGwuzrOXoZkarwFszaTqwUFurtYtLVo/edit#gid=0
Currently I am importing the 'actual costs' in the budget sheet, by referencing rows from the 'actual costs' in the tracking sheet
So my budget sheet references the cost tracking sheet this way:
=(importrange("spreadsheet_key","sheet_name!I76"))
This works fine, however, if I insert a new row into my cost tracking sheet above some of the values I am already referencing, it will not dynamically update.
So if I insert a new row above:
=(importrange("spreadsheet_key","sheet_name!I76"))
I then have to manually change it in the other sheet too for each item:
=(importrange("spreadsheet_key","sheet_name!I77"))
Is anyone aware of a way I can link two sheets and still be able to insert rows without this breaking?
Thanks

Sounds like you want a sheet that updates when new values are entered into a separate sheet? I think a short script similar to the one proposed in this question should work for you.
Detect user inserting row or column in a google spreadsheet and reacting in a script

Related

Preventing API edits from breaking arrayformula columns

I have a Google Sheet that I'm using as a database for a an app I am building in AppSmith. Really just an interface for people to work with the sheet in a controlled manner.
I'm using the Google Sheet because I'm familiar with layering formulas to make it work the way I want it to work. I have a number of columns that start with an ARRAYFORMULA that gives the name of the column in row 1, blank in blank rows that should be blank, and some programmed information in other rows.
This works great as long as I am working from the spreadsheet or reading/adding rows from the app.
However, when I try to edit the row from the app, the API update will take the "50" that it sees in the column and actually put "50" in the cell, breaking the arrayformula.
Is there any way to prevent API calls from actually editing that column? Or to automatically clear the cell and let the arrayformula expand again?
I found a temporary workaround to push "" for the column(s) I know are arrays, but it seems vulnerable to complications if I add other array columns later, or want to make another form in the app that also updates the sheet.
As a "rule of thumb", avoid having formulas on sheets being used as "databases" (top row used for field names, 2nd row and below used for data). If you really need to use formulas in the spreadsheet instead of doing the calculations on the "APP", add them on a "mirror" sheet.
This is a common recommendation when using ARRAYFORMULAS to do calculations with data comming from Google Forms.
If you think that creating a "mirror" sheet might cause more problems than benefits, if your "APP" is able to limit the number of columns being edited, put the formulas to the right of the last column linked to the app.
Related
Make Google Spreadsheet Formula Repeat Infinitely

Google Sheets - Grab data from a separate sheet and add it to a master sheet

I have a Google Sheet that has a main master sheet, with a column for users to fill in their Name to show they are "working" on that row, then that row gets populated to their own tab based on a =QUERY(Master!A3:AA,"select * Where L='Name'") for each of the users' tabs, there is 8 total tabs where users are updating information. This is already quite a bit of processing on Googles part, so I am trying to generate a separate Google Sheet that pulls in the information that the users are entering on each of their tabs so the management can monitor that sheet for updates and then both sheets will run a lot faster/smoother.
I have tried using a VLookup with this syntax: =vlookup(A3,importrange("sheetID",{"Name1!$A$3:$N";"Name2!$A$3:$N";"Name3!$A$3:$N";"Name4!$A$3:$N";"Name5!$A$3:$N";"Name6!$A$3:$N";"Name7!$A$3:$N";"Name8!$A$3:$N"}),12,FALSE) which gives me an #N/A Error, cannot find Value '1' in VLOOKUP evaluation.
I have also tried using a =QUERY({importrange("sheetID"x8 with the ranges)}, "Select Col12,Col13,Col14 where Col2 matches '^.\*($" &B3 & ").\*$'")
That only returns headers, I am trying to get the query to basically find the unique key in Column A then spit out what is in Col 12-14, but that doesn't seem to work either. Columns 1-11 are static, but Columns 12-14 are what I am trying to populate for the management, which is the work that the staff is inputting on each of their tabs.
I can get the query working if I keep it on the same worksheet as the one the staff is working on, but then it bogs down the whole sheet so I would like to keep it separate if possible. Any ideas? I can't provide a sample sheet at this time since it has financial info on it, but I can add more details if I know what to look for.
your formula should be:
=VLOOKUP(A3, {
IMPORTRANGE("sheetID1", "Name1!A3:N");
IMPORTRANGE("sheetID2", "Name2!A3:N");
IMPORTRANGE("sheetID3", "Name3!A3:N");
IMPORTRANGE("sheetID4", "Name4!A3:N");
IMPORTRANGE("sheetID5", "Name5!A3:N");
IMPORTRANGE("sheetID6", "Name6!A3:N");
IMPORTRANGE("sheetID7", "Name7!A3:N");
IMPORTRANGE("sheetID8", "Name8!A3:N")}, 12, 0)
keep in mind that every importrange needs to be run as a standalone formula where you connect your sheets by allowing access. only then you can use the above formula

Using text from a cell in a formula in Google Sheets

I would like to use the text from a cell in a formula in Google Sheets.
I have a document with multiple sheets that a variety of people can edit with a H,M,L (high, medium, low) value from a drop-down list. Each person has their own tab in the Google Sheet.
I then have a dashboard that populates based on their choices of H,M,L. I know that I can use the formula =('Jay Delacruz'!C6) for example to populate a cell in another sheet by manually selecting the cells on the other sheet.
However, I am looking to make quite a few of these documents automatically with another Google Script that I am running that creates the individual sheets from a roster of names on the first tab.
My question is, is it possible to have a =('Jay Delacruz'!C6) type formula that instead of the sheet reference it can pull the name of the person from the roster, as this will match exactly the sheets that are automatically generated by the script I have running.
So I would essentially have a pre-populated dashboard of formulae that would become valid once the sheets are created with the names, as created by the other script.
If it makes it a little clearer, there is a link below to make a copy of the Sheet I am working with. All names were randomly generated, so don't reference any real people or data.
https://docs.google.com/spreadsheets/d/1NiXqko8SibD6VsfrnFcj7e7c99Hg-RoSlHVAYWb0E94/copy
Thank you in advance!
Liam
Try
=INDIRECT(C1&"!C6")
Also see here for more info on INDIRECT() function.

Google Sheets - linked via importrange and inserting a new row

I have two spreadsheets:
A budget sheet, with estimated costs and actual costs
A cost tracking sheet, with the actual costs and reference to receipts
Currently I am importing the 'actual costs' in the budget sheet, by referencing rows from the 'actual costs' in the tracking sheet
So my budget sheet references the cost tracking sheet this way:
=(importrange("spreadsheet_key","sheet_name!I76"))
This works fine, however, if I insert a new row into my cost tracking sheet above some of the values I am already referencing, it will not dynamically update.
So if I insert a new row above:
=(importrange("spreadsheet_key","sheet_name!I76"))
I then have to manually change it in the other sheet to:
=(importrange("spreadsheet_key","sheet_name!I77"))
Is anyone aware of a way I can link two sheets and still be able to insert rows without this breaking?
Thanks
Construct the range reference with the Address function. This produces a string representing the target range.
=importrange("spreadsheet_key", address(row('sheet_name'!76:76), column(I:I), 4, true, "sheet_name"))
Adding or deleting a row above row 76 on the sheet_name worksheet will adjust the range address accordingly.

Google Sheets Copy Down Issue

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)

Resources