I have 3 columns in a Google sheets tab.
Two of the columns are fed into from another tab (Sheet1) by the formulas =Sheet1!A2:A and =Sheet1!B2:B.
I am facing a problem when the 2 columns from sheet1 are sorted, the third column from sheet2 does not stay aligned with the other two and throws off my entire sheet's analysis. Is there a way to link the 3 columns together so when I sort from sheet1, all 3 columns from sheet2 are sorted and not just the first 2 that are being fed into from sheet1?
The short answer is that you can't. Sheets is not a relational database in which rows between sheets will remain linked.
What you can do is to work everything in a Master sheet so everything is sort together, or continue with your system but never "really" sorting your Sheet1. Instead, in any of both cases, you can use Filter Views. Filter views affect the way each user sees the information without altering the other users' views. That way you could just hide columns in Filter View in a single Master Sheet and everyone works in just one sheet; or "sort" the Master Sheet only when you're inside the Filter View, so the connected data always remain in the same rows.
I suggest you consider this possibility. Other ways are via scripts, which could be a headache by implementing it, always syncing and checking every kind of modification, sorting issue and more. Hope it's useful! There are many tutorials and documentation online; here you have just one as example
Related
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
Here is the background: I have multiple sheets with multiple columns of different data in each sheet.
What I'd like to do: I have used one sheet as a "base" sheet, linking "other sheets" to its data to retrieve it using relative references. Okay, fine, it works.
The Issue: When I sort the data on the base sheet, it also sorts it automatically on the other sheets. Great, that's expected. However, all the other various columns on the other sheets stay static, but the columns that are linked with the base sheet are the only ones that shift. This is a problem, because the data is now mismatching across rows.
Question: How can I make the columns on the other sheet "persistent" even if I sort the data on the base sheet?
the only way is to bind your "static column" via a common link (be it ID or row position or something else that fits your needs)
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
This question already has answers here:
How to create INDIRECT array string of multiple sheet references in Google Sheets?
(2 answers)
Closed 2 years ago.
I would like to create a summary sheet that reports the same data from across multiple tabs and doesn't rely on referencing individual sheet names in the formula/code. I have successfully done this when there is only one line of data representing each tab (using getSheetnames or Index scripts).
But, the data I want to summarize has multiple rows from each tab that need to be reported on a summary sheet.
I've successfully managed to combine and report the data from separate sheets into the Summary using a query/array combo where the query range includes each sheet and separated with ";". This can be done using cell references to the Sheetname list as well.
However, this needs to be more dynamic as sheets will be added/removed regularly and I would like to not have to re-write the query every time to add/remove individual sheet names.
SUMIF also works, but with similar limitations.
I believe my main challenge is using a list of sheet names which I can generate (listing one sheet per row) and associating those names formula/code that will produce summary results in multiple rows.
If Sheet names are in Column A, the following formula displays data combined from multiple tabs
=ArrayFormula(query({INDIRECT(A3&"!A2:A200"),to_text(INDIRECT(A3&"!B2:B200")),INDIRECT(A3&"!C2:C200");INDIRECT(A4&"!A2:A200"),to_text(INDIRECT(A4&"!B2:B200")),INDIRECT(A4&"!C2:C200")},"select Col1,Col2,Col3 where Col1 contains 'Project'"))
BUT, I want to reference my Sheetnames list without having to write in actual sheetnames or cell references to the formula.
Here's a link to a dummy workbook with sample.
I realize I'm late to the party on this question, but have you considered a Google Form with 5 questions:
Project?
Phase?
Transaction?
Start?
End?
That way, all your data would be in a single tab. People could input using the form, and you could still have project by project outputs for viewing/analysis using a simple query.
Google Sheets was designed from the ground up to be different from excel in specifically this way. There are all sorts of incentives to condense your data SOURCES while making it easy to disaggregate your ANALYSIS. While Excel is exactly the opposite. It's easy to keep track of things on tons of different tabs, and aggregate it all in one place. Yet there is no such thing as FILTER() or QUERY() to do the opposite.
I have two database dumps in Google sheets. They contain several thousand entries - many are identical, but not all. I now need to find all of those where a number in a specific column has increased by a certain number. The problem is that the rows not necessarily are the same, as entries in the database can have been deleted - and more been added, so rows do not add up.
I have tried various forms of 'if' and 'query' - none that have brought me closer to a solution.
I'm thinking that I first need to compare the column where the unique id is to ensure that it is the right entry that is being compared.
I would like to completely automate this, but a semi-manual way of doing this could also be okay.
One solution for this could be to get Google to check the unique id's of the two tabs - and then display the content of a second column in the first tab only where the id's can be found in both tabs.
I just cannot get Sheets to do this.
Any help would be appreciated
if I understood you right you can use filters for your task. For example
=FILTER(YourSheet1!B$2:B;YourSheet2!A$2:A=C2;YourSheet2!D$2:D=E2)
It will return you the line, where A$2:A == C2 and D$2:D == E2 from sheet two. So you can using filters choose data that has equal column values. If there exist copies it will return an error to the cell
Found the solution... A simple LOOKUP was what I needed:
=LOOKUP(B147,stats23Dec!B:B,stats23Dec!G:G)