1.7k Aufrufe
Gefragt in Tabellenkalkulation von eleve Einsteiger_in (49 Punkte)
Hallo Leute,

hier mein Problem:

Ich habe in einem mehrdimensionalen Datenfeld 6 Spalten aus einem Tabellenblatt eingelesen.
Über eine Inputbox wird ein Suchbegriff sSuche abgefragt und nach dem Suchbegriff mit folgendem code gesucht. Bei einem Fund sollen Werte aus der entsprechenden Zeile im array in ein Listenfeld übertragen werden.

For Each rQuelle In myArray
If InStr(1, rQuelle, sSuche, vbTextCompare) > 0 Then ' hier soll ein Ereignis kommen!
Next rQuelle

Wie muss ich das Ereignis fomulieren?

Vielen Dank schon mal für Eure Zeit.

Eleve

3 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi eleve ^^

ein beispiel

gruss nighty

ausgehend von einem listenfeld ueber daten gueltigkeit was ueber einen rangebereich dargestellt wird

rangebereich fuer die liste = spalte h die ausgeblendet sein sollte

arraydaten spalten a bis f

spalte a suchbegriffe

spalten b bis f darstellung der liste

Option Explicit
Sub ArrSuche()
Dim Lzeile As Long, Zaehler As Long
Dim Suche As String
Dim Spalte As Integer
Lzeile = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
ReDim ArrQ(Lzeile, 6) As Variant
ReDim ArrZ(5, 1) As Variant
ArrQ() = Range("A1:F" & Lzeile)
ArrZ() = Range("A1:A" & 5)
Suche = InputBox("Eingabe")
For Zaehler = 1 To Lzeile
If ArrQ(Zaehler, 1) = Suche Then
For Spalte = 2 To 6
ArrZ(Spalte - 1, 1) = ArrQ(Zaehler, Spalte)
Next Spalte
Exit For
End If
Next Zaehler
Range("H1:H5") = ArrZ()
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

die findmethode haette hier sicherlich auch ausgereicht.da es ja wie es scheint nur 5 auszulesende zellen sind und geschwindigkeitsprobleme nicht zu erwarten sind,hab mich verleiten lassen ^^

hier mit der findmethode

Option Explicit
Sub FindSuche()
Dim Spalte As Integer
ReDim ArrZ(5, 1) As Variant
Dim suche As Range
ArrZ() = Range("A1:A" & 5)
Set suche = Worksheets(1).Range("A1:A" & Worksheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row).Find(InputBox("Eingabe"))
If Not suche Is Nothing Then
For Spalte = 2 To 6
ArrZ(Spalte - 1, 1) = Cells(suche.Row, Spalte)
Next Spalte
End If
Range("H1:H5") = ArrZ()
End Sub
0 Punkte
Beantwortet von eleve Einsteiger_in (49 Punkte)
Lieber nighty,

es läuft und spart mir jede Menge Zeit. Ich hatte mich wohl etwas falsch ausgedrückt, ich habe den Array -Ansatz gewähl, weil mir die find - Suche zu lange gedauert hat, da ich 6 Spalten mit jeweils ca.8000 Zeilen durchsuche, und das kann dann schon mal ein paar Sekunden dauern.

Vielen Dank für Deine schnelle Hilfe!

Eleve
...