Option Explicit
Private OldSelectedCell As Range
Public Property Set CurrentCell(Cell As Range)
Set OldSelectedCell = Cell
End Property
Private Sub Worksheet_Activate()
Set OldSelectedCell = ActiveCell
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim CurrentAddress() As Variant, NextAddress() As Variant
Dim Index As Long
CurrentAddress = Array("B4", "M4", "B6", "K6", "B8", "K8", "O8", "P8", "B10", "B12", "I12", "K12", "M12", "B14", "K14", "B16", "E16", "I16", "K16", "B18", "C20", "L20", "B22", "L22", "E23", "L23", "B25", "L25", "H26", "J26", "D28", "F28", "H28", "J28", "D29", "F29", "H29", "J29", "B30", "L30", "G31", "J31", "F32", "L32", "B33", "L33", "B34", "L34", "P22", "P23", "M26", "P26", "M28", "P28", "M29", "P29", "M31", "P31", "M32", "P32", "M33", "P33", "M34")
NextAddress = Array("M4", "B6", "K6", "B8", "K8", "O8", "P8", "B10", "B12", "I12", "K12", "M12", "B14", "K14", "B16", "E16", "I16", "K16", "B18", "C20", "L20", "B22", "L22", "E23", "L23", "B25", "L25", "H26", "J26", "D28", "F28", "H28", "J28", "D29", "F29", "H29", "J29", "B30", "L30", "G31", "J31", "F32", "L32", "B33", "L33", "B34", "L34", "P22", "P23", "M26", "P26", "M28", "P28", "M29", "P29", "M31", "P31", "M32", "P32", "M33", "P33", "M34", "B4")
On Error Resume Next
Index = Application.Match(OldSelectedCell.Address(0, 0), CurrentAddress, 0)
On Error GoTo 0
If Not Index = 0 Then
Range(NextAddress(Index - 1)).Select
Set OldSelectedCell = ActiveCell
End If
End Sub