Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1004to1008
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

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

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

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
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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige