in der UDF ...
26.01.2015 09:00:58
Klaus
... kann man natürlich die RANGE eindampfen, aber das halte ich nicht für den richtigen Weg. Wenn du, der User, eine ganze Spalte als Bereich angibst obwohl A1:A150 vielleicht gereicht hätte bist du doch selber Schuld :-)
Davon abgesehen bringt das Bereich-Eingrenzen nicht viel, denn:
For Each r In SuchSpalte
If r.Value = Kriterium Then
BisherGefunden = BisherGefunden + 1
If BisherGefunden = FindeAnzahl Then
XVerweis = r.Offset(0, IndexUmSpalten)
Exit For
End If
End If
Next r
Mal angenommen, es wird in A1:A10000 gesucht, dann sind das theoretisch 10.000 Schleifendurchläufe. Ich bilde mir ein, dass "Exit For" die Schleife beendet bevor die 10.000 erreicht werden. Wenn dein Suchbegriff in A5 und A7 steht, rennt die Schleife 7x durch und bricht dann ab.
Wenn es den Suchbegriff nicht gibt, rennt der Zähler natürlich bis 10.000 hoch.
Bessere Idee:
VOR der Schleife prüfen, ob es überhaupt ein Suchergebniss geben kann. Wenn nicht, auch die Schleife nicht durchrennen lassen. Makro könnte dann so aussehen:
Option Explicit
Public Function XVerweis(Kriterium As String, SuchSpalte As Range, IndexUmSpalten As Long, _
FindeAnzahl As Long)
Dim r As Range
Dim BisherGefunden As Long
BisherGefunden = 0
If Application.WorksheetFunction.CountIf(SuchSpalte, Kriterium)
Übrigens: Noch schneller wäre die Lösung mit Hilfsspalten :-) du legst dir selber Steine in den Weg.
Grüße,
Klaus M.vdT.