Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1612to1616
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Find-Befehl

Find-Befehl
07.03.2018 08:24:29
Axel
Guten Morgen, ich habe ein etwas für mich komplexere Herausforderung.
Ziel:
Ich möchte Tabelle A und B miteinander vergleichen. Wenn ein "String" in A vorkommt, der auch in B vorkommt, soll eine Zahl aus der Tabelle A ausgelesen werden und in die Tabelle B geschrieben werden.
Wie weit bin ich?
Im Moment versuche ich, mit "Find" zurechtzukommen. Bisher habe ich damit noch nicht gearbeitet. Wenn ihr mir bei meinem "Find"-Problem helft, kriege ich den Rest bestimmt alleine hin. Das habe ich bisher geschrieben:
  • 
    Sub Vergleich()
    Dim MappeV As Workbook
    Dim BlattV As Worksheet
    Dim MappeJ As Workbook
    Dim BlattJ As Worksheet
    Dim VormonatWS As String
    Dim AktuellWS As String
    Dim Zeile As Long
    Dim i As Integer
    Dim cl As Integer
    VormonatWS = Format(DateSerial(Year(Now()), Month(Now()) - 1, 1), "MMMM")
    ThisWorkbook.Sheets("Auflistung").Copy After:=ThisWorkbook.Sheets(1) 'kopiert mir ein Worksheet, _
    was dann umbenannt wird.
    ActiveSheet.Name = Format(Date, "MMMM") & "Vergleich"
    AktuellWS = ActiveWorkbook.ActiveSheet.Name
    Set MappeV = ThisWorkbook
    Set BlattV = MappeV.Worksheets(VormonatWS)
    Set MappeJ = ThisWorkbook
    Set BlattJ = MappeJ.Worksheets(AktuellWS)
    BlattJ.Columns("R:R").Insert Shift:=xlToRight
    Range("R2") = "Vormonat"
    BlattJ.Activate
    i = Cells(Rows.Count, 2).End(xlUp).Row
    For cl = 3 To i
    Zeile = BlattV.Columns("B:B").Find(What:=BlattJ.Cells(cl, 2), After:=ActiveCell, LookIn: _
    =xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Row
    MsgBox Zeile
    Next cl
    End Sub
    


  • Hier kommt ein Fehler beim Find-Befehl. Ich bin mir auch echt nicht sicher, ob ich den korrekten Ausdruck verwendet habe.
    Weiß jemand, was ich falsch gemacht habe?

    8
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Find-Befehl
    07.03.2018 08:30:14
    Hajo_Zi
    Die meisten bauen Deine Datei nicht nach. Die Zeit hat schon jemand investiert.
    Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
    Die meisten möchten es am Original testen um den gleichen Fehler zu erhalten.
    Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)
    es fehlt Ergebnis Nothing, würde ich mal vermuten.

    Anzeige
    AW: Find-Befehl
    07.03.2018 08:36:52
    Werner
    Hallo Axel,
    lass mal das ActiveCell weg.
    Zeile = BlattV.Columns("B:B").Find(What:=BlattJ.Cells(cl, 2), LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Row
    
    Gruß Werner
    AW: Find-Befehl
    07.03.2018 08:46:22
    Axel
    Super, vielen Dank!
    AW: Find-Befehl
    07.03.2018 08:49:52
    Werner
    Hallo Axel,
    bei deiner Version bräuchtest du aber auch noch eine Fehlerbehandlung für den Fall, dass dein "Suchbegriff" nicht vorhanden ist, sonst crasht dein Code nämlich.
    Ich würde eher dazu tendieren, nicht die Zeilennummer direkt ausgeben zu lassen sondern die Fundadresse in ein Range Objekt ausgeben zu lassen. Mit Zeile.Row kannst du dann auch auf die Zeile der Fundadresse zugreifen. Da wäre dann der Fall, dass der "Suchbegriff" nicht vorhanden ist einfach so abzufangen:
    Dim Zeile As Rang
    Set Zeile = BlattV.Columns("B:B").Find(What:=BlattJ.Cells(cl, 2), LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
    If Not Zeile Is Nothing Then
    MsgBox Zeile.Row
    Else
    MsgBox "nicht vorhanden"
    End If
    
    Gruß Werner
    Anzeige
    Für das Rang noch ein nachgeliefertes e ..As Range
    07.03.2018 08:50:50
    Werner
    AW: Find-Befehl
    07.03.2018 09:14:54
    Daniel
    HI
    da sind mehrere Probleme drin.
    1. das After:=ActiveCell hat dir Werner schon gezeigt.
    Problem ist hier, das die Zelle, die du bei AFTER angibst, zu dem durchsuchten Zellbereich gehören muss, also zu BlattV.Columns("B:B"). Das ist bei "ActiveCell" aber sehr unwahrscheinlich.
    Diesen Parameter kannst du einfach weglassen.
    2. du suchst mit LookIn:=xlFormulas in den Formeltexten. um in den Formelergebnissen zu suchen (also dem, was dir in der Tabelle angezeigt wird), müsstest du LookIn:=xlValues suchen.
    Stehen im durchsuchten Zellbereich keine Formeln sondern nur feste Werte, ist es egal, was du bei LookIn einträgst, stehen dort jedoch Formeln, musst du schon das richtige eintragen (und das ist in den meinsten Fällen xlValues)
    3. Wenn es vorkommen kann, dass der gesuchte Wert nicht vorkommt, darf man das Ergebnis von .FIND nicht sofort weiter verarbeiten (.Row), sondern muss die gefundene Zelle erstmal einer Range-Variablen zuweisen.
    das gibt keinen Fehler und man kann dann überprüfen, ob das .FIND erfolgreich war oder nicht:
    Dim rng as Range
    dim Zeile as Long
    Set rng = BlattV.Columns("B:B").Find(What:=BlattJ.Cells(cl, 2), LookIn:=xlFormulas, LookAt:= _
    xlPart, _
    SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:= _
    False)
    If Not rng is Nothing then
    Zeile = rng.Row
    Msgbox Zeile
    Else
    Msgbox "nicht gefunden"
    end if
    
    wobei ich mir grundsätzlich die Frage stelle, ob du die Aufgabe nicht auch einfach mit dem SVerweis lösen könntest.
    Gruß Daniel
    Anzeige
    AW: Find-Befehl
    07.03.2018 09:41:33
    Axel
    Vielen Dank an alle für die weiteren Tipps.
    Die schaue ich mir an.
    Gerne u. Danke für die Rückmeldung. o.w.T.
    07.03.2018 09:45:54
    Werner

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige