Microsoft Excel

Herbers Excel/VBA-Archiv

Suche nach sichändernden Suchbegriff

Betrifft: Suche nach sichändernden Suchbegriff von: Hannah XYZZ
Geschrieben am: 24.08.2020 13:33:15

Liebe Community,

ich möchte gerne die Zeile des jeweiligen Suchbegriffs erfassen.
Der Suchbegriff ändert sich dynamisch (in meinem Versuch als "Identifikation" bezeichnet")

Bei meinem aktuellem Versuch erhalte ich jedoch jedes Mal die Zeile des ersten Suchbegriffs. Ich vermute, dass das an dem Befehl .row liegt, dass dieser die erste Zeile meines "finden"-Bereichs gibt.

Mit Loop Schleife (also zB. Set finden = Columns(1).FindNext(finden)
Loop While Not finden Is Nothing And treffer <> finden.Address ) kann ich das Problem nicht lösen, da zwischen der Suche nach den Suchbegriffen andere Berechnungen durchgeführt werden und der Suchen-Sub immer nur bei einer bestimmten Kennzahl aufgerufen wird.

Danke schon mal!


Betrifft: AW: Suche nach sichändernden Suchbegriff
von: Rudi Maintaire
Geschrieben am: 24.08.2020 13:59:36

hallo,
müsste doch
treffer=finden.Address

heißen

Betrifft: AW: Suche nach sichändernden Suchbegriff
von: Hannah XYZZ
Geschrieben am: 24.08.2020 14:45:02

Hallo

danke für die schnelle Antwort.
Bei finden.Address erhalte ich dann ja aber auch die Spalte (also z.B. $A$38)

Ich benötige für die fortlaufende Berechnung aber nur die Zeile (also z.B. 38)

Hast du dafür eine Lösung?

Danke!

Betrifft: AW: Suche nach sichändernden Suchbegriff
von: Alen
Geschrieben am: 24.08.2020 15:17:29

Hallo Hannah,

sollte eigentlich mit der Loop funktionieren? Hätte die Loop so gemacht:
With Columns(33)

    Set finden = .Find(What:=Identifikation & "_n")

    If Not finden Is Nothing Then
        Do
            treffer = finden.Row
            Set var = .FindNext(var)
        Loop While Not finden Is Nothing
    End If

End With

Durch Columns(33) wird das Programm langsam, weil die Methode Find in ALLEN Zeilen nachschaut.
Ich persönlich würde es mit einer For-Schleife machen - da diese schneller ist:
finden = Identifikation & "_n" 'finden auf string ändern
count = WorksheetFunction.CountIf(Range("AG:AG"), finden)
If Not count = 0 Then
    For i = 1 To letzteZeileSpalte33 'Die letzte Zeile in Spalte 33 muss bestimmt werden
        If Cells(i, 33) = finden Then
            treffer = i
        End If
    Next i
Else
    treffer = -99
End If
LG Alen

Betrifft: AW: Suche nach sichändernden Suchbegriff
von: Hannah XYZZ
Geschrieben am: 24.08.2020 15:54:54

@Alen, funktioniert super danke!

Habe mich für die For Schleife entschieden.

Bin jetzt aber leider auf ein weiteres Problem gestoßen.
Kurz zum Hintergrund: mit "treffer" will ich die n-Anzahl in den Spalten R:AF ermitteln. Wenn keine Werte vorhanden sind, steht in diesen Spalten jeweils -99.

Durch die aktuelle "treffer"-Suche lande ich leider oftmals bei der "falschen" n-Anzahl, also den -99 Werten.

Hast du eine Idee wie ich die Suche erweitern könnte, dass nur Zeilen, welche die Identifikation und keine -99 enthalten gesucht werden können?

Betrifft: AW: Suche nach sichändernden Suchbegriff
von: Werner
Geschrieben am: 24.08.2020 15:48:35

Hallo,

mir ist da etwas unklar.

Der Suchbegriff soll in Spalte 33 = AG gesucht werden?

Warum dann plötzlich Columns(1).FindNext(finden) FindNext in Spalte 1 = A ??

Und welchen "Treffer" willst du denn, den letzten?

Also zusammenfassend:
Du willst in Spalte 33 = AG nach Identifikation_n suchen und willst vom letzten Treffer in Spalte 33 die Zeilennummer haben??

Gruß Werner

Betrifft: AW: Suche nach sichändernden Suchbegriff
von: Hannah XYZZ
Geschrieben am: 24.08.2020 16:12:31

@Werner: Du willst in Spalte 33 = AG nach Identifikation_n suchen und willst vom letzten Treffer in Spalte 33 die Zeilennummer haben?? Ja bzw. es muss nicht der letzte sein, die Identifikation_n kommt häufiger vor, Bedingung dafür ist nur, dass Identifikation_n vorhanden und im Bereich R:AF (wie im letzten Post beschrieben) nicht nur aus -99 besteht.

Warum dann plötzlich Columns(1).FindNext(finden) FindNext in Spalte 1 = A ??
Das habe ich nur als Beispiel für eine Loop-Schleife gemeint.

Ich habe das Problem aber so eben gelöst, habe einen Bereich definiert um zu überprüfen, ob nur -99 vorhanden ist durch
    A = "R" & j
    B = "AF" & j
    Set BereichA = Range(A, B)

If Cells(j, 12) = "n" And WorksheetFunction.CountIf(BereichA, "<> -99") Then
        Identifikation = Cells(j, 10) & "_" & Cells(j, 2) & "_" & Cells(j, 12)
        Cells(j, 33) = Identifikation
        
    Else
        Identifikation = Cells(j, 10) & "_" & Cells(j, 2)
        Cells(j, 33) = Identifikation
        
    End If
Danke für eure Hilfe!

Beiträge aus dem Excel-Forum zum Thema "Suche nach sichändernden Suchbegriff"