Alf,
I'm not sure why you wouldn't just use the formula, but here's a modified version of your macro. The .Find method needs to use xlValues to find values resulting from formulas. I also included a change to provide unique ranking just in case there are any duplicate numbers in the top 15:
Sub find_max()
Dim MyRange As Range
Dim rngFound As Range
Dim LargeIndex As Long
Dim LargeValue As Long
Dim LastVal As Long
Dim OccurrenceNum As Long
Dim i As Long
Set MyRange = Range("D4", Cells(Rows.Count, "D").End(xlUp))
For LargeIndex = 1 To 15
LargeValue = Application.Large(MyRange, LargeIndex)
If LargeValue <> LastVal Then
MyRange.Find(LargeValue, , xlValues).Offset(, 1).Value = LargeIndex
LastVal = LargeValue
OccurrenceNum = 1
Else
OccurrenceNum = OccurrenceNum + 1
Set rngFound = MyRange.Find(LargeValue, , xlValues)
For i = 2 To OccurrenceNum
Set rngFound = MyRange.Find(LargeValue, rngFound, xlValues)
Next i
rngFound.Offset(, 1).Value = LargeIndex
End If
Next LargeIndex
End Sub
Bookmarks