Alternative
As an alternative you could create a UserForm and take advantage of the Worksheet_SelectionChange method - whenever you select a row you'll see the whole range in a separate list box of a userform. As a surplus the active row will be marked, if you are positioned within rows 1 to 20:
Step 1
Write this code into your WorkSheet module (MySheetName)
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A1:P20")) Is Nothing Then
' Mark active row in list box
If Not UserForm1.ListBox1 Is Nothing Then
If Target.Row < UserForm1.ListBox1.ListCount Then
UserForm1.ListBox1.ListIndex = Target.Row
End If
End If
' Show user form
UserForm1.Show vbModeless
End If
End Sub
Step 2
Create a UserForm with the following needed controls: ListBox1 and CommandButton1. Then use F7 to write this code into your newly created UserForm1 module
Option Explicit
Private Sub CommandButton1_Click()
Me.Hide
End Sub
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("MySheetName")
Dim s As String ' range address string
Dim rng As Range ' (target) range
' set range to L1:P20
s = "L1:P20"
Set rng = ws.Range(s)
' define row source of list box via set range
Me.ListBox1.RowSource = s
End Sub
Private Sub UserForm_Layout()
Me.Caption = "My frozen Range L1:P20"
' Userform position in the top right corner
Me.StartUpPosition = 0
Me.Top = 0 ' or: Me.Top = Application.Top + ...
Me.Left = Application.Left + Application.Width - Me.Width
With Me.ListBox1
.ColumnCount = 5 ' five Columns L:P
.ColumnHeads = True
.ColumnWidths = .Width / .ColumnCount
End With
End Sub
Remark: This is only a simple example, which you can refine if you learn more about UserForms.