Analyzing datasets in modern spreadsheets often requires isolating specific rows based on evolving business criteria—such as pulling all orders from a specific sales representative, isolating transactions exceeding a certain monetary threshold, or viewing incomplete project tasks. Traditional spreadsheet methods rely on manual UI filter menus or copying and pasting filtered rows into new worksheets; however, manual filters conceal rows in place rather than creating clean separate reports, and copied data fails to reflect live updates. To generate clean, fully automated dynamic tables, Google Sheets provides the native FILTER function. The FILTER function pulls matching records from a source range and dynamically recalculates the output whenever the underlying source data changes.
How the FILTER Function Works in Google Sheets
The FILTER function belongs to Google Sheets’ dynamic array formula family:
- Dynamic Array Spilling: When you commit a FILTER formula into a single cell, Google Sheets evaluates the condition across the entire source range and spills matching results across adjacent rows and columns automatically.
- Real-Time Recalculation: As team members add new rows, edit numbers, or change statuses in the raw dataset, the filtered view updates instantaneously without manual formula dragging.
- Zero Source Data Modification: FILTER reads data non-destructively; original data tables, sorting arrangements, and cell formats remain completely unaltered.
- Multi-Condition Logic: Supports simultaneous AND logic (all conditions met) and OR logic (either condition met) across numeric, text, and date columns.
Understanding the FILTER Formula Syntax
The fundamental syntax for the function is structured as follows:
=FILTER(range, condition1, [condition2, ...])
- range: The target rectangular dataset you want to filter and display (e.g.,
A2:E100). - condition1: A single-column or single-row logical expression that evaluates to TRUE or FALSE for each record (e.g.,
B2:B100 = "Completed"). The condition array must share identical vertical height or horizontal width with the source range. - condition2 (Optional): Additional logical criteria that must also evaluate to TRUE.
Step-by-Step: Writing Your First FILTER Formula
To extract all sales leads assigned to a specific regional manager:
- Open your spreadsheet in Google Sheets.
- Select a new sheet or click an empty cell with ample room below and to the right (for example,
G2). - Enter the formula to extract rows from
A2:D50where columnCmatches the name “Sarah Jenkins”:=FILTER(A2:D50, C2:C50 = "Sarah Jenkins") - Press Enter. Google Sheets populates matching records across columns G through J automatically.
- Notice that if no records match, Google Sheets returns a
#N/Aerror. To provide a clean fallback message, wrap your expression withIFNA:=IFNA(FILTER(A2:D50, C2:C50 = "Sarah Jenkins"), "No matching records found")
Filtering with Multiple Conditions (AND / OR Logic)
Real-world analytical workflows frequently involve compound filtering parameters:
1. Applying AND Logic (All Conditions Must Be True)
To extract rows where the department is “Marketing” AND expenditure exceeds £5,000, simply separate conditions with commas:
=FILTER(A2:E100, B2:B100 = "Marketing", D2:D100 > 5000)
2. Applying OR Logic (Either Condition Can Be True)
When filtering records where the region is either “North” OR “South”, separate the boolean expressions using the plus (+) arithmetic operator wrapped in parentheses:
=FILTER(A2:E100, (B2:B100 = "North") + (B2:B100 = "South"))
The plus operator performs boolean addition, matching any row where either condition evaluates to true.
Combining FILTER with SORT and UNIQUE
Because Google Sheets supports functional nesting, you can chain multiple array formulas together to create polished analytical summaries:
To filter active customer accounts, remove duplicate company names, and sort the output alphabetically:
=SORT(UNIQUE(FILTER(A2:A100, B2:B100 = "Active")), 1, TRUE)
FILTER Function vs Standard Filter Views vs QUERY
| Feature | FILTER Function | Standard Filter Views | QUERY Function |
|---|---|---|---|
| Output Location | New destination cells (spilled array) | In-place hiding of source rows | New destination cells |
| Dynamic Updating | Automatic in real time | Requires manual view refresh | Automatic in real time |
| Multi-User Conflict | Zero (separate output grid) | Affects view if not using view modes | Zero |
| Formula Complexity | Intuitive spreadsheet syntax | No formulas (GUI menus) | Requires SQL-like string syntax |
| Mixed Data Type Handling | Preserves mixed numbers and text | Preserves mixed data | Prone to nullifying minority data types |
Troubleshooting Common FILTER Errors
If your FILTER formula returns an unexpected error flag:
- #REF! (Array result was not expanded): This occurs when existing text, numbers, or formatting obstruct the spill range. Clear all cells below and to the right of your formula to allow the array to expand freely.
- #VALUE! (FILTER range mismatch): Occurs when your condition range has a different number of rows than the source range (e.g., filtering
A2:E100using conditionB2:B80). Ensure start and end row numbers align identically. - #N/A (No matches): Returned when zero rows satisfy your conditions. Always wrap formulas with
IFNA(FILTER(...), "None").
Frequently Asked Questions
Can I filter across dates using the FILTER function?
Yes. When filtering by date, use the DATE function to construct reliable comparisons rather than text strings: =FILTER(A2:D50, B2:B50 >= DATE(2026, 1, 1)).
Can the FILTER function extract data from another sheet or workbook?
Yes. You can reference another tab in the same workbook directly (e.g., Sheet1!A2:E100). To filter data residing in an entirely separate Google Sheets file, combine FILTER with IMPORTRANGE.
Does the FILTER function preserve cell background colours and borders?
No. Dynamic array functions in Google Sheets pull data values (strings, numbers, dates, booleans), but do not carry over custom cell fills, fonts, or border styling.