Gregor Y,
I really appreciate the work you have done..
But I think you have not seen one given by KVS.. ies
Function NthMatchNEW(ByVal Lvalue As Variant, Lrange As Variant, Mnum As Variant)
'For ARRAY and RANGE input
Dim M As Variant
Dim X As Integer, MatchNo As Integer

On Error Resume Next

M = Join(Application.Transpose(Lrange), "&,")
M = Join(Lrange, "&,")
M = "&," & M & "&,"
X = 1

For t = 1 To Mnum
    X = InStr(X, M, "&," & Lvalue & "&,")
    If X < y Then GoTo Line1
    X = X + 1
    y = X
Next t

NthMatchNEW = Int((Len(Left(M, y)) - Len(Replace(Left(M, y), "&,", ""))) / 2)

Line1:
If NthMatchNEW = 0 Then NthMatchNEW = "#ERROR"

End Function
The above code is for RANGE and ARRAY as well..
It uses fantastic string manipulation.. very very fast..
Try it for your performance test
here is one more link for performance appraisals..
Improving performance in excel
There are some codes for speed testing, must try..

Good Luck..