Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Suchen und kopieren von bestimmten Zelleninhalten

Suchen und kopieren von bestimmten Zelleninhalten
28.08.2008 07:41:27
bestimmten
Hey!
Ich möchte gerne per Makro in einem bestimmten Bereich nach einen bestimmten Inhalt einer Zelle suchen.
Dieser Wert (Inhalt) kann auch durchaus mehrmals vorkommen.
Wenn ich einen gefunden habe kopiere diesen Wert (Inhalt) in eine andere Zelle oder in eine Zelle eines anderen Tabellenblattes und dann suche weiter, bis der nächte Wert (Inhalt) gefunden wurde oder der Suchbereich am Ende angelangt ist.
Die Frage kann ich ssoetwas mit VBA erschlagen? Und wenn ja wie?
Wer weis hier weiter?
Gruß Horst
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Suchen und kopieren von bestimmten Zelleninhalten
28.08.2008 08:52:00
bestimmten
Hallo,
ja das geht.
Hier ein Beispiel, sucht den wert in Spalte A und kopiert die ganze Zeile nach Tabelle2
Modul Modul1
Option Explicit 
 
Sub test() 
Dim Anzahl As Long, A As Long 
Dim SZelle As Range 
Dim Suchwert As String 
 
Suchwert = "Haus" 'Suchbegriff 
 
Anzahl = Application.WorksheetFunction.CountIf(Tabelle1.Range("A:A"), Suchwert) 
 
For A = 1 To Anzahl 
 If A = 1 Then 
  Set SZelle = Tabelle1.Range("A:A").Find(Suchwert) 
  Rows(SZelle.Row).Copy Tabelle2.Cells(A, 1) 'ganze Zeile Kopieren 
 Else 
  Set SZelle = Tabelle1.Range("A:A").FindNext(SZelle) 
  Rows(SZelle.Row).Copy Tabelle2.Cells(A, 1) 'ganze Zeile Kopieren 
 End If 
Next A 
 
End Sub 


Gruß Tino

www.VBA-Excel.de


Anzeige
AW: Suchen und kopieren von bestimmten Zelleninhal
28.08.2008 09:03:00
bestimmten
Hallo Horst
Als Beispiel:
Dein zu durchsuchender Bereich wäre "A1:E20"
gesucht wird nach dem String "Hallo" in den Zellen des Bereichs "A1:E20"
Ziel bei Fund ist Tabelle2 Spalte A.
Dorthin werden die Werte der Reihe nach geschrieben.
in ein Modul

Option Explicit
Public Loletzte As Long

Sub ml() Dim Loletzte As Long Dim RngZ As Range For Each RngZ In Worksheets("Tabelle1").Range("A1:E20") Loletzte = Worksheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row + 1 If RngZ Like "*Hallo*" Then Worksheets("Tabelle2").Cells(Loletzte, 1) = RngZ Next End Sub


Wenn Du den Code 2x laufen läßt schreibt Excel die Werte wieder darunter, also evtl. den Bereich in der Zieltabelle vorher löschen.
Die letzte Zelle in der Zieltabelle musst Du noch abfangen, sonst gibts ein Error
Gruß Matthias

Anzeige
oder so ...
28.08.2008 09:12:00
Matthias
Hallo nochmal
oder so:

Option Explicit
Sub Lauf2()
Dim RngZ As Range, x As Long
x = 0
Worksheets("Tabelle2").Columns(1).ClearContents 'hier wird Ziel erst geleert
For Each RngZ In Worksheets("Tabelle1").Range("A1:E20")
If RngZ Like "*Hallo*" Then x = x + 1: Worksheets("Tabelle2").Cells(x, 1) = RngZ
Next
End Sub


Gruß Matthias

Anzeige
AW: oder so ...
28.08.2008 11:43:25
Horst
hallo Mathias!
Vielen dank.
Nun möchte ich das ganze Verbinden.
Heißt erst in einer Spalte nach einem Wert suchen. (

Sub test)


Sub test()
Dim Anzahl1 As Long, A As Long
Dim SZelle1 As Range
Dim Suchwert1 As String
Dim C As Variant
Suchwert1 = "hallo"  'Suchbegriff
Anzahl1 = Application.WorksheetFunction.CountIf(Tabelle1.Range("A1:A10"), Suchwert1)
For A = 1 To Anzahl1
If A = 1 Then
Set SZelle1 = Tabelle1.Range("A1:A10").Find(Suchwert1)
Test2(SZelle1)
Else
Set SZelle1 = Tabelle1.Range("A1:A10").FindNext(SZelle1)
End If
Next A
End Sub


---------------------------------------
Den Range merken (z.B. hallo steht in A3) und in eine anderen Prozedur oder Funktion übergeben und mit dem ab dem Range mit bis zu einem gesetzem Ende einen anderen Wert (oder Menge von Werten) suchen. Diesen dann kopieren.
------------------------------------------------------


Function Test2(eineZelle As Range)
Dim Anzahl As Long, A As Long
Dim Suchwert As String
Suchwert = "Haus" 'Suchbegriff
Anzahl = Application.WorksheetFunction.CountIf(Tabelle1.Range(eineZelle), Suchwert)
For A = 1 To Anzahl
If A = 1 Then
Set SZelle = Tabelle1.Range("eineZelle.Rows:D1").Find(Suchwert)
Columns(SZelle.Column).Copy Tabelle2.Cells(SZelle.Row, SZelle.Column) 'ganze Zeile Kopieren
Else
Set SZelle = Tabelle1.Range("A1:D1").FindNext(SZelle)
Columns(SZelle.Column).Copy Tabelle2.Cells(SZelle.Row, SZelle.Column) 'ganze Zeile Kopieren
End If
Next A
End Function


-----------------------------------------------------
Da bekomme ich aber bei Zeile Test2(SZelle1) eine Fehlermeldung warum?
Laufzeit 424 Object erforderlich
Was mache ich verkehrt?
Gruss
horst

Anzeige
AW: oder so ...
28.08.2008 12:08:02
Horst
Hey !
Gut das mit dem Aufruf der Funktion habe ich gelöst.
Ich habe einfach eine Sub genommen und dann mit
Test2 Parameter aufgerufen.
Test2 SZelle1
Doch wenn ich jetzt in Test2 bin wie bekomme ich den übergebenen Wert Szelle1 für die Anweisung.
Also den Range von einer Zelle in den String mit eingebaut.
Set SZelle = Tabelle1.Range("?:D1").Find(Suchwert)
Richtig konvertiert?
Gruss
Horst
Anzeige
AW: oder so ...
28.08.2008 14:01:21
Horst
Hey !
Konnte ich nun alles lösen.
Mit Range(eineZelle.Address, "D6")...
Oder andere Ideen?
Gruß
horst
AW: oder so ...
29.08.2008 17:42:48
Tino
Hallo,
habe jetzt erst gesehen, dass du mit meinem Beispiel arbeitest aber mit Matias gesprochen hasst.
Hier sind Fehler enthalten, ohne dies weiter zu testen.
In Test2
Anzahl = Application.WorksheetFunction.CountIf(Tabelle1.Range(eineZelle), Suchwert)
eineZelle ist Bereits ein Range- Objekt, von genau einer Zelle.
Also Du suchst in der Zelle wo „hallo“ gefunden wurde „Haus“ kann niemals funktionieren.
Tabelle1.Range("eineZelle.Rows:D1")
Geht so auch nicht, du schreibst einen fertigen String.
So müsste es ohne zu testen aussehen.
Tabelle1.Range("D1:" & "D" & eineZelle.Row)
SZelle ist in dieser Funktion nicht Deklariert
Dim SZelle As Range
Wahrscheinlich sind noch mehr Fehler drin.
Könntest Du genauer beschreiben was Du eigentlich vor hast, könnte man besser helfen.
Gruß Tino
Anzeige
AW: oder so ...
01.09.2008 07:14:00
Horst
Hey tino !
Ich habe das jetzt so gemacht:
(scheint zu funktionieren)
--------------------------------------------------------------------------------

Sub test1()
Dim Anzahl1 As Long, A As Long
Dim SZelle1 As Range
Dim Suchwert1 As String
Dim C As Variant
Suchwert1 = "hallo"  'Suchbegriff
Anzahl1 = Application.WorksheetFunction.CountIf(Tabelle1.Range("A1:A10"), Suchwert1)
For A = 1 To Anzahl1
If A = 1 Then
Set SZelle1 = Tabelle1.Range("A1:A10").Find(Suchwert1)
Test2 SZelle1
Else
Set SZelle1 = Tabelle1.Range("A1:A10").FindNext(SZelle1)
End If
Next A
End Sub



Sub Test2(eineZelle As Range)
Dim Anzahl As Long, A As Long
Dim SZelle3 As Range
Dim testzelle As Range
Dim Suchwert As String
Dim Anzahl1 As Long
Dim abc As Range
Suchwert = "Haus" 'Suchbegriff
Anzahl1 = Application.WorksheetFunction.CountIf(Tabelle1.Range(eineZelle.Address, "D6"),  _
Suchwert)
ab = Tabelle1.Range(Cells(eineZelle.Column, eineZelle.Row), Cells(eineZelle.Column, 4))
dc = Tabelle1.Range(eineZelle.Address, "D6")
ef = Tabelle1.Range("A6:d6")
For A = 1 To Anzahl1
If A = 1 Then
Set SZelle3 = Tabelle1.Range(eineZelle.Address, "D6").Find(Suchwert)
Rows(SZelle3.Row).Copy Tabelle2.Cells(2, 1) 'ganze Zeile Kopieren
Else
Set SZelle3 = Tabelle1.Range(eineZelle.Address, "D6").FindNext(SZelle3)
End If
Next A
Habe erstmal das Option Explicit raus genommen.
Er sucht nun in test1() in  der angebenen Spalte nach "hallo" wenn haus gefunden wurde ruft  _
test1() test2(eine Zelle) auf nun sucht Test2 in der Zeile wo test1 hallo gefunden hat nach  _
haus und kopiert die Werte nach Tabellenblatt2.
Geht aber nicht mit Datum warum?
Gruß Horst

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Suchen und Kopieren von Bestimmten Zelleninhalten in Excel


Schritt-für-Schritt-Anleitung

Um in Excel einen bestimmten Zelleninhalt zu suchen und zu kopieren, kannst du VBA (Visual Basic for Applications) verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Kopiere und füge den folgenden Code ein, um nach einem bestimmten Text in einem definierten Bereich zu suchen und die Ergebnisse in ein anderes Tabellenblatt zu kopieren:
Option Explicit

Sub SuchenUndKopieren()
    Dim RngZ As Range
    Dim Suchwert As String
    Dim Loletzte As Long
    Suchwert = "Hallo" 'Suchbegriff

    For Each RngZ In Worksheets("Tabelle1").Range("A1:E20")
        If RngZ Like "*" & Suchwert & "*" Then
            Loletzte = Worksheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row + 1
            Worksheets("Tabelle2").Cells(Loletzte, 1).Value = RngZ.Value 'Text aus Zelle kopieren
        End If
    Next RngZ
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus.

Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 424 - "Object erforderlich"

    • Lösung: Dieser Fehler tritt auf, wenn du versuchst, auf ein Objekt zuzugreifen, das nicht definiert ist. Überprüfe, ob alle verwendeten Variablen korrekt deklariert sind.
  • Fehler: Der gesuchte Text wird nicht gefunden.

    • Lösung: Stelle sicher, dass dein Suchbegriff korrekt eingegeben wurde und dass der Bereich, in dem gesucht wird, korrekt definiert ist.

Alternative Methoden

Es gibt auch eine Möglichkeit, den SVERWEIS oder FILTER-Funktionen in Excel zu nutzen, um bestimmte Zelleninhalte zu suchen und zu kopieren, ohne VBA zu verwenden. Zum Beispiel:

=SVERWEIS("Hallo", A1:E20, 1, FALSCH)

Diese Formel sucht nach "Hallo" in dem Bereich und gibt den Wert zurück, wenn er gefunden wird.


Praktische Beispiele

  1. Suchen und Kopieren:

    • Wenn du in einem Bereich von "A1:E20" nach "Haus" suchst und alle Zellen mit diesem Inhalt in "Tabelle2" kopieren möchtest, kannst du den oben angegebenen VBA-Code verwenden.
  2. Daten von einer Zeile kopieren:

    • Um die gesamte Zeile zu kopieren, in der der gesuchte Text gefunden wurde, kannst du den Code so anpassen:
Rows(RngZ.Row).Copy Destination:=Worksheets("Tabelle2").Cells(Loletzte, 1)

Tipps für Profis

  • Nutze Find und FindNext, um alle Vorkommen eines bestimmten Wertes in einem größeren Bereich zu suchen. Dies spart Zeit und macht deinen Code effizienter.
  • Achte darauf, die Zieltabelle vor dem Kopieren zu leeren, um unerwünschte Kopien zu vermeiden.
Worksheets("Tabelle2").Cells.ClearContents

FAQ: Häufige Fragen

1. Wie kann ich nach mehreren Wörtern suchen? Du kannst eine Schleife verwenden, um durch eine Liste von Suchbegriffen zu iterieren und den Suchprozess für jeden Begriff zu wiederholen.

2. Wie kann ich sicherstellen, dass der gefundene Wert in Groß- oder Kleinschreibung übereinstimmt? Verwende vbBinaryCompare in der Find-Methode, um die Groß- und Kleinschreibung zu berücksichtigen.

Set SZelle = Tabelle1.Range("A:A").Find(Suchwert, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=True)

Mit diesen Anleitungen und Tipps bist du gut gerüstet, um in Excel gezielt Zelleninhalte zu suchen und zu kopieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige