Application.Match Problem
#1
Moin!

Ich brauche mal wieder das Schwarmwissen des Forums. Ich habe eine Tabelle mit zwei Spalten. Die Werte lese ich ein Array ein und möchte jetzt einen Wert suchen und die Position im Array ermitteln. Aber irgendwie will das nicht funktionieren.

Hier mal der Code:
Code:
Sub Suchen()

    Dim rngData As Range
    Dim arr As Variant
    Dim Row As Variant

    Set rngData = Tabelle1.Range("A1").CurrentRegion
    ReDim arr(1 To rngData.Rows.Count, 1 To rngData.Columns.Count)
   
    arr = rngData.Value
   
    Row = Application.Match("Klaus", arr, 0)
   
    MsgBox CStr(Row)

End Sub

Ich bekomme in Row immer nur den Fehler 2042. Das Array wird richtig eingelesen. Anbei eine Test Tabelle.

Vielen Dank schon einmal.....

Gruß pjo12345


Angehängte Dateien
.xlsm   Match.xlsm (Größe: 226,79 KB / Downloads: 3)
Antworten Top
#2
Hi,

Mappe hab ich mir noch nicht angesehen, aber Match funktioniert nur mit einem EINdimensionalen Array.
Antworten Top
#3
Ok, das funktioniert. Wie mache ich das mit einem zweidimensionalen Array?

Oder anderes gesagt: Wie suche ich nur in einer Dimension?
Antworten Top
#4
Hi,

wenn Du nur in Spalte A suchen möchtest, dann reicht das hier:

Code:
Sub Suchen()
Dim rngData As Range
Dim Row As Variant
Set rngData = Tabelle1.Columns(1)
Row = Application.Match("Klaus", rngData, 0)
MsgBox CStr(Row)
End Sub
Antworten Top
#5
Hallo,

Code:
Sub Suchen()
    MsgBox CStr(Application.Match("Klaus", Tabelle1.Range("A1").CurrentRegion.Columns(1), 0))
End Sub

Gruß, Uwe
Antworten Top
#6
Danke euch. Funktioniert.
Antworten Top
#7
Eine Frage bzw. Problem hätte ich noch.

Kann man mit der Match Funktion auch alle gefundenen Übereinstimmungen im Array ermitteln und diese in ein neues Array schreiben?

Also mal angenommen:

A1 = abcd
A2 = abc
A3 = xyz
A4 = yxabc

Suchbegriff abc

Jetzt sollte der Suchbegriff in A1 und A2 gefunden werden. In A3 und A4 sollte nichts gefunden werden.

Meine Tabelle enthält ca. 30.000 Zeilen. DAs Ziel ist eigentlich so eine Art Live-Suche. Also wenn man das erste Zeichen ins Suchfeld eingibt soll gefiltert werden und beim zweiten dann weiter, usw.
Antworten Top
#8
Moin!
Da reicht (mittlerweile) eine Datengültigkeit, Liste:
   

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#9
Sowas hier ?

.xlsm   ErgebnisArray.xlsm (Größe: 145,07 KB / Downloads: 6)
Antworten Top
#10
@oee Jo das ist genau das was ich gesucht habe. Musste den Code nur ein bisschen anpassen, um meine Tabelle mit 30.000 Zeilen flüssiger zu filtern. Habe die Listbox nach der Schleife mit arr2 befüllt. Klappt hervorragend. Danke.

Code:
Private Sub TextBox1_Change()
    Dim rng, arr, i, arr2(), lz, txt, le, ii As Integer
    ReDim arr2(0)
    ListBox1.Clear 'Nur für Demozwecke
    lz = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    Set rng = Range("A1:A" & lz)
    arr = rng.Value
    txt = TextBox1.Text: le = Len(txt)
    For i = 1 To UBound(arr)
        If Left(arr(i, 1), le) = txt Then
'            ListBox1.AddItem arr(i, 1) 'Nur für Demozwecke
            ReDim Preserve arr2(ii)
            arr2(ii) = arr(i, 1) 'Array mit den Ergebnissen
            ii = ii + 1
        End If
    Next
    ListBox1.List = arr2 'Ergebnisse an Listbox übergeben
End Sub
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste