Sub FilterByYear()
Dim filterYear As Long
Dim ws As Worksheet, summarySheet As Worksheet
Dim lastRow As Long
Dim rng As Range
Dim hiddenRange As Range
Dim cell As Range
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set summarySheet = ThisWorkbook.Worksheets("Summary")
filterYear = ws.Range("M2").Value
lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
For Each cell In ws.Rows("4:" & lastRow).Columns(1).Cells
If cell.EntireRow.Hidden Then
If hiddenRange Is Nothing Then
Set hiddenRange = cell.EntireRow
Else
Set hiddenRange = Union(hiddenRange, cell.EntireRow)
End If
End If
Next cell
ws.Rows("4:" & lastRow).EntireRow.Hidden = False
ws.Range("A3:K" & lastRow).AutoFilter Field:=2, _
Criteria1:=">=" & DateSerial(filterYear, 1, 1), _
Operator:=xlAnd, _
Criteria2:="<=" & DateSerial(filterYear, 12, 31)
On Error Resume Next
Set rng = ws.Range("A4:K" & lastRow).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not rng Is Nothing Then
summarySheet.Cells.Clear
ws.Rows(3).Copy Destination:=summarySheet.Range("A1")
rng.Copy Destination:=summarySheet.Range("A2")
Else
MsgBox "No data found for the specified year.", vbExclamation
End If
ws.AutoFilterMode = False
If Not hiddenRange Is Nothing Then
hiddenRange.EntireRow.Hidden = True
End If
End Sub