Schwierigkeiten mit der Row-Eigenschaft
27.04.2017 20:24:57
Marc
Es geht um das wöchentliche Einsammeln von Grünabfällen.
Ich muss in einer sortierten Tabelle die Zeile finden, zu dem die Ausgangswerte Plz, Straße, ..., Hausnummer passen.
Mehrere Einträge pro Straße sind möglich, z.B wenn sie sehr lang ist.
Ziel ist am Ende eine einzige Zeilennummer, woraus sich dann der Leerungstag ermitteln lässt.
Spalte B enthält die Plz-Nummer
Spalte C enthält den Straßennamen
.
.
.
Spalte H die erste Hausnummer (>=)
Spalte I die letzte Hausnummer ( Der Wochentag, an dem geleert wird steht in der letzten Spalte.
Die Buchstaben bei den Hausnummern werden hier nicht berücksichtigt. Ansonsten wird das sehr kompliziert (da z.B. 100a > 1001) ...
Ich versuche eine Funktion zu schreiben, die, aufbauend auf der vorherigen Berechnung, immer mehr einengt.
Ich bin erst am Beginn. Die Funktionsweise für die Hausnummern ist noch nicht implementiert.
Das Problem entsteht durch das Row.
Wenn ich die Spalte vollständig durchsuchen lasse, so findet die Funktion die erste Zeilennummer.
Ab der zweiten Suche aber, da ich ja mit einem durch die erste Suche gefundenen Bereich arbeite, gibt die Funktion, wenn der gesuchte Wert bereits in der ersten Zeile steht, die Zeile plus eins aus.
Weiß jemand, wo mein Fehler liegt?
Ich möchte ungern mit Schleifen arbeiten wenn das nicht nötig ist.
Hier der Quelltext der Funktion und darunter eine Testsub.
Function Bereich(ByVal VarWert As Variant, ByVal StrSpaltenBuchstabe As String, _
ByVal LonErsteZeile As Long, ByVal LonLetzteZeile As Long) As String
' Sucht den Bereich des vorkommenden Wertes in der Tabelle (Bereich muss sortiert sein)
Dim StrSpalte As String
Dim LonZeile As Long
Dim RngZellenfund As Range
Dim LonAnzahl As Long
Dim StrAnfBereich As String
StrAnfBereich = StrSpaltenBuchstabe & LonErsteZeile & ":" & _
StrSpaltenBuchstabe & LonLetzteZeile
VarWert = UCase(Replace(VarWert, " ", ""))
StrSpaltenBuchstabe = StrSpaltenBuchstabe & ":" & StrSpaltenBuchstabe
LonAnzahl = WorksheetFunction.CountIf(Range(StrSpaltenBuchstabe), VarWert)
If Not LonAnzahl = 0 Then
Set RngZellenfund = Range(StrAnfBereich).Find(VarWert, LookAt:=xlWhole)
StrSpalte = Columns(RngZellenfund.Column).Address(False, False)
StrSpalte = Left(StrSpalte, InStr(StrSpalte, ":") - 1)
Bereich = StrSpalte & RngZellenfund.Row & ":" & StrSpalte & _
RngZellenfund.Row + LonAnzahl - 1
Else
Bereich = ""
End If
End Function
Private Sub TESTBEREICH()
Dim StrZielBereich As String
Dim VarWert As Variant
Dim StrSpalte As String
Dim LonErsteZeile As Long
Dim LonLetzteZeile As Long
VarWert = 4850
StrSpalte = "B"
LonErsteZeile = 22
LonLetzteZeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
StrZielBereich = Bereich(VarWert, StrSpalte, LonErsteZeile, LonLetzteZeile)
If Not StrZielBereich = "" Then
MsgBox "OK. Bereich = """ & StrZielBereich & """"
Else
MsgBox "Wert nicht gefunden"
End If
End Sub
Vielen Dank für Eure Hilfe.