Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
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
VBA - Find Funktion loopen
15.06.2020 22:11:29
Dominic
Hallo zusammen,
ich bin ratlos und habe alles probiert, habe gesucht, geforscht aber komme nicht so ganz weiter. Ich hoffe ihr könnt mir helfen. Es kann bestimmt sein, dass es die Lösung im Forum in irgendeiner Form schon gibt, aber seht mir es bitte nach, ich blicke auch bei den Lösungen nicht komplett durch.
Ich habe folgende Tabelle:
Spalte A: Namen von Personen
Zeile 1: Jahreszahlen
Die Tabelle gibt an welche Person sich in welchem Jahr auf welche Stelle beworben hat.
Jetzt möchte ich eine Schaltfläche einfügen, die beim Drücken:
- eine Sucheingabemaske beinhaltet und nach der jeweiligen Stelle fragt
- die eingegebene Stelle in der Tabelle sucht
- ein neues Arbeitsblatt mit dem Suchbegriff als Namen erzeugt
- in diesem Arbeitsblatt die Suchbegriffe wie folgt auflistet:
A1: Name1; B1: Jahreszahl der Bewerbung
A2: Name 2; B2: Jahreszahl der Bewerbung
etc.
Ich habe die Suche mit der Find-Funktion schon so hinbekommen, dass es funktioniert. Allerdings schaffe ich es nicht, eine Loop einzubauen, sodass die Suche nicht bei dem ersten Ergebnis abbricht.
Mein Code sieht wie folgt aus:
Public Sub suchen()
Dim finden As Range
Dim suchbegriff As String
Dim cell As Range
suchbegriff = InputBox( _
prompt:="Stelle eingeben:", _
Default:="Stelle")
ActiveWorkbook.Sheets.Add After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count)
ActiveSheet.name = suchbegriff
Worksheets("Tabelle 1").Activate
Set finden = Range("A2:D4").Find(what:=suchbegriff, MatchCase:=False, lookat:=xlPart)
Cells(finden.Row, 1).Select
With Worksheets(suchbegriff)
ActiveCell.Copy Destination:=.Range("A1").End(xlUp).Offset(0)
End With
Worksheets("Tabelle 1").Activate
Cells(1, finden.Column).Select
With Worksheets(suchbegriff)
ActiveCell.Copy Destination:=.Range("A1").End(xlUp).Offset(0, 1)
End With
End Sub
Kann mir da jemand weiterhelfen? Das wäre suuuuper nett von euch!
Vorab vielen Dank für eure Mühen!
Viele Grüße
Dominic

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Find Funktion loopen
15.06.2020 23:44:40
Dominic
Hallo Onur,
vielen Dank für die schnelle und kompetente Antwort!
Mit deinem Beispiel bin ich eigentlich ganz gut klar gekommen und habe den Code nun ändern können.
Ich habe allerdings ein Problem, das ich nicht hinbekomme:
Die Ergebnisse landen in der entsprechend neu erschaffenen Arbeitsmappe, allerdings werden die Ergebnisse nicht untereinander geschrieben, sondern werden bei mehreren Suchergebnissen überschrieben.
Die Ergebnisse sollen natürlich untereinander stehen.
Hat jemand eine Idee, wie ich das in meinen Code einbauen kann?
Public Sub suchen()
Dim finden As Range
Dim suchbegriff As String
Dim cell As Range
Dim wbbook As Workbook
Dim wsheet As Worksheet
Dim rnfind As Range
Dim rncheck As Range
Dim staddress As String
Set wbbook = ThisWorkbook
Set wsheet = wbbook.Worksheets("Tabelle 1")
Set rncheck = wsheet.Range("A1:F50").SpecialCells(xlCellTypeConstants)
suchbegriff = InputBox( _
prompt:="Stelle eingeben:", _
Default:="GST")
ActiveWorkbook.Sheets.Add After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count)
ActiveSheet.name = suchbegriff
Worksheets("Tabelle 1").Activate
With rncheck
Set rnfind = .Find(what:=suchbegriff, MatchCase:=False, lookat:=xlPart)
If Not rnfind Is Nothing Then
staddress = rnfind.Address
Do
Cells(rnfind.Row, 1).Select
With Sheets(suchbegriff)
ActiveCell.Copy Destination:=.Range("A1").End(xlUp).Offset(0, 0)
End With
Worksheets("Tabelle 1").Activate
Cells(1, rnfind.Column).Select
With Sheets(suchbegriff)
ActiveCell.Copy Destination:=.Range("A1").End(xlUp).Offset(0, 1)
End With
Set rnfind = .FindNext(rnfind)
Loop While Not rnfind Is Nothing And rnfind.Address  staddress
End If
End With
End Sub
Vielen Dank für eure Antworten!
Viele Grüße
Dominic
Anzeige
AW: VBA - Find Funktion loopen
15.06.2020 23:50:46
onur

ActiveCell.Copy Destination:=.Range("A1").End(xlUp).Offset(0, 1)
Nimmt immer die zweit-OBERSTE Zelle in der Spalte (xlUp >> nach OBEN).
ActiveCell.Copy Destination:=.Range("A1").End(xlDown).Offset(0, 1)

AW: VBA - Find Funktion loopen
16.06.2020 00:01:23
onur
Wenn das Ergebnis immer unter die letzte belegte Zelle in A soll, dann hast du aber Offset falsch.
Destination:=.Range("A1").End(xlDown).Offset(1, 0)

AW: VBA - Find Funktion loopen
16.06.2020 06:57:50
Dominic
Hallo Onur,
ich erhalte, wenn ich die Zeile(n) korrigiere den Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler in der Zeile
  • ActiveCell.Copy Destination:=.Range("A1").End(xlDown).Offset(1, 0)

  • Liegt es daran, dass in dem neu generierten Tabellenblatt suchergebnis noche keine Werte stehen? Jemand eine Idee?
    Anzeige
    AW: VBA - Find Funktion loopen
    16.06.2020 07:01:12
    onur
    Dann soll er eben das erste Ergebnis in A1 eintragen - also das erste Mal:
    ActiveCell.Copy Destination:=.Range("A1")
    AW: VBA - Find Funktion loopen
    16.06.2020 10:17:34
    Dominic
    Das Ganze habe ich versucht und die erste Kopierfunktion außerhalb des Loops gesetzt.
    Es ändert trotzdem nichts an dem o.g. Laufzeitfehler 1004 in der Loop bei o.g. Funktion.
    Der Übersichtlichkeit halber hier mein aktueller Code:
    Public Sub suchen()
    Dim finden As Range
    Dim suchbegriff As String
    Dim cell As Range
    Dim wbbook As Workbook
    Dim wsheet As Worksheet
    Dim rnfind As Range
    Dim rncheck As Range
    Dim staddress As String
    Set wbbook = ThisWorkbook
    Set wsheet = wbbook.Worksheets("Tabelle 1")
    Set rncheck = wsheet.Range("A1:F50").SpecialCells(xlCellTypeConstants)
    suchbegriff = InputBox( _
    prompt:="Stelle eingeben:", _
    Default:="GST")
    ActiveWorkbook.Sheets.Add After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count)
    ActiveSheet.name = suchbegriff
    Worksheets("Tabelle 1").Activate
    With rncheck
    Set rnfind = .Find(what:=suchbegriff, MatchCase:=False, lookat:=xlPart)
    If Not rnfind Is Nothing Then
    staddress = rnfind.Address
    Cells(rnfind.Row, 1).Select
    With Sheets(suchbegriff)
    ActiveCell.Copy Destination:=.Range("A1")
    End With
    Worksheets("Tabelle 1").Activate
    Cells(1, rnfind.Column).Select
    With Sheets(suchbegriff)
    ActiveCell.Copy Destination:=.Range("A1").Offset(0, 1)
    End With
    Set rnfind = .FindNext(rnfind)
    Do
    Cells(rnfind.Row, 1).Select
    With Sheets(suchbegriff)
    ActiveCell.Copy Destination:=.Range("A2").End(xlDown).Offset(1, 0)
    End With
    Worksheets("Tabelle 1").Activate
    Cells(1, rnfind.Column).Select
    With Sheets(suchbegriff)
    ActiveCell.Copy Destination:=.Range("A2").End(xlDown).Offset(1, 1)
    End With
    Set rnfind = .FindNext(rnfind)
    Loop While Not rnfind Is Nothing And rnfind.Address  staddress
    End If
    End With
    End Sub
    
    Vielen Dank für die Hilfe!
    Anzeige
    AW: VBA - Find Funktion loopen
    16.06.2020 17:37:55
    onur
    Poste besser mal die Datei (mit Beispiel, wie es nachher aussehen soll)- durch dein Makro blicke ich nicht mehr durch.
    AW: VBA - Find Funktion loopen
    16.06.2020 14:03:26
    Gerd
    Moin
    Option Explicit
    Public Sub suchen()
    Dim suchbegriff As String
    Dim rncheck As Range
    Dim rnfind As Range
    Dim staddress As String
    Dim lngziel As Long
    With ThisWorkbook
    Set rncheck = .Worksheets("Tabelle 1").Range("B2:F50")
    suchbegriff = InputBox(prompt:="Stelle eingeben:", Default:="GST")
    .Sheets.Add After:=.Worksheets(.Worksheets.Count)
    End With
    ActiveSheet.Name = suchbegriff
    Set rnfind = rncheck.Find(what:=suchbegriff, MatchCase:=False, lookat:=xlPart)
    If Not rnfind Is Nothing Then
    staddress = rnfind.Address
    Do
    With Sheets(suchbegriff)
    If .Range("A1") = "" Then
    lngziel = 1
    Else
    lngziel = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    End If
    .Cells(lngziel, 1) = rnfind.Offset(0, -rnfind.Column + 1).Value
    .Cells(lngziel, 2) = rnfind.Offset(-rnfind.Row + 1, 0).Value
    End With
    Set rnfind = rncheck.FindNext(rnfind)
    If rnfind Is Nothing Then Exit Do
    Loop Until rnfind.Address = staddress
    End If
    End Sub
    

    Gruß Gerd
    Anzeige
    AW: VBA - Find Funktion loopen
    16.06.2020 21:16:48
    Dominic
    Hallo Gerd,
    vielen lieben Dank, es klappt genauso, wie ich es wollte!
    Jetzt werde ich mich mal ransetzen und den Code versuchen zu verstehen.
    Dir und Onur vielen Dank für eure Hilfe!
    Viele Grüße
    Dominic

    120 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige