AW: kurz und elegant mit Worksheetfunction.Match
19.07.2008 19:47:00
Daniel
HI
hier noch ne Variante:
Dim Zeile as long
Zeile = 0
on error Resume Next
Zeile = Worksheetfunction.Match(Sheets("Tabelle1").Range("G3").value, _
Sheets("Tabelle2").Range("A1:A1000").value, 0)
on error goto 0
If Zeile = 0 then
msgbox "Wert wurde nicht gefunden"
else
msgbox "Wert gefunden in Zeile: " & Zeile
end if
wenn sichergestellt ist, daß der gesuchte Wert auch in der Datenliste vorkommt und die Datenliste sortiert ist, dann würde auch dashier reichen (ist von der Performance bei grossen Datensätzen auch wesentlich schneller):
Dim Zeile as long
Zeile = Worksheetfunction.Match(Sheets("Tabelle1").Range("G3").value, _
Sheets("Tabelle2").Range("A1:A1000").value, 1)
msgbox "Wert gefunden in Zeile: " & Zeilef
aber wie gesagt, es muss anderweitig abgesichert sein, daß der Gesuchte Wert auch vorkommt, da die 2. Variante im anderen Fall einfach den nächstkleineren Wert als Ergebnis nimmt.
Gruß, Daniel
PS zwei anmerkungen noch:
- der entscheidende Unterschied zwischen Variante 1 und 2 ist fett markiert.
- die MATCH-Funktion entspricht der Vergleichsfunktion in Excel, dh. der zurückgegebene Zeilenwert bezieht sich immer auf den angegeben Suchvektor.
nur wenn dieser in Zeile 1 beginnt, dann stimmt der Rückgabewert mit der Zeilen-Nr der Fundstelle überein.
ansonsten muss zum Ergebnis noch die Differenz zwischen der ersten Zeile des Suchvektors und 1 zum Ergebnis hinzuaddiert werden, damit das Ergebnis der absoluten Excel-Zeilen-Nr. der Fundstelle entspricht.
Beispiel:
Zeile = Worksheetfunction.Match(Range("G3").value, Range("A15:A1015").value, 0)+14
Gruß, Daniel