No, Excel doesn’t have a built-in does not include function. But that doesn’t mean you can’t test for absence — it just means you have to flip the logic.
Quick Answer
Excel has no does not include operator or function. You simulate it by combining ISERROR(SEARCH()), NOT(COUNTIFS()), or FILTER() with logical negation — and yes, it works reliably if you avoid the #VALUE! trap in SEARCH.
All the Methods
| Method | Steps | Best For | Limitations |
|---|---|---|---|
| ISERROR + SEARCH | =ISERROR(SEARCH("text",A2)) | Single-cell text exclusion (case-insensitive) | Fails on #VALUE! if A2 is blank or numeric |
| NOT + COUNTIFS | =NOT(COUNTIFS(A2:A20,"*text*")) | Checking if *any* cell in range contains text | Slow on >10k rows; wildcard-only, no regex |
| FILTER + ISERROR | =FILTER(A2:C20,ISERROR(SEARCH("Corp",B2:B20))) | Dynamic array exclusion (Excel 365/2021) | Spills — won’t work in older Excel versions |
| XLOOKUP with NOT | =NOT(ISNUMBER(XLOOKUP("*text*",A2:A20,A2:A20,,2))) | Exact match + partial text check in one formula | XLOOKUP wildcard search only works with match_mode = 2 |
| Power Query Text.Contains + NOT | Add Column → Custom Column → not Text.Contains([Company], "LLC") |
Large datasets, reusable transformations | Requires refresh; no real-time recalc |
Method 1 Deep Dive
Use ISERROR(SEARCH()) when you need to flag cells that do not include a substring — like excluding vendors with "Inc" in their name.
Here’s what’s in A1:C7:
| ID | Company | Revenue |
|---|---|---|
| 101 | Acme Corp | $45,200 |
| 102 | Beta Inc | $32,800 |
| 103 | Delta LLC | $61,400 |
| 104 | Gamma Partners | $29,100 |
| 105 | Omega Inc | $53,700 |
In D2, enter:=ISERROR(SEARCH("Inc",B2))
This returns TRUE if "Inc" is *not found*. Drag down to D7. You’ll see TRUE for Acme Corp, Delta LLC, Gamma Partners — and FALSE for Beta Inc and Omega Inc.
Surprising tip: Wrap it in IF for clarity: =IF(ISERROR(SEARCH("Inc",B2)),"Exclude","Keep"). But don’t skip the error check — if B2 is blank or numeric, SEARCH throws #VALUE!, and ISERROR catches it cleanly.
Keyboard shortcut: To quickly select the entire column of results (D2:D7), click D2 then press Ctrl+Shift+Down.
Method 2 Deep Dive
Use NOT(COUNTIFS()) when your goal is binary: “Does *any* cell in this range include X?” — like confirming a report excludes all entries tagged "Draft".
Assume E1:E12 holds status labels:
- E1: Approved
- E2: Pending
- E3: Draft
- E4: Final
- E5: Draft
- E6: Reviewed
- E7: Draft
- E8: Approved
- E9: Pending
- E10: Final
- E11: Draft
- E12: Archived
In F1, type:=NOT(COUNTIFS(E1:E12,"*Draft*"))
This returns FALSE — because “Draft” appears 4 times. Change one “Draft” to “Sent”, and it flips to TRUE.
Why *Draft*? Wildcards let you catch “Draft v2”, “Re-Draft”, etc. But be warned: COUNTIFS is case-insensitive and *only* supports * and ?. No regex. No lookahead.
If you want to exclude *rows where column E includes “Draft”*, pair this with FILTER:=FILTER(A1:C12,NOT(COUNTIFS(E1:E12,"*Draft*"))) — nope, that’s wrong. That checks the *entire range* once. To filter row-by-row, use:=FILTER(A1:C12,ISERROR(SEARCH("Draft",E1:E12))).
That’s the counterintuitive part: COUNTIFS answers “is it anywhere?”, but row-level exclusion needs element-wise logic — so go back to SEARCH.
Cheat Sheet
| Goal | Formula | Shortcut / Tip |
|---|---|---|
| Cell does NOT contain "test" | =ISERROR(SEARCH("test",A1)) |
Alt+M, V to toggle formula view |
| Filter rows where B2:B20 does NOT include "LLC" | =FILTER(A2:C20,ISERROR(SEARCH("LLC",B2:B20))) |
Press Ctrl+Shift+Enter only in pre-365 Excel (not needed now) |
| Count entries that do NOT include "Jan" in C2:C100 | =SUMPRODUCT(--ISERROR(SEARCH("Jan",C2:C100))) |
SUMPRODUCT handles arrays natively — no Ctrl+Shift+Enter |
| Highlight cells NOT containing "@alibaba.com" | Conditional Formatting → New Rule → Use formula:=ISERROR(SEARCH("@alibaba.com",A1)) |
Apply to A1:A1000 — relative reference matters |