I have a Google Sheet with a column of Names and some columns of Values
I also have a column of total available Names
This Sheet is connected to a Google Form and i need to check if users have filled any value in Values Columns
I need a formula that indicates if there are any missing names (of total available Names) from the NAMES Column and also if a Name appears give a warn that this name has no values in its row
Here is a screenshot of what i mean
Here is a shared form to give it a try
https://docs.google.com/spreadsheets/d/1N2CCD7MdKBO0faj8akfdtX-K_JZ6o7hD0tZSVfnbrAs/edit?usp=sharing
I have added a new sheet ("Erik Help") with this formula:
=ArrayFormula(IFERROR(VLOOKUP(FILTER(J3:J,J3:J<>""),{C3:C,IF(D3:D&E3:E&F3:F&G3:G<>"","OK","Missing Values")},2,FALSE),"Missing Name"))
This looks up every value in the full names list (FILTERed to remove blanks) within a virtual array with names from form submissions in column 1 and a concatenation of all form VALUES per row in column 2.
If a name from the full list is not found within the form submissions, VLOOKUP throws an error, which is replaced with "Missing Name" by the IFERROR outer wrap.
If a name is found and the concatenation of all values fields is not blank (i.e., if there is even one value present in that row), "OK" is returned. Otherwise, "Missing Values" is returned.
I think you need to use COUNTA. It worked for me in your testfile.
COUNTIF counts numbers, COUNTA also counts text.
=IF(COUNTA(D3:G3)<>0,"OK", "MISSING NAME")
Related
I'm compiling a list based on the first answers recieved between row N and AF.
I'm using these two formulas:
=INDEX(N2:O2,MATCH(FALSE,ISBLANK(N2:O2),0))
and
=INDEX(R2:AF2,MATCH(FALSE,ISBLANK(R2:AF2),0))
Is there a way to combine them whilst not searching in rows P & Q?
These are generated from a Form response so can't just be switched around.
try:
=INDEX({N2:O2, R2:AF2}, MATCH(FALSE, ISBLANK({N2:O2, R2:AF2}), 0))
If Sheet1 is an intake sheet of form results, you should not add any data, formulas or even formatting to that sheet. It virtually always causes issues. A form intake sheet should be left exactly as it is. A new sheet can then be used to bring over the results of the form intake sheet as you want to see them.
However, since you didn't specify any of that, I will supply a formula written to work in the same sheet as your posted example and in-sheet examples.
Clear an entire column and place the following in the top cell of that column:
=ArrayFormula({"Attendee Name"; IF(E2:E="",,IFERROR(REGEXEXTRACT(TRIM(TRANSPOSE(QUERY(TRANSPOSE(FILTER(IF(N2:AK="",,N2:AK&"~"),N1:AK1=N1)),,COLUMNS(N1:AK1)))),"\s*([^~]+)"),"(none listed)"))})
This one formula will produce a header (the text of which you can change within the formula itself as you lie) and all valid results for all rows.
The inner IF will append a tilde (~) to any non-null entries in the range N2:AK.
FILTER will keep only those columns in this range where the header is the same as the header in N1 (i.e., "Attendee Name").
TRANSPOSE(QUERY(TRANSPOSE( ),,COLUMNS( ))) is colloquially called a "Query smash." It will form one cell from all horizontal results per row.
TRIM will cut any preliminary spaces and form a true string.
REGEXEXTRACT will pull the from the first non-space character up to but not including the first tilde (from those appended in the first step)—in other words, the first full valid entry from any column.
IFERROR will return a message if there is an error, with the likely error being that there were no valid entries for "Attendee name" in any column.
The outer IF will leave the cell blank if the no training event exists in E2:E.
{ } forms a virtual array that places the header over all other results.
ArrayFormula( ) signifies that multiple results will be processed at once.
Because this is an array formula that is being "asked" to process every row, you cannot manually type into any cell of this results column. If you do, you will "break the array"; everything except what you just typed will disappear, leaving only an error in the formula cell. If you need to add or change a name, you need to do that in the raw results range (e.g., manually type a name or a new name in Col N), which will then turn up in the formula output range.
I have list of partner name codes, delimited by space. Like the one shown in below,
I have another table(E:F), from where I have to map them to show the partner names like the column C, perhaps i am not able to understand how to make it happen,
I have tried using this formula which brings only one partner name but when there are multiple it does not shows up, do i need to add another function like TEXTJOIN or what I am doing wrong here.
=IFERROR(VLOOKUP(IFERROR(REGEXEXTRACT(A2,JOIN("|",FILTER($E$2:$E,$E$2:$E<>""))),""),$E$2:$F,2,0),"")
Link To GS
See my sheet ("Erik Help"). The following formula is in cell B1:
=ArrayFormula({"PARTNER NAMES";IF(A2:A="",,REGEXREPLACE(TRIM(TRANSPOSE(QUERY(TRANSPOSE(IFERROR(VLOOKUP(SPLIT(A2:A," ",0,1),D:E,2,FALSE)&",")),,COLUMNS(SPLIT(A2:A," ",0,1))))),",$",""))})
This one formula produces the header (which you can change within the formula itself as you like) and all results for all rows.
IF(A2:A="",,...) means if a cell in Col A is blank, then the result in the same row of Col B will also be blank (i.e., null).
SPLIT (the first time in the formula) will split the Col-A values at the spaces.
VLOOKUP will try to find each split value in the D:E list. If found, the full name will replace the initials. If not found, IFERROR will return null.
You will see &",". That is appending a comma to any full names that are returned.
TRANSPOSE(QUERY(TRANSPOSE...),,COLUMNS())) is what many call "QUERY Smash." It basically, flips the remaining results of the VLOOKUP into columns instead of rows, turns everything into headers (to get them in one cell per column) and then flips them back to row orientation.
TRIM gets rid of spaces where no names were found in the full list.
REGEXREPLACE(... ,",$","") replaces any final comma that has no name after it with null.
I am receiving email addresses submitted via a google form so I need to autopopulate the 3rd column - "count".
I need to count the number of PREVIOUS occurrences of an email address in the same column.
An example of the desired output can be seen below.
Please note that the information is received from a Google form and therefore new lines are automatically appended so I need the formula also to be automatically added in the new row.
Assuming the email adresses in column B, starting in row 2 you can try
=ARRAYFORMULA(IF(LEN(B2:B), COUNTIFS(B2:B, B2:B, ROW(B2:B), "<="&ROW(B2:B))-1,))
You should check out the "COUNTIF(<range>, <condition>)" method.
https://support.google.com/docs/answer/3093480?hl=en
If column A is full of email adresses, then the cells in column B could have the method =COUNTIF($A$1:A1, A1)-1, =COUNTIF($A$1:A2, A2)-1, =COUNTIF($A$1:A3, A3)-1 and so on.
Each cell counts all cells in column A whose content matches exactly the one to the left.
See this sheet for a clearer example: https://docs.google.com/spreadsheets/d/1fAHYAFZM1ZUGnEqErdwyXS5MsGZPvM2LEsaU1NqNM34/edit?usp=sharing
I tried to find if someone had a similar request but I really can't find anything anymore. Basically, I got the following set up:
I got 2 named Ranges, both with 1 column called "ID":
Named Range 1: Rank, Real Name, ID
Named Range 2: UserName, Email, Tag, ID
Now in the second Range, I would like to add a column with the rank of the user but only if that ID also appears in range 1.
What I tried to do was a MATCH function, but I can only get a string to come out if the IDs match, not the rank which is in a different column (column A of the second range).
=ArrayFormula(IF(ISERROR(MATCH(D2:D200,'Top 100 List'!C2:C151,0)),"No","Yes"))
I got it to write "Yes" to all the items that are also in the other named sheet but instead of that, I would like to give me the value of the named range in A from that specific cell.
Edit: I made a copy of the sheet because of sensitive information so you can see it In the sheet "Registrations" column H I would like to get the ranks from the other sheet:
https://docs.google.com/spreadsheets/d/1PzItmS3j-orH74E2zFlNWbvw39GdDGwuYL_jgzNAi7U/edit?usp=sharing
=ARRAYFORMULA(IF(LEN(C2:C),IF(ISERROR(MATCH(D2:D200,'Top 100 List'!C2:C151,0)),"No",
VLOOKUP(D2:D,{'Top 100 List'!C2:C151,'Top 100 List'!A2:A151},2,0)),))
I've created a form to collect data from user A in a sheet and reformat it for user B in the other sheet.
I have to sort the data for user B. I'm using vlookup to sort the column of values from the form to a new sheet (sort based on the order of the 'value description column'). It's working.
My problem is that when a new column is added to the first sheet (the form) the column range is modified and the index parameter in vlookup is not good anymore. So I lost everything on my second sheet.
How can I do to have a solid link with the column in the first sheet even if it's position change?
you can make use of INDIRECT with COUNTA and SUBSTITUTE. something like:
=INDIRECT("Sheet1!A1:"&SUBSTITUTE(ADDRESS(1, COUNTA(Sheet1!1:1), 4), 1, "")
this will count non-empty cells in row 1 of Sheet1 and converts that number to later which is used in constructing the range put together by indirect formula and all of it can be placed in vlookup as same as you would place any ther regular range.