Hallo,
eventuell hilft dieser Code weiter?
Sub Test()
Dim Rng As Range
Set Rng = FindItemCell("Auto", "Reifen", "gebraucht")
If Not Rng Is Nothing Then
Debug.Print Rng.Row
Rng.Select
Else
MsgBox "Nicht vorhanden"
End If
End Sub
' Aufruf: Beispiel: FindItemCell("Auto", "Reifen", "Neu")
Function FindItemCell(strTyp As String, strElement As String, strZustand As String) As Range
Dim rngDB As Range
Dim rngNames As Range, rngTyp As Range, rngElement As Range, rngZustand As Range, Rng As Range
Set rngDB = ThisWorkbook.Worksheets("Daten").Range("A1:I10") ' Alle Daten
Set rngNames = Intersect(rngDB.Rows(1), rngDB.Worksheet.UsedRange)
' Felder finden
For Each Rng In rngNames
If Rng.Value = "Typ" Then
Set rngTyp = Intersect(Rng.EntireColumn, rngDB)
ElseIf Rng.Value = "Element" Then
Set rngElement = Intersect(Rng.EntireColumn, rngDB)
ElseIf Rng.Value = "Zustand" Then
Set rngZustand = Intersect(Rng.EntireColumn, rngDB)
End If
Next
' Werte finden
For Each Rng In rngDB.Rows
If Intersect(Rng, rngTyp).Value = strTyp _
And Intersect(Rng, rngElement).Value = strElement _
And Intersect(Rng, rngZustand).Value = strZustand Then
Set FindItemCell = Rng
Exit For
End If
Next
End Function
Es wird vorausgesetzt, dass in der ersten Zeile in den Daten die Feldnamen stehen. Beispiel:
Typ |
Element |
Zustand |
Auto |
Reifen |
Neu |
Auto |
Reifen |
Alt |
Auto |
Reifen |
gebraucht |
Motorrad |
Sitz |
groß |
Motorrad |
Sitz |
klein |
Im VBA-Code wird in der Tabelle "Daten" nach den Einträgen gesucht. Bei Bedarf muss der Tabellename angepasst werden.
Als Rückgabe wird ein Range-Objekt der Zeile mit dem Treffer zurückgegeben. Im Range-Objekt kann die Zeilen-Nummer ausgelesen werden.
Im Test-Aufruf wird die Zeilennummer mit Rng.Row ausgelesen.
LG, BigBen
|