1. Formula (paste in F2, then fill down)
=IF(A2="", "", IF(E2<>"", "Paid", IF(NOT(ISNUMBER(C2)), "Check due date", LET(days, TODAY()-C2, IFS(days>30, "Overdue 30+", days>0, "Overdue", days>=-7, "Due soon", TRUE, "Open")))))
2. Walkthrough
• IF(A2="", "", ...): no invoice number means an empty row, so it shows nothing.
• IF(E2<>"", "Paid", ...): anything in the paid-date column means paid.
• IF(NOT(ISNUMBER(C2)), "Check due date", ...): Sheets stores real dates as numbers, so a blank or text due date gets flagged instead of producing a wrong status.
• LET(days, TODAY()-C2, ...): the number of days past due. It's negative if the invoice isn't due yet.
• IFS(...): checks the conditions in order. More than 30 days late, then late at all, then due within the next 7 days, otherwise Open.
3. Tests (assuming today is 24 Sep 2026)
| A | C (due) | E (paid) | Result |
|---|---|---|---|
| INV-101 | 20 Aug 2026 | blank | Overdue 30+ (35 days) |
| INV-102 | 25 Aug 2026 | blank | Overdue (exactly 30 days) |
| INV-103 | 24 Sep 2026 | blank | Due soon (due today) |
| INV-104 | 1 Oct 2026 | blank | Due soon (7 days ahead) |
| INV-105 | 2 Oct 2026 | blank | Open (8 days ahead) |
| INV-106 | 10 Aug 2026 | 12 Sep 2026 | Paid |
| INV-107 | 10 Aug 2026 | "part paid" | Paid |
| INV-108 | "15/09/2026" as text | blank | Check due date |
| blank | blank | blank | (empty) |
4. Possible surprises
• INV-102: exactly 30 days late shows "Overdue", not "Overdue 30+", because your rule said more than 30. For 30 days or more, change days>30 to days>=30.
• INV-103: an invoice due today shows "Due soon", not "Overdue". That's correct under your rules.
• INV-107: any text in E counts as paid, including "part paid". To accept only real dates, change E2<>"" to ISNUMBER(E2).
5. Fragility
• Dates stored as text (common after a CSV import) show as "Check due date". Fix them with Format, then Number, then Date, or convert them with DATEVALUE.
• TODAY() recalculates every day, so statuses change on their own. If you need a record, copy and paste the values at month end.
• Sorting is safe, because each row only refers to itself.