Reference cell in a query in Google Sheets - google-sheets

https://docs.google.com/spreadsheets/d/1ZupYqXhA-_ZSfuOUN70YuQnC9DUw7PUlrzv117knJ-I
That's a link to the file in which it is not working! If you open it, go to sheet named "My query stinks".
The sheet called deposits has data like this in columns A (date), B (description), and C (amount):
6/29/2016 Deposit 480
6/24/2016 Deposit 359.61
8/8/2016 Deposit 11.11
The sheet "My Query Stinks" has data in columns A (check number), B (empty) and C (amount):
1000000044 480
1000000045 359.61
201631212301237 11.11
In Column B on My Query Stinks, I want to enter a query. Here's what I'm trying: =query(Deposits!A2:C,"select A where C ='"& C4 &"'") For some reason, it returns #N/A Error Query completed with an empty output. I want it to find that 11.11 (the value in C4) matches 11.11 over on Deposits and return the date.
EDIT 1/15/2020: Updated the link to the Google sheets file.

I think you've ended up with too many quotes in your formula. The following simplified version seems to work.
=query(Deposits!A2:C,"select A where C = "&C4)
Because of an extra set of quotes in the formula, I believe your original version ends up treating C4 as a text value instead of a cell address.
Additionally, it looks like that element opens with '" and then closes with "'" - so it's not balanced. I've had problems with auto-quoting like this in similar scenarios, especially on editing.

Related

How to repeat a value specified number of times in Google Sheets

How to repeat a value specified number of times in Google Sheets, assuming no overlap or ignoring overlap if any.
Screenshot of the example with ID in column B and Nights in column C.
Trying to reach desired output (column D) with reservation ID repeated the specified number of nights.
Link to example
Your sheet is "Comment only." But try deleting everything from Col D (including the header) and placing the following formula into cell D1:
=ArrayFormula({"ID Full Stay"; IF(A2:A="",,IF(ROW(A2:A)>(VLOOKUP(ROW(A2:A),FILTER(ROW(C2:C),C2:C<>""),1,TRUE) + VLOOKUP(ROW(A2:A),FILTER({ROW(C2:C),C2:C-1},C2:C<>""),2,TRUE)),,VLOOKUP(ROW(A2:A),FILTER({ROW(C2:C),B2:B},C2:C<>""),2,TRUE)))})
This one formula will produce the header (which you can change as you like within the formula itself) and all results for all rows.

Creating a list of who hasn't checked in with Sheets?

For my school, we are using QR codes to check students into various rooms around campus. The QR code logs their email address and the location where they checked in on a Google Sheet.
Using a list of all the email addresses, I have a formula in sheets that marks each student as "Checked In" or "Not Checked In" based on whether or not their email was found among the list of logged email addresses (from scanning the QR code). Hope that makes sense.
I'd like to create a formula that goes through and pulls out all the "Not Checked In" students and puts them in a single column with no whitespace in-between.
I have a simplified example of what I have done and what I am trying to do at the link below. What I want to achieve (on the sample sheet) is Will, Wesley, and Worf in cells G2, G3, and G4, respectively.
Example Sheet
Please use the following formula
=QUERY(A2:B,"select A where A is not null and B='Not Checked In'")
As a side note (suggestion)
For your B column you could use this single formula in cell B2 (instead of manually adding one in every row) and have all bellow cells auto populated.
=ArrayFormula(IF(LEN(A2:A),IF(ISERROR(MATCH(A2:A,$D:$D)),"Not Checked In","Checked In"),""))
(Just make sure you first delete all cells from B3 till the end)
Functions used:
QUERY
ArrayFormula
IFERROR
IF
LEN
MATCH

is it possible to lookup a cell value and populate a drop down box with the results in a separate cell

I have a google sheet with all current staff information. I have a second sheet for when some piece of data needs changed. Last name, Location, job ect.
on second sheet I am looking to have someone:
Enter the user's first name in column B,
and or Last name in Column C,
I would like a drop down box generated in column D from the given info to contain all usernames found in the sheet with current information for all staff that have the given first and or last names provided.
Once a username has been selected, I can get all the pertinent data from that user with a vlookup from the sheet containing all staff info. For example if someone typed Scott in column B, I would like a drop down generated in column D with all staff that have a first name of Scott. Likewise if the last name was supplied and of course if both first and last was supplied.
Validation need to be done that's it,
1) Go to Staff Changes'!B2 and Data Validation> List from range & choose range from 'Staff Info'!B2:B
2) Select cell'Staff Changes'!D2 and Data Validation> List from range & range will be filter formula i.e 'Staffing Changes'N2:N.
Result
Few tweaks in vlookup:
I am not sure if you need username column twice if you don't need then change your vlookup formula from =vlookup(D2,'Staff Info'!A:K,10,0) to =VLOOKUP(D2,'Staff Info'!$G$1:$K,2,0)
Please provide access to trix in future so that changes & result can be shown in it.
UPDATE:
Use data validation as before & hide filter colum or use seperate sheet for filter formula & use query function in cell A3 =QUERY('Staff Info'!A:J,"select ' ',A,F,' ',' ',G,' ',I,' 'where A='"&A2&"' AND F = '"&B2&"' LABEL ' ''Date',' ''Current Last Name',' ''New Last Name',' ''New Building',' ''New Classification'",1) result wil be something like this
QUERY

Google Sheets: selecting cell values based on another cell MAX values

I'm trying to make a database of students using Google Sheets. It contains info about students, groups and orders; orders can change students membership in groups (taken in a group, moved up to a new group, graduated, on leave, sent down). Here are sample database sheets and here is a detailed description of my DB structure (the sheet report_Groups is slightly changed, its previous variant, described on the link, is now named old_report_Groups).
I need a query that would select a list of present members of given group on the given date. That means that for each student I have to select
the name, the latter status before given date and corresponding group. And from this result select student names, where statuses are "Taken in" or "Moved Up" and group is the same as given one.
The problem is to select the latter status. It should be MAX(status), whose "since" date ≤ given date, but there's a well-known problem of selecting more than one field together with aggregate function. Here is a question which is very close to, but query from its "best" answer gives me error "QUERY:NO_COLUMN". I've even copied the sheet Raw from there and tried to perform proposed query (with the onliest modification — replacing commas with semicolons according to my locale restrictions) on the data it was reported to work on — same error (check Raw and report_Raw sheets in my DB). Other variant (via MMULT and TRANSPOSE) works, but it's perfomance is very poor.
What can you suggest me? Thanks in advance.
Update: I've found the solution with an issue (described in my answer).
To solve the issue I need to know an answer for a different question.
Here's the solution (with an issue described below).
A. Orders_Students is filtered for selecting rows, having "since" cell value ≤ given date (report_Groups!A2):
=QUERY(Orders_Students!B:E;"select E, B, C, D where E <= date '" & TEXT(report_Groups!A2;"yyyy-MM-dd") & "'";1)
This interim result is stored at the inner_report_Groups tab (it will be referenced few times in the next query).
B. inner_report_Groups is filtered for selecting MAX("since") values and corresponding row cell values for each student:
ARRAYFORMULA(VLOOKUP(QUERY({ROW(inner_report_Groups!A$2:A)\SORT(inner_report_Groups!A$2:D)};"select max(Col1) group by Col3 label max(Col1)''";0);{ROW(inner_report_Groups!A$2:A)\SORT(inner_report_Groups!A$2:D)};{3\4\5};0)
The formula above is used as inner query in report_Groups!D2 (also in D3, D4—with appropriate indeces).
C. The second query result is filtered to get students whose status is either "Taken in" or "Moved Up" and corresponding group is equal to the given group (report_Groups!B2 (also in B3, B4—with appropriate indeces)):
=TRANSPOSE(IFERROR(QUERY(<here is the formula from step B>);"select Col1 where Col3 = '" & B2 & "' and (Col2='Taken in' or Col2='Moved Up')";0)))
The formula above is used as outer query in report_Groups!D2 (also in D3, D4—with appropriate indeces). IFERROR is intended to display nothing if query result is #N/A.
That query displays the needed results as you can see in report_Groups tab. But as the query on step B searches the whole columns of inner_report_Groups, there's only a single given date can be analysed (or the query interim results for other given dates should be placed in different columns of inner_report_Groups or at the different tab. Is there any way to give an alias for an interim result to refer it in a single cell formula instead of keeping it on different tab?

Google sheets conditional formatting based on =QUERY result

I am trying to conditionally format a row in Google Sheets based on the result of a QUERY operation. I can get the QUERY to return the value I want (either 0 or non-zero), however QUERY insists on returning a header row.
Since the QUERY now takes up 2 rows for every row of data, changing the format of the row based off the QUERY result starts to get weird after just a few rows.
The problem I am ultimately trying to solve in the case where I enter a list of names, and I want to compare each name to a list of "NSF Names". If a name is entered, and it exists on the NSF list, I would like to flag the entry by highlighting the row red.
Help is greatly appreciated.
Edit: Formula, as requested:
=query(A:D,"select count(A) where C contains '"&E1&"' and D contains '"&E2&"'")
A:D is the data set (A is a numeric ID, B is full name, C and D are first and last names respectively).
E1 and E2 are placeholders for the person's first and last name, but would eventually be replaced with parsing the person's name, as it's inputted on the sheet (TRIM(LEFT(" ", A2) etc...)
I can get the QUERY to return the value I want (either 0 or non-zero),
however QUERY insists on returning a header row.
There might be better ways to achieve what you want to do, but in answer to this quote:
=QUERY(A:D,"select count(A) where C contains '"&E1&"' and D contains '"&E2&"' label count(A) ''")
A query seems a long-winded approach (=countifs(C1:C7,E$1,D1:D7,E$2) might be adequate) but the label might be trimmed off it by wrapping the query in:
index(...,2)

Resources