Live training: next batches coming soon. Join the waitlist:Waitlists open:Developer Training →Developer →Copilot Studio Training →Copilot Studio →

Power Apps Remove vs RemoveIf: Which One to Use (Tested on a Collection)

Say you’re cleaning up a help desk queue of eight tickets in Power Apps. You want the closed ones gone, and you also want an X button that drops one ticket at a time.

In this tutorial, we’ll run power apps remove vs removeif side by side on the same eight-row collection: multiple conditions, removing several records at once, a gallery X button and duplicate rows.

Both jobs remove rows, but they need different functions. Remove wants the exact record (or a table of records). RemoveIf wants a condition and finds the rows for you.

My verdict after testing both on 11/01/2026: use RemoveIf when you can describe the rows (“every Closed ticket”), and use Remove when you already hold the record, like ThisItem in a gallery or First() of a collection.

Remove vs RemoveIf at a Glance

Both functions delete records from a data source, and a collection counts as one. If you need a refresher on what a collection is, start with our guide to creating a Power Apps collection. Here’s how the two compare in my tests and in Microsoft’s reference:

FeatureRemoveRemoveIf
What you hand itOne or more records, or a table of recordsOne or more conditions (true/false formulas)
Typical formulaRemove(colRm, ThisItem)RemoveIf(colRm, Status.Value = "Closed")
Multiple conditionsBuild the table with Filter() firstCommas mean AND; use || for OR
Remove multiple recordsYes: several records or a Filter() tableYes: every row where the conditions are true
Duplicate rows in a collectionOne copy, unless you add RemoveFlags.AllEach row is checked, so every match goes
CollectionsThe entire record must matchConditions use the column names
Where it runsBehavior formulas only (OnSelect, OnChange)Behavior formulas only
ReturnsThe modified data source as a tableThe modified data source as a table
Big data sourcesRemoves the records you passFew sources delegate it; others fetch matches up to 500/2000

Note: both functions also work on SharePoint lists and Dataverse tables, and there they delete real items. Every test in this post runs on a collection copy, so the list stays untouched.

Build the Demo App Step by Step

The tests run in one canvas app connected to a SharePoint list called Service Requests. It holds 623 help desk tickets with a Title, Status and Priority. Our post on creating a canvas app from a SharePoint list covers the connection in more depth.

Service Requests SharePoint list with Title, Status and Priority columns used for the Remove vs RemoveIf demo

Step 1: Start a new app. Go to make.powerapps.com and select Start with design on the Home page.

Power Apps maker portal Home page with the Start with design option boxed

Step 2: Create a blank canvas app. Select Create from blank. A canvas app is one where you place every control yourself.

Create from blank option for a new Power Apps canvas app

Step 3: Pick the Tablet layout. Choose Tablet and select Create. Power Apps Studio, the app editor, opens.

Start with a blank canvas dialog with the Tablet layout selected

Step 4: Add the data. Select Add data, search for SharePoint and pick the SharePoint connector. Paste your site URL and select Connect.

Add data pane in Power Apps Studio with the SharePoint connector selected

Step 5: Choose the list. Check Service Requests and select Connect. The list is now a data source, which is simply a place the app reads records from.

Choose a list dialog with the Service Requests list checked

Step 6: Add the demo screen. Select New screen > Blank. To rename it, select the screen and click its name in the Properties pane. I called it scrRemove.

Step 7: Add a Reset button. Insert a button, pick OnSelect in the property dropdown on the left of the fx formula bar, and paste this. It copies the first eight tickets into a collection named colRm:

ClearCollect(colRm,
    ShowColumns(
        FirstN(Sort('Service Requests', ID, SortOrder.Ascending), 8),
        ID, Title, Status, Priority
    )
)
Reset button OnSelect with ClearCollect and ShowColumns that copies 8 Service Requests rows into colRm

ShowColumns keeps only ID, Title, Status and Priority, and FirstN takes the first eight rows after sorting by ID. Our First, FirstN, Last and LastN guide explains those two helpers.

Step 8: Show the rows. Add a vertical gallery with Items set to colRm, and put a label in it with this Text, plus a label with "CountRows(colRm) = " & CountRows(colRm):

ThisItem.ID & "  " & ThisItem.Title & "  |  " & ThisItem.Status.Value & "  |  " & ThisItem.Priority.Value

Run the app with Play at the top right, or hold Alt and click a button in the editor. Press Ctrl+S to save. After Reset, the gallery shows the eight sample rows:

Preview of colRm with 8 sample help desk rows and CountRows equal to 8

Rows 2, 3 and 8 are Closed and High. Rows 1, 6 and 7 are New and Low, and rows 4 and 5 are In Progress and Normal. I click Reset before every test below.

Remove Needs the Record, RemoveIf Needs a Condition

This is the difference you hit first. Same colRm collection, two buttons. Button 1 uses Remove, so it needs a record. First() hands it one, and you can read more about that in getting the first item of a collection:

Remove(colRm, First(colRm))

Clicking it removed row 1, Laptop replacement #1000, and the count dropped to 7.

Button 2 uses RemoveIf, so it needs a rule instead. I didn’t point at any row; I only described them:

RemoveIf(colRm, Status.Value = "Closed")

After Reset and a click on button 2, the three Closed rows (2, 3 and 8) were gone and five rows were left.

RemoveIf Closed result in Preview with 5 rows left and the Closed rows removed

So the question to ask yourself is simple: do I already have the record, or can I only describe it? A record means Remove. A description means RemoveIf.

Power Apps RemoveIf Multiple Conditions: Commas Mean AND

Here’s the gotcha that surprises most people. Same eight rows again. Button 3 passes two conditions separated by a comma, hoping to remove Closed tickets and Low tickets:

RemoveIf(colRm, Status.Value = "Closed", Priority.Value = "Low")
Button 3 OnSelect with RemoveIf and two comma-separated conditions in Power Apps Studio

Nothing happened. The count stayed at 8, and there was no error either.

RemoveIf with Closed and Low conditions removed nothing and CountRows stays 8

That’s because RemoveIf removes a row only when every condition is true for that row. No ticket in colRm is both Closed and Low, so no row qualified. Microsoft’s reference says the same: with multiple conditions, all must evaluate to true.

When you mean “this OR that”, put both tests into one condition with || (you can also write Or()). Button 4 does that:

RemoveIf(colRm, Status.Value = "New" || Priority.Value = "High")
Button 4 OnSelect with RemoveIf and an OR condition using the double pipe operator

This time six rows went: the New ones (1, 6, 7) and the High ones (2, 3, 8). Only VPN access #1001 and Teams phone #1004 were left.

RemoveIf New or High result in Preview with only rows 4 and 5 left

Important: a comma-separated RemoveIf that removes nothing doesn’t warn you. If a cleanup button seems to do nothing, check whether you meant OR.

Remove Multiple Records From a Collection in Power Apps

Remove isn’t limited to one row. Hand it a table and it removes every record in that table. Same collection, button 5, with Filter() building the table of High tickets:

Remove(colRm, Filter(colRm, Priority.Value = "High"))
Button 5 OnSelect with Remove and a Filter table of High priority rows

The result was five rows, with 2, 3 and 8 gone. That’s exactly what RemoveIf(colRm, Status.Value = "Closed") did earlier, because in this sample the Closed rows are also the High rows.

For a plain condition, I’d write the RemoveIf version, since it’s shorter and easier to read. The Remove plus table form shines when the table already exists, like the rows a user checked in a gallery. Our post on removing items from a Power Apps collection has more collection-only examples.

Gallery X Button: Remove(colRm, ThisItem)

Inside a gallery, Remove is the natural pick because each row already knows its record. ThisItem is the record of the row you clicked. Same colRm gallery, now with an X button in the template and this gallery OnSelect-style formula on the button:

Remove(colRm, ThisItem)
X button inside the gallery template with OnSelect set to Remove colRm ThisItem

In Preview, I clicked the X on row 4. VPN access #1001 disappeared, and the count went from 8 to 7.

Gallery after clicking X on row 4 with VPN access removed and 7 rows left

You could write RemoveIf(colRm, ID = ThisItem.ID) instead, but there’s no reason to describe a record you already hold. For a SharePoint-backed gallery, see how to delete a SharePoint list item from a gallery with a confirmation step.

Duplicate Rows: Remove Takes One Copy, RemoveFlags.All Takes Them All

Collections can hold the same record twice, and that’s where Remove has an extra switch. Same eight rows, then I clicked “Add duplicate of row 1”:

Collect(colRm, First(colRm))

That made nine rows, with a second Laptop replacement #1000 at the end. Then button 6 ran Remove(colRm, First(colRm)). Only the first match went, so the count was 8 and the copy at the end stayed.

Remove first with a duplicate row removes only one copy and the Laptop copy stays at the end

Button 7 adds RemoveFlags.All, which tells Remove to delete every copy of the record:

Remove(colRm, First(colRm), RemoveFlags.All)
Button 7 OnSelect with Remove First colRm and RemoveFlags.All

After Reset, a new duplicate and button 7, both Laptop rows were gone and seven rows were left.

RemoveFlags.All result with both Laptop replacement rows removed and 7 rows left

RemoveIf has no flag because it checks every row anyway, so a condition that matches both copies takes both. To clean up duplicates that differ slightly, see removing duplicate rows from a collection.

Running Remove or RemoveIf on a SharePoint List

Everything above runs on colRm, a copy in the app’s memory. Point either function at 'Service Requests' and it deletes real list items. I never ran these demo buttons against the list for that reason.

Delegation matters too: the data source does the work on the server. Per Microsoft, only a few sources support it for RemoveIf. For the rest, Power Apps fetches the matching records (up to 500 or 2,000, or the data page size) and deletes them one call at a time. Our Power Apps delegation guide explains those limits.

Pro Tip: before a delete button touches a real list, add a confirmation. The Confirm function in Power Apps gives you a yes/no dialog in one line.

When to Use Remove Instead of RemoveIf

  • A gallery X or trash icon on each row: Remove(colRm, ThisItem).
  • The record comes from First(), LookUp() or Gallery.Selected: Remove.
  • You can describe the rows (“all Closed”, “Priority is Low”): RemoveIf.
  • Rows must meet two rules at once: RemoveIf with commas; either rule: RemoveIf with ||.
  • Exact duplicates in a collection must all go: Remove with RemoveFlags.All.
  • Empty the whole collection: neither; use Clear(colRm).

How to Switch From Remove + Filter to RemoveIf

If your app is full of Remove(x, Filter(x, condition)), the switch is mechanical. Same colRm example:

  1. Copy the condition from inside Filter(): Priority.Value = "High".
  2. Replace Remove(colRm, Filter(colRm, ...)) with RemoveIf(colRm, ...).
  3. If Filter() had several comma-separated conditions, keep the commas: both functions treat them as AND.
  4. Press Alt and click the button, then check the count label.
RemoveIf(colRm, Priority.Value = "High")

In short: Remove takes records, RemoveIf takes conditions, commas mean AND, and only Remove needs RemoveFlags.All for duplicates. For more on building apps like this, browse our Power Apps tutorials.

A few more collection tutorials I’d read next:

Frequently Asked Questions

How do I use RemoveIf with multiple conditions in Power Apps?

Separate the conditions with commas, like RemoveIf(colRm, Status.Value = “Closed”, Priority.Value = “Low”). A row is removed only when all of them are true. For OR logic, join the tests with || inside one condition.

Why did my RemoveIf not remove anything?

Usually because the comma-separated conditions are combined with AND and no row matches all of them. In my test, Closed plus Low removed nothing and showed no error. Switch to || if you meant either condition.

How do I remove multiple records from a collection in Power Apps?

Use RemoveIf with a condition, or pass Remove a table: Remove(colRm, Filter(colRm, Priority.Value = “High”)). Both removed the same three rows from my eight-row collection.

How do I remove all copies of a duplicate record in a collection?

Add RemoveFlags.All as the last argument: Remove(colRm, First(colRm), RemoveFlags.All). Without it, Remove deletes only one copy of the record.

Does RemoveIf delete items from my SharePoint list?

Yes, if the list is the data source you pass. RemoveIf on a collection only changes the collection. On large sources that don’t support delegation, Power Apps works on a limited set of matching records. See Microsoft’s Remove and RemoveIf reference.