All guides
Spreadsheet guide

How to find who is absent: compare a roster with today's sign-ins in Google Sheets

Formulas that list who has not signed in: compare a roster with Google Form responses or scan rows, text timestamps included, for any date or session.

By the QR to Sheets team 14 min readUpdated 8 October 2026

Short answer

To find who is absent in Google Sheets, keep a Roster tab of everyone expected and filter it for people with no sign-in row on the date, using FILTER with COUNTIFS or MATCH.

Google Forms timestamps are real dates, so a date range works on them, while QR to Sheets writes timestamps as text such as 2026-10-08 15:02:40, which need a text match or VALUE().

The same roster also gives a count of absences, a list for one session, and a present and absent grid across dates, all in ordinary formulas that cost nothing.

A sign-in list records who came. Nobody in it is absent, because absent people never sign in. Whether the rows come from a Google Form, a paper register typed up later or a QR scanner, the list of who is missing has to be worked out: the people you expected, minus the people who signed in. That means a roster, and one formula that compares the two.

Everything in this guide is ordinary Google Sheets and costs nothing. It covers both kinds of sign-in data people actually have: Google Form responses, whose timestamps are real dates, and rows written by a scanner such as QR to Sheets, whose timestamps are text. Most formulas that fail on attendance sheets fail on exactly that difference.

Written by QR to Sheets, which sells a scanner that writes sign-in rows, described near the end, so weigh that accordingly. The formulas work on any sign-in data, from any source, and every one was checked on 2026-10-08 in a spreadsheet engine against sample data holding both kinds of timestamp. QR to Sheets does not hold your roster or mark anyone absent: the roster and the formulas stay in your own sheet.

What do I need before the formulas work?

Three tabs. The names are up to you, but the formulas below use these:

If you use column mapping on a QR to Sheets link, the layout changes: a mapped row starts with the scan time in column A, the link name in column B and a device ID in column C, and your own columns begin at column D. Point the formulas at whichever column holds the ID.

Which kind of timestamp do you have?

Type =ISTEXT(A2) next to your data, pointing at the first timestamp. TRUE means the timestamp is text. QR to Sheets writes each time as YYYY-MM-DD HH:MM:SS in your workspace timezone, and Google Sheets stores it as text. FALSE means a real date and time, which is what a Google Form response sheet holds.

Make the IDs match

A scanned or submitted 1042 is text; a 1042 typed on the Roster tab is a number; and text never matches a number, so everyone shows as absent. Give IDs a letter prefix such as S1042, or format the Roster's column A as Format, Number, Plain text before typing. The guide to showing the name for a scanned ID covers this trap and the lookups that put names next to IDs.

Who is absent today, from scan rows with text timestamps?

In A2 of the Absent tab, with the date in B1:

Google's FILTER help notes that when nothing satisfies the conditions, FILTER returns #N/A. Here that means nobody is absent. Wrap the formula as =IFERROR(FILTER(...), "Nobody absent") to show a message instead.

Who is absent from a Google Form?

A Google Form response sheet holds real dates, so the date test is a range from midnight to midnight instead of a text pattern. With the ID question in column C of Form Responses 1:

When people typed their names

Typed names are where form attendance gets messy. LOWER() puts both sides in lower case, and TRIM, in the words of Google's help, removes leading, trailing, and repeated spaces in text, so this version still matches ana lopez typed in lower case and Chloe Park typed with a double space. With the name question in column D:

One formula for either kind of timestamp

If one tab mixes both kinds, or you would rather not check, convert each timestamp with VALUE() and compare whole days. This version works on scan rows and on form responses alike; point it at your own columns:

How many are absent, and who is present?

How do I see absences across several dates?

A pivot table of the sign-in log only lists people who signed in at least once, so someone who never came is missing from it entirely. A grid built from the roster lists everyone. On a Grid tab, put the IDs in column A from A2, with =FILTER(Roster!A2:A, Roster!A2:A<>""), and real dates across row 1 from B1. Then in B2:

If the marks have to go into a student information system, build them on a separate tab and export that tab, never the raw log. Exporting QR attendance to an SIS covers the shapes those systems expect.

When did an absent person last sign in?

Why does my absent list show everyone, or nobody?

Are there add-ons or tools that do this for you?

Yes, for particular cases. Alice Keeler's article on finding who did not fill out a Google Form, read on 2026-10-08, recommends her Missing From add-on, which, in her words, helps you to match up a list of email addresses you were expecting to fill out the Form with the email addresses that were submitted. It needs the form to be collecting email addresses and an expected-participants sheet with a header containing the word email, and it adds a new sheet listing who did not fill out the form. It suits a one-off survey or a form where everyone signs in with Google. It does not look at dates, so a daily register needs the formulas above.

For events with a guest list, the QR to Sheets Events add-on imports the list from your Google Sheet and, when staff scan a guest's code at the door, writes the check-in time back to that guest's row, so anyone with a blank check-in cell has not arrived. It requires the paid plan, and costs 25 USD a month on top. For a recurring program where children sign in and out every day, the after-school sign-in and sign-out guide puts these formulas into a daily roll call.

Ways to list who has not signed in. Third-party facts read on 2026-10-08.
OptionWhat it comparesHandles datesNeedsCost
Google Sheets formulas in this guideA roster tab against any sign-in rowsYes, any date or rangeA roster with IDs or namesFree
Missing From by Alice KeelerExpected email addresses against form submissionsNo date filter describedA form collecting email addresses and an email columnNot stated in the article read
Google Form on its ownNothing; it lists who submittedIts timestamps are real datesA roster and a formula to find who is missingFree
QR to Sheets scanner link plus these formulasA roster tab against scan rowsYes, timestamps are text in the workspace timezonePrinted codes and a staff phoneFree for one phone, one link and 300 scans in total; then 7 USD per phone per month
QR to Sheets Events add-onA guest list against door check-ins written back to each rowPer eventA guest list in Google Sheets and the paid plan25 USD a month on top of the paid plan
Ways to list who has not signed in. Third-party facts read on 2026-10-08.

Where QR to Sheets fits

QR to Sheets is the sign-in half. You connect your Google Sheet and create a scanner link pointed at the Log tab. A teacher, coach or volunteer opens the link in a phone browser and scans each person's printed card, and each scan lands as a timestamped row. Nothing is typed, so the IDs match the roster and the typed-name problems above disappear. The free QR code ID card maker prints the cards from a pasted list, with no signup.

Google Form + roster formulas compared with QR to Sheets
CapabilityGoogle Form + roster formulasQR to Sheets
CostFreeFree for one phone, one link and 300 scans in total; then 7 USD per registered device per month
How a person signs inTypes an ID or name on their own phoneA staff member scans their printed card
Typos in IDs and namesCommon, and each one looks like an absenceRare, because the code is read rather than typed
TimestampA real date in the spreadsheet's time zoneText in the workspace timezone, matched as text or read with VALUE()
Who is absentThe formulas in this guideThe formulas in this guide
Signal dropsThe form cannot submitScans are kept on the phone and sent when the signal is back
Where the data livesYour Google SheetYour Google Sheet

Step by step

  1. 1

    Make a Roster tab of everyone expected

    One row per person: ID in column A, name in column B, group in column C. Format column A as plain text before typing, or give IDs a letter prefix, so they match what was submitted or scanned.

  2. 2

    Check which kind of timestamp you have

    Put =ISTEXT(A2) beside your sign-in data. TRUE means text, which is what QR to Sheets writes. FALSE means a real date, which is what Google Forms writes. The two need different date tests.

  3. 3

    Put the date in one cell

    On an Absent tab, put =TODAY() in B1 for a live list, or type a date to check another day. Every formula below reads the date from that cell.

  4. 4

    Add the absent formula for your source

    Use the scan-row version for text timestamps, or the Google Form version for real dates. Both list the ID and name of everyone on the roster with no sign-in on that date.

  5. 5

    Add a count and a grid if you report on it

    A SUMPRODUCT counts absences for the day, and a grid with dates across the top marks each person present or absent for every date, ready to total per person.

Frequently asked questions

How do I find who did not fill out my Google Form?+

List everyone expected on a Roster tab, then filter it for people with no response: =FILTER(Roster!A2:B, Roster!A2:A<>"", COUNTIFS('Form Responses 1'!C:C, Roster!A2:A)=0) for all time, or add a date range on the Timestamp column for one day. The Missing From add-on by Alice Keeler does a version of this by email address.

Why does my absent formula list everyone?+

Usually the date test does not fit the timestamps. Google Form timestamps are real dates and need a range such as ">="&B1. QR to Sheets timestamps are text and need a pattern such as TEXT(B1,"yyyy-mm-dd")&"*". Check with =ISTEXT(A2), and check that IDs are text on both tabs.

Can I list who was absent on a past date?+

Yes. Put the date in the cell the formula reads, instead of =TODAY(). For several dates at once, build a grid with dates across the top and mark each person P or A with COUNTIFS.

Does QR to Sheets mark people absent automatically?+

No. It writes a timestamped row for each scan to your Google Sheet. The roster and the absent list are yours, built with the formulas in this guide, so the list of people never leaves your spreadsheet.

How do I count each person's absences for the month?+

Build a grid with the roster down column A and each meeting date across row 1, mark each cell P or A with COUNTIFS, then count the A cells in each row with COUNTIF. Only add dates on which the group actually met.

Does someone who scanned twice count twice?+

No. Every formula here asks whether a person has at least one row on the date, so two scans, or a form submitted twice, still count as one person present.

Try it on your own Google Sheet

Connect Google, create a scanner link, and share the URL with your team. The free tier covers 300 scans, and nobody you share it with has to install anything.

Start for free

No credit card required

Keep reading