How to Get Cell Value After Filter Using Excel VBA?
If you frequently work with Excel spreadsheets that contain large datasets, you may often need to filter the data to focus on specific information. But what if you need to retrieve the value of a cell after applying a filter using VBA (Visual Basic for Applications)? In this article, weβll explore different methods to get cell value after filter using Excel VBA.
Understanding Filters in Excel
Before we dive into the VBA code, letβs briefly discuss what filters are in Excel. Filters allow you to display only the rows that meet specific criteria while hiding the rest of the data. This is particularly useful when working with large datasets, as it helps you focus on the relevant information.
To apply a filter in Excel, you can follow these steps:
- Select the range of cells you want to filter.
- Go to the Data tab on the Excel ribbon.
- Click on the Filter button in the Sort & Filter group.
- Excel will add drop-down arrows to the header row of your selected range.
- Click on the drop-down arrow for the column you want to filter.
- Choose the desired criteria to filter the data.
Types of Filters in Excel
Excel offers several types of filters to help you narrow down your data:
- Text Filters: These filters allow you to select specific text values, such as βEquals,β βContains,β βBegins With,β or βEnds With.β
- Number Filters: With number filters, you can filter based on numerical criteria, such as βGreater Than,β βLess Than,β βBetween,β or βTop 10.β
- Date Filters: Date filters enable you to filter data based on date ranges, such as βToday,β βYesterday,β βThis Week,β βLast Month,β or custom date ranges.
- Custom Filters: Custom filters give you the flexibility to create your own filtering criteria using logical operators like βANDβ and βOR.β
By using these filters effectively, you can quickly isolate the data you need and make your analysis more efficient.
Using VBA to Get Cell Value After Filter
Now that we understand how filters work in Excel, letβs explore how to use VBA to retrieve the value of a cell after applying a filter.
Method 1: Using the SpecialCells Method
One way to get the cell value after filter is by using the SpecialCells method in VBA. This method allows you to select specific cells based on certain criteria, such as visible cells after filtering.
Hereβs an example of how to use the SpecialCells method to get the value of a cell after filter:
Sub GetCellValueAfterFilter()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cellValue As Variant
    Set ws = ActiveSheet
    Set rng = ws.Range("A1")
    On Error Resume Next
    cellValue = ws.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Cells(1, 1).Value
    On Error GoTo 0
    If Not IsEmpty(cellValue) Then
        MsgBox "The value of the first visible cell is: " & cellValue
    Else
        MsgBox "No visible cells found after filter."
    End If
End SubLetβs break down the code:
- We declare variables to store the worksheet (ws), range (rng), and cell value (cellValue).
- We set wsto the active sheet andrngto cell A1 (you can change this to the desired cell reference).
- We use On Error Resume Nextto handle any errors that may occur if no visible cells are found after filtering.
- We use ws.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Cells(1, 1).Valueto retrieve the value of the first visible cell after filtering.
- We use On Error GoTo 0to resume normal error handling.
- We check if the cellValueis not empty. If itβs not empty, we display a message box with the cell value. Otherwise, we display a message indicating that no visible cells were found.
Handling Multiple Visible Cells
If you have multiple visible cells after filtering and want to retrieve their values, you can modify the code to loop through the visible cells. Hereβs an example:
Sub GetVisibleCellValues()
    Dim ws As Worksheet
    Dim rng As Range
    Dim visibleCells As Range
    Dim cell As Range
    Set ws = ActiveSheet
    Set rng = ws.Range("A1:A10")  ' Adjust the range as needed
    On Error Resume Next
    Set visibleCells = rng.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0
    If Not visibleCells Is Nothing Then
        For Each cell In visibleCells
            MsgBox "Value of cell " & cell.Address & " is: " & cell.Value
        Next cell
    Else
        MsgBox "No visible cells found after filter."
    End If
End SubIn this modified code:
- We declare variables to store the worksheet (ws), range (rng), visible cells (visibleCells), and individual cell (cell).
- We set wsto the active sheet andrngto the desired range (e.g., A1:A10). Adjust the range according to your needs.
- We use rng.SpecialCells(xlCellTypeVisible)to retrieve the visible cells after filtering and store them in thevisibleCellsrange object.
- We check if visibleCellsis notNothing, indicating that there are visible cells.
- If visible cells are found, we loop through each cell in visibleCellsusing aFor Eachloop and display the cell address and value in a message box.
- If no visible cells are found, we display a message indicating that no visible cells were found after filtering.
This approach allows you to handle scenarios where multiple cells are visible after filtering and retrieve their values accordingly.
Method 2: Using the Offset Property
Another approach to get the cell value after filter is by using the Offset property in combination with a loop. This method allows you to iterate through the visible cells and retrieve their values.
Hereβs an example of how to use the Offset property to get the value of a cell after filter:
Sub GetCellValueAfterFilterOffset()
    Dim ws As Worksheet
    Dim rng As Range
    Dim lastRow As Long
    Dim i As Long
    Dim cellValue As Variant
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    For i = 2 To lastRow
        Set rng = ws.Range("A" & i)
        If Not rng.EntireRow.Hidden Then
            cellValue = rng.Value
            MsgBox "The value of cell A" & i & " is: " & cellValue
            Exit For
        End If
    Next i
    If IsEmpty(cellValue) Then
        MsgBox "No visible cells found after filter."
    End If
End SubLetβs break down the code:
- We declare variables to store the worksheet (ws), range (rng), last row number (lastRow), loop counter (i), and cell value (cellValue).
- We set wsto the active sheet and determine the last row number in column A usingws.Cells(ws.Rows.Count, "A").End(xlUp).Row.
- We start a loop from the second row (assuming the first row contains headers) to the last row.
- In each iteration, we set rngto the cell in column A of the current row.
- We check if the entire row of the current cell is not hidden using rng.EntireRow.Hidden.
- If the row is not hidden, we retrieve the value of the cell using rng.Value, display it in a message box, and exit the loop usingExit For.
- If no visible cells are found after the loop ends, we display a message indicating that no visible cells were found.
Handling Multiple Columns
If you need to retrieve cell values from multiple columns after filtering, you can modify the code to iterate through the desired columns. Hereβs an example:
Sub GetCellValuesAfterFilterMultipleColumns()
    Dim ws As Worksheet
    Dim rng As Range
    Dim lastRow As Long
    Dim i As Long
    Dim j As Long
    Dim cellValue As Variant
    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    For i = 2 To lastRow
        For j = 1 To 3  ' Adjust the number of columns as needed
            Set rng = ws.Cells(i, j)
            If Not rng.EntireRow.Hidden Then
                cellValue = rng.Value
                MsgBox "The value of cell " & rng.Address & " is: " & cellValue
            End If
        Next j
    Next i
    If IsEmpty(cellValue) Then
        MsgBox "No visible cells found after filter."
    End If
End SubIn this modified code:
- We declare an additional variable jto represent the column index.
- We introduce another loop using For j = 1 To 3to iterate through the desired columns. Adjust the number of columns according to your needs.
- Inside the loop, we set rngto the cell at the intersection of the current row (i) and column (j) usingws.Cells(i, j).
- We check if the entire row of the current cell is not hidden using rng.EntireRow.Hidden.
- If the row is not hidden, we retrieve the value of the cell using rng.Valueand display it in a message box along with the cell address.
- If no visible cells are found after both loops end, we display a message indicating that no visible cells were found.
This approach allows you to retrieve cell values from multiple columns after filtering, providing more flexibility in your data analysis.
Tips for Working with Filters and VBA
When working with filters and VBA in Excel, here are a few tips to keep in mind:
- Make sure to properly reference the worksheet and range objects in your VBA code to avoid errors.
- Be cautious when using On Error Resume Nextas it may hide potential errors. Use it sparingly and handle errors appropriately.
- If you need to retrieve multiple cell values after filtering, you can modify the code to store the values in an array or collection for further processing.
- When applying filters programmatically using VBA, ensure that the filter criteria are valid and match the data in your worksheet.
- Consider using meaningful variable names and adding comments to your code to enhance readability and maintainability.
- Test your VBA code thoroughly with different scenarios and datasets to ensure it works as expected.
Final Thoughts
Excel VBA provides powerful tools to automate tasks and interact with filtered data in spreadsheets. By using the SpecialCells method or the Offset property, you can easily retrieve the value of a cell after applying a filter.
Remember to adapt the code examples provided in this article to fit your specific requirements and worksheet structure. With a little practice and experimentation, youβll be able to efficiently work with filtered data using VBA in Excel.

Vaishvi Desai is the founder of Excelsamurai and a passionate Excel enthusiast with years of experience in data analysis and spreadsheet management. With a mission to help others harness the power of Excel, Vaishvi shares her expertise through concise, easy-to-follow tutorials on shortcuts, formulas, Pivot Tables, and VBA.
