How to Use Macro to Delete Rows Based on Criteria in Excel (5 Methods)

While working in Excel, we often need to delete rows from our worksheet. If the dataset becomes large, then it’s more convenient to use a Macro rather than manually deleting rows from the worksheet. In this article, we will learn five effective approaches to using a macro to delete rows based on criteria in Excel. So, let’s start this article and explore these methods.


How to Use Macro To Delete Rows Based on Criteria in Excel: 5 Efficient Methods

In this section of the article, we will discuss five efficient methods to use macro to delete rows based on criteria in Excel. Let’s say, we have the Examination Records of Sunflower Kindergarten as our dataset. Our goal here is to delete rows based on criteria using macro.

First sample dataset

Not to mention, we used the Microsoft Excel 365 version for this article; however, you can use any version according to your preference.


1. Using Less Than or Equal to Criteria

In the first method, we will use the less than or equal to criteria to filter our dataset. Let’s say, we want to delete the rows, where a student got marks less than or equal to 40. Let’s use the steps mentioned below to do this.

Step 01: Insert New Module

  • Firstly, go to the Developer tab from Ribbon.
  • After that, choose the Visual Basic option from the Code group.

Using the Visual Basic option to create Module 

Consequently, the Microsoft Visual Basic for Applications window will appear on your worksheet.

Microsoft Visual Basic for Applications window

  • Afterward, go to the Insert tab in the Microsoft Visual Basic for Applications window.
  • Then, select the Module option from the drop-down.

Inserting Module to use macro to delete rows based on criteria in Excel

Step 02: Write and Save VBA Code

  • Firstly, write the following code in the newly created Module.
Sub Delete_Rows()
For i = 1 To Selection.Rows.Count
For j = 1 To Selection.Rows.Count
If Selection.Cells(j, 2) <= 40 Then
Rows(j + 3).EntireRow.Delete
End If
Next j
Next i
End Sub

Writing code in new Module to use macro to delete rows based on criteria in Excel

Code Breakdown

  • Firstly, we created a sub-procedure named Delete_Rows.
  • After that, we initiated two nested For Next loops.
  • In the 4th line of the code, we have used Cells(j,2) because 2 is the column number of our data set which holds the criteria (Marks in English).
  • And <= 40 is our given condition (Who got marks less than 40).
  • Here, we used an IF statement to check whether the condition is true or not for different values of j.
  • In the 5th line, we have used Rows(j+3) because 3 is the number of rows in my worksheet just before the first row of the data set (with the Column Headers).
  • After that, we ended the IF statement.
  • Then, we closed both For Next loops.
  • Finally, we ended the sub-procedure.
  • After writing the code, click on the Save option.

Saving VBA code

Step 03: Run Code to Delete Rows Based on Criteria

  • Following that, apply the keyboard shortcut ALT + F11 to return to the worksheet.
  • Afterward, choose the entire dataset.
  • Then, use the keyboard shortcut ALT + F8 to open the Macro dialogue box.
  • Subsequently, select the Delete_Rows  option.
  • Finally, click on Run.

Running VBA code to use macro to delete rows based on criteria

Consequently, the rows in which the value in the Marks in English column is less than or equal to 40, will be deleted, as shown in the following image.

Outputs obtained by using less than or equal to criteria to delete rows in Excel


2. Deleting Rows Depending on the Criteria of Starting with a Particular Character

Now, we will delete rows in Excel based on a particular starting character using a macro. For example, let’s try to delete the rows that have Student Names starting with “A”. Now, follow the instructions outlined in the following section.

Steps:

Sub Delete_Rows_Starting_with_A()
For i = 1 To Selection.Rows.Count
For j = 1 To Selection.Rows.Count
If Left(Selection.Cells(j, 1), 1) = "A" Then
Rows(j + 3).EntireRow.Delete
End If
Next j
Next i
End Sub

Writing VBA code in new Module to use macro to delete rows based on criteria in Excel

Code Breakdown

  • Firstly, we created a sub-procedure named Delete_Rows_Starting_with_A.
  • After that, we initiated two nested For…Next statements.
  • Then, we used an IF statement to check whether the condition is satisfied for different values of j.
  • In the condition, we used the Left function to extract the first letter of the cell (j,1).
  • Then, we deleted the rows with the names starting with “A”.
  • Following that, we ended the IF statement.
  • Then, we closed both For Next loops.
  • Lastly, we ended the sub-procedure.
  • After that, click on the Save option.

Saving VBA code

  • Subsequently, use the keyboard shortcut ALT + F11 to return to the worksheet.
  • After that, choose the entire dataset.
  • Now, apply the keyboard shortcut ALT + F8 to open the Macro dialogue box.
  • Following that, select the Delete_Rows_Starting_with_A option.
  • Finally, click on Run.

Running VBA code to delete rows based on criteria in Excel

As a result, the rows that have “A” as their starting character in the Student Name column, will be deleted, as demonstrated in the following picture.

Outputs obtained by using macro to delete rows with starting character “A”  in Excel


3. Inserting a Macro to Delete Rows Based on a Particular Text

At this stage, we will delete rows in Excel based on a particular text using macro. Let’s say we have the Book Record of Martin Bookstore as our dataset. Our goal is to delete rows that have the word “History” in the Name of the Book.

Second sample dataset

Steps:

Sub Delete_Rows_with_History()
Dim Count As Integer
For i = 1 To Selection.Rows.Count
For j = 1 To Selection.Rows.Count
Count = 0
Words = Split(Selection.Cells(j, 1))
For Each k In Words
Lower = LCase(k)
If Lower = "history" Then
Count = Count + 1
End If
Next k
If Count > 0 Then
Rows(j + 3).EntireRow.Delete
End If
Next j
Next i
End Sub

Writing the VBA code to use macro to delete rows based on a particular text in Excel

Code Breakdown

  • Firstly, we created a sub-procedure called Delete_Rows_with_History.
  • Following that, we introduced a variable named Count as Integer.
  • In the 6th line of the code, we have used Cells(j,1), because the criterion is in the 1st column (Name of the Book) of the data set.
  • If it is in the second column, use Cells (j,2). Similarly, for the 3rd column, use Cells(j,3), and so on.
  • And to delete the rows with the word anything other than “history”, replace it in the 6th line.
  • Also, always keep the search word in the lowercase form in the code. That means to remove rows with the word “Book”, always use “book” in the code.
  • Now, we ended the IF statement.
  • After that, we closed both For Next loops.
  • Finally, we ended the sub-procedure.
  • After writing the code, click on the Save option.

Saving the VBA code

  • Following that, use the keyboard shortcut ALT + F11 to return to the worksheet.
  • Now, choose the entire dataset.
  • After that, apply the keyboard shortcut ALT + F8 to open the Macro dialogue box.
  • Subsequently, select the Delete_Rows_with_History option.
  • Finally, click on Run.

Running macro in Excel to delete rows that have “History” in the book name 

Consequently, you will have the following output in your worksheet, as shown in the image below.

Outputs obtained by using macro to delete rows based on particular text criteria in Excel

Read More: Excel VBA to Delete Row If Cell Contains Partial Text


4. Implementing VBA Macro to Delete Rows Based on Multiple Criteria

In this section of the article, we will implement a VBA Macro to delete rows based on multiple criteria. In the previous examples, we used single criteria to delete rows. Here, we used the And function between the two conditions. So, both criteria should be satisfied to delete a particular row. Now, let’s follow the steps mentioned in the following section.

Steps:

Sub multiple_criteria()
For i = 1 To Selection.Rows.Count
For j = 1 To Selection.Rows.Count
If Left(Selection.Cells(j, 1), 1) = "M" And Selection.Cells(j, 2) < 50 Then
Rows(j + 3).EntireRow.Delete
End If
Next j
Next i
End Sub

Writing VBA code to use macro to delete rows based on multiple criteria in Excel

Code Breakdown

  • Firstly, we created a sub-procedure named multiple_criteria.
  • After that, we initiated two nested For…Next loops.
  • Then, we used an IF statement to check whether the given conditions are satisfied or not for various values of j. As the And statement is used, both conditions must be satisfied at the same time.
  • Now, we deleted the rows with names starting with “M” and marks less than 50.
  • Following that, we ended the IF statement.
  • Then, we closed both For…Next loops.
  • Lastly, we ended the sub-procedure.
  • After writing the code, click on the Save option.

Saving VBA code

  • After that, use the keyboard shortcut ALT + F11 to return to the worksheet.
  • Then, select the entire dataset.
  • Now, use the keyboard shortcut ALT + F8 to open the Macro dialogue box.
  • Afterward, choose the multiple_criteria option.
  • Finally, click on Run.

Running macro to delete rows based on multiple criteria in Excel

Consequently, the rows that have Student Name starting with the letter “M” and Marks in English that are less than 50 will be deleted.

Outputs got by using macro to delete rows based on multiple criteria in Excel


5. Deleting Rows Based on Criteria Defined by User

In the previous examples, we used pre-specified criteria in the VBA code. Now, we will take input from the user and use it as the criteria. Now, let’s follow the steps mentioned below to do this.

Steps:

Sub criteria_by_user()
Dim starting_letter As String
Dim minimun_number As String
starting_letter = InputBox("Enter the Starting Letter:", "Starting Letter")
minimun_number = InputBox("Enter the Minimun Number:", "Minimum Marks")
For i = 1 To Selection.Rows.Count
For j = 1 To Selection.Rows.Count
If Left(Selection.Cells(j, 1), 1) = starting_letter And _
Selection.Cells(j, 2) < minimun_number Then
Rows(j + 3).EntireRow.Delete
End If
Next j
Next i
End Sub

Writing VBA code to delete rows based on criteria defined by user in Excel

Code Breakdown

  • Firstly, we created a sub-procedure named criteria_by_user.
  • After that, we introduced two variables named starting_letter and minimun_number.
  • Then we used two InputBox functions to get inputs from the user and then assigned these values to the two variables that we declared earlier.
  • Following that, we initiated two nested For…Next statement.
  • Now, we used an IF…Then statement to check whether the given conditions are satisfied or not for various values of j. As the And function is used, both conditions must be satisfied at the same time.
  • Afterward, we deleted the rows with names starting with “M” and marks less than 50.
  • Next, we ended the IF statement.
  • After that, we closed both For Next loops.
  • Lastly, we ended the sub-procedure.
  • After writing the code, click on the Save option.

Saving VBA code

  • Following that, use the keyboard shortcut ALT + F11 to return to the worksheet.
  • Afterward, select the entire dataset.
  • Then, use the keyboard shortcut ALT + F8 to open the Macro dialogue box.
  • Now, choose the criteria_by_user option.
  • Subsequently, click on Run.

Running a macro to delete rows based on criteria defined by user in Excel

As a result, the Starting Letter dialogue box will appear on your worksheet.

  • Now, enter the starting letter for the Student Name column. In this case, we used the letter “M”.
  • Then, click OK.

Inserting the first criteria

After that, the Minimum Marks dialogue box will open on your worksheet.

  • Following that, insert the minimum number for the Marks in English column. Here, we inserted 50.
  • Next, click OK.

Entering the second criteria

Subsequently, you will have the following outputs, as demonstrated in the following image.

Outputs obtained by using a macro to delete rows based on multiple criteria defined by user in Excel

Read More: How to Delete Row Using Macro If Cell Contains 0 in Excel


How to Delete Blank Rows Using VBA in Excel?

While working in Excel, we often deal with datasets that have a lot of blank rows. Deleting these blank rows manually is a tiresome and time-consuming task. Now, we will use a VBA code to delete blank rows in Excel. Now, let’s use the steps outlined in the following section.

For demonstration, we added some blank rows to the dataset used in the first method.

First sample dataset with blank rows

Steps:

Sub delete_blank_rows()
Selection.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Writing VBA code to delete blank rows in Excel

Code Breakdown

  • Firstly, we created a sub-procedure called delete_blank_rows.
  • Then, we deleted the blank rows from the selected range.
  • Finally, we ended the sub-procedure.
  • After writing the code, click on the Save option.

Saving VBA code

  • After that, use the keyboard shortcut ALT + F11 to return to the worksheet.
  • Next, select the entire dataset.
  • Then, use the keyboard shortcut ALT + F8 to open the Macro dialogue box.
  • Afterward, choose the delete_blank_rows option.
  • Following that, click on Run.

Running macro to delete blank rows in Excel

Consequently, the blank rows will be deleted from your dataset, and you will have the following output.

Outputs obtained by using VBA to delete blank rows in Excel

Read More: Excel VBA: Delete Row If Cell Is Blank


Practice Section

In the Excel Workbook, we have provided a Practice Section on the right side of the worksheet. Please practice it yourself.

Sample Practice Section provided in each worksheet of the Practice Workbook.


Download Practice Workbook


Conclusion

So, these are the most common and effective methods you can use anytime while working with your Excel datasheet to use the macro to delete rows based on criteria in Excel. If you have any questions, suggestions, or feedback related to this article, you can comment below.


Related Articles

Get FREE Advanced Excel Exercises with Solutions!
Rifat Hassan
Rifat Hassan

Rifat Hassan, BSc, Electrical and Electronic Engineering, Bangladesh University of Engineering and Technology, has worked with the ExcelDemy project for almost 2 years. Within these 2 years, he has written over 250 articles. He has also conducted a few Boot Camp sessions on effective coding, especially Visual Basic for Applications (VBA). Currently, he is working as a Software Developer to develop and deploy additional add-ins to enhance the customers with a more sophisticated experience with Microsoft Office Suits,... Read Full Bio

We will be happy to hear your thoughts

Leave a reply

Advanced Excel Exercises with Solutions PDF

 

 

ExcelDemy
Logo