Question: My goal is to message box the five largest values in a column. But because I am using ">" the values in the column before L are not counted for La or Lb for that matter. For example: 

```
7
8
5
3
6
2

```

L becomes `8`, but La (the second largest) becomes `6` (but should've been `7`), Lb (the third largest) becomes `2`, and Lc =`0`, Ld=`0`.

```
Sub maxtest3()

Dim L As Integer, La As Integer, Lb As Integer, Lc As Integer, Ld As Integer
Dim a As Variant
L = 0
La = 0
Lb = 0
Lc = 0
Ld = 0

For Each a In Range("A1:A20")
If a.Value > L Then
    L = a.Value
        Else
        If a.Value > La Then
        La = a.Value
            Else
            If a.Value > Lb Then
            Lb = a.Value
                Else
                If a.Value > Lc Then
                Lc = a.Value
                    Else
                    If a.Value > Ld Then
                    Ld = a.Value
                        Else
                    End If
                End If
            End If
        End If
    End If
Next
                MsgBox (L & " " & La & " " & Lb & " " & Lc & " " & Ld)
End Sub

```

I know whoever sees this has the ability to solve the problem with one line of code but, please, restrain yourself from doing so for the sake of educating a newbie.

Answer: 
Your nested `If ... Else ...` statements could be easier written as a [Select Case statement](https://msdn.microsoft.com/en-us/library/office/gg278665.aspx). It might even improve readability.

The problem was subsequent values overwriting previous ones. The existing values need to be pushed further down the queue before they are overwritten. While the following code is a bit verbose, it should adequately demonstrate the solution.

```
Sub maxtest3()
    Dim L As Variant, a As Range, rng As Range

    Set rng = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    ReDim L(1 To 5)

    For Each a In rng
        Select Case a.Value
            Case Is > L(1)
                L(5) = L(4)
                L(4) = L(3)
                L(3) = L(2)
                L(2) = L(1)
                L(1) = a.Value
            Case Is > L(2)
                L(5) = L(4)
                L(4) = L(3)
                L(3) = L(2)
                L(2) = a.Value
            Case Is > L(3)
                L(5) = L(4)
                L(4) = L(3)
                L(3) = a.Value
            Case Is > L(4)
                L(5) = L(4)
                L(4) = a.Value
            Case Is > L(5)
                L(5) = a.Value
        End Select
    Next a

    MsgBox Join(L, Chr(32))

End Sub

```

I've changed your L*x* vars to a simple one dimensional array. This allows the use of the [Join Function](https://msdn.microsoft.com/en-us/library/b65z3h4h%28v=vs.90%29.aspx) to simplify the string concatenation to the `MsgBox`.
I hope this helps. 

```
Sub maxtest3()

Dim L(4) As Integer
Dim Lp(4) As Integer
Dim i, j As Integer

Dim RC As Boolean

Dim a As Variant

For i = 0 To 4

    L(i) = 0

    For Each a In Range("A1:A20")

        'If the current cell location has been used before sets RC = False
        RC = True
        For j = 0 To i - 1
            If Lp(j) = a.Row Then RC = False
        Next j

        'If the current cell value is greater than the current value in L(i) 
        'AND the location has not been used already, sets L(i) to the current
        'value and sets Lp(i) to the location of the current value
        If a.Value > L(i) And RC = True Then
            L(i) = a.Value
            Lp(i) = a.Row
        End If
    Next
Next i

MsgBox (L(0) & " " & L(1) & " " & L(2) & " " & L(3) & " " & L(4))

```

End Sub

This program loops through the range selection five separate times. Each time it loops through it selects the next largest number. The L(i) and Lp(i) variables represent arrays of five elements each that will hold your five largest numbers and their positions in the range selection. This allows the program to skip numbers it has already selected as being larger.

Things to Consider:
If the same number appears more than once in the range of values, each instance can be selected as a 'largest' value. 

As currently written this program only considers positive integers. If all the numbers in the range were negative numbers it would return all zeros. To remedy that, change the initialization value for L(i) from 0 to -32768 (the largest negative value you can store in an Integer)