In daily work we may have multiple worksheets with the same template in excel. So, if we create a filter on column A on worksheet1, in most time we need to create filter on column A for the other worksheets as well. If we create them on worksheets manually, it spends al lot of time and it is very bothersome. We need a convenient way to create filters immediately. This article will introduce you a trick to create filters applied on multiple worksheets at one time via VBA code. If you are not good at coding, you can just copy and paste the code in below article directly.
Prepare two tables with the same template.
Suppose we want to create filter on Level column to filter student whose level is ‘A’, how can we create filter on two worksheets simultaneously?
Method: Create Filter on Multiple Worksheets Via VBA Code
Step 1: On current visible worksheet, right click on sheet name tab to load Sheet management menu. Select View Code, Microsoft Visual Basic for Applications window pops up.
Or you can enter Microsoft Visual Basic for Applications window via Developer->Visual Basic. You can also press Alt + F11 keys simultaneously to open it.
Step 2: In Microsoft Visual Basic for Applications window, click Insert->Module, enter below code in Module1:
Sub autofilter1() Dim ws As Worksheet On Error Resume Next For Each ws In Worksheets ws.Range("$D$1").autofilter 4, "=A" Next End Sub
$D$1 indicates the position (or column) we want to create filter for; autofilter 4 indicates the number of column, if we want to filter on column A, here we type autofilter 1; ‘=A’ is the criteria.
Step 3: Save code, see screenshot below.
Step 4: Don’t quit current page, press F5 to trigger Macro directly.
If you already quit current page, you can click Developer->Macros to run Macro.
Step 5: Select Sheet1.autofilter1, click Run.
Step 6: Quit Microsoft Visual Basic for Applications window. Verify that filters are created on both worksheet1 and worksheet2. Level A is filtered properly on two worksheets.
- If we want to filter where score>=80, we can enter below code:
Sub autofilter2() Dim ws As Worksheet On Error Resume Next For Each ws In Worksheets ws.Range("$C$1").autofilter 3, ">=80" Next End Sub
Run F5 and verify filter is applied on two worksheets properly.