AW: Falsche Auswertung- nur jede zweite Zeile
17.07.2024 12:32:51
MCO
Hi!
Nach kleinen Änderungen sieht der Code so aus:
Sub Haus()
Dim rng As Range
Dim dbl_suchwert As String
Dim sfirstaddress As String
Dim sh_Übers As Worksheet 'sheet als Variable mit Namen
Application.ScreenUpdating = False 'Bildschirmaktualisierung aus: schneller
Set sh_Übers = Worksheets("Übersicht")
dbl_suchwert = sh_Übers.Range("F5")
With Sheets("Fassung") 'referenziert auf sheet
Set rng = .Range("A:E").Find(dbl_suchwert)
If Not rng Is Nothing Then
sfirstaddress = rng.Address
Do
.Range("A" & rng.Row & ":E" & rng.Row).Copy sh_Übers.Cells(Rows.Count, "I").End(xlUp).Offset(1, 0) 'direktkopie
Set rng = Range("A:E").FindNext(rng)
Loop While Not rng Is Nothing And rng.Address > sfirstaddress
Else
MsgBox "nicht gefunden"
End If
End With
End Sub
Geändert habe ich, dass der Suchbegriff nicht Typ LONG sein muss (Ganzzahl) sondern STRING (Zeichenfolge). Damit ist der Suchbegriff nicht mehr auf eine Zahl begrenzt.
Außerdem hab ich den Suchbereich von Spalte "A" auf "A:E" erweitert. Da eh nur die gefundene Zeile benötigt wird und alles kopiert wird, ist es (fast) egal.
Mir fällt gerade auf, dass ja A + B den gleichen Inhalt haben, damit werden die auch doppelt gefunden :-(
Wir ändern den Bereich also Auf "B:E".
Anpassen:
Schieb den Code vom Tabellenblatt ins Modul1!
Ansonsten läuft das folgende nicht sauber!
Ich vermute, die nächste Frage ist die nach dem nächsten Feld?
Vorschlag:
Wir ändern den Code so, dass das gewählte Feld gesucht wird. Probier es mal aus:
Sub Haus()
Dim rng As Range
Dim dbl_suchwert As String
Dim sfirstaddress As String
Dim sh_Übers As Worksheet 'sheet als Variable mit Namen
Dim gültig_rng As Range
Dim sel_ok
Set gültig_rng = ActiveSheet.Range("C5,F5,F7:G7,C7") 'suchZellen: Bereich festlegen
Set sel_ok = Application.Intersect(Selection, gültig_rng) 'Bereiche vergleichen
If sel_ok Is Nothing Then MsgBox "Keine gültige Zelle gewählt": Exit Sub 'Ausstieg A
If Selection = "" Then MsgBox "Kein Suchbegriff in der Zelle": Exit Sub 'Ausstieg B
If Range("I2") > "" Then Range("I2").CurrentRegion.ClearContents 'gefundenen Bereich löschen
Application.ScreenUpdating = False 'Bildschirmaktualisierung aus: schneller
Set sh_Übers = Worksheets("Übersicht")
dbl_suchwert = Selection
With Sheets("Fassung") 'referenziert auf sheet
Set such_rng = .Range("A:E")
Set rng = such_rng.Find(dbl_suchwert)
If Not rng Is Nothing Then
sfirstaddress = rng.Address
Do
.Range("A" & rng.Row & ":E" & rng.Row).Copy sh_Übers.Cells(Rows.Count, "I").End(xlUp).Offset(1, 0) 'direktkopie
Set rng = such_rng.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address > sfirstaddress
Else
MsgBox "nicht gefunden"
End If
End With
End Sub
Gruß, MCO