Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
684to688
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
684to688
684to688
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Suchen in allen Tabellen und kopieren
26.10.2005 15:31:20
Michael
Hallo alle zusammen
In meinen Arbeitsblättern steht in Spalte A der Familienname und in den Spalten daneben die zugehörigen Einträge (z.B: Arbeitszeit, Stunden usw.) Im nächsten Arbeitsblatt steht derselbige Namen and daneben wieder andere zugehörige Einträge (wie z.B Stundenlohn usw.)
Ich will, entweder mit einer Userform oder einer InputBox, in allen Tabellenblättern suchen und die Sucherergebnisse mit den zugehörigen Einträgen)in einem Arbeitsblatt (z.B Daten) hineinkopieren. So in der Art wie die Suchfunktion von Excel. Vielleicht hat jemand eine Lösung bzw. einen Lösungsansatz. Eines Suchfunktion für alle Tabellen habe ich schon gefunden. Mit dieser werden alle Fundstellen farbig markiert.

Sub suchen_alle_Tabellen_UsedRange()
Dim suche As String
Dim z As Integer
Dim x As Object
Dim Blatt As Object
suche = InputBox("wonach wollen Sie suchen?", , "Schröder")
z = 0
If suche = "" Then Exit Sub
For Each Blatt In ActiveWorkbook.Worksheets
For Each x In Blatt.UsedRange
If x = suche Then
z = z + 1
x.EntireRow.Interior.ColorIndex = 35
End If
Next x
Next Blatt
MsgBox suche & " wurde " & z & " mal gefunden."
End Sub

Danke für eure Hilfe
Michael

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen in allen Tabellen und kopieren
26.10.2005 18:25:26
Rausch
Hallo,
probier mal die 2 aus:
Option Base 1
Option Compare Text

Sub Suchen_und_anzeigen()
Dim Meldung         As Byte, Pos        As Byte
Dim Schleife        As Byte, y          As Byte
Dim Begriff, Suchen()                   As Variant
Dim Bereich                             As Range
Dim n%, x%, xZelle%, yZelle%
Dim xTabelle$(), Adresse$(), Text$
' Suchbegriff eingeben
Begriff = InputBox _
("Suchwort eingeben." & vbCrLf & _
"Willst Du Abbrechen,einfach Enter drücken", "S U C H M O D U S")
If Begriff = "" Then Exit Sub
Pos = InStr(Begriff, "+")
If Pos Then
ReDim Suchen(2)
Suchen(1) = Left(Begriff, Pos - 1)
Suchen(2) = Right(Begriff, Len(Begriff) - Pos)
Schleife = 2
Else
ReDim Suchen(1)
Suchen(1) = Begriff
Schleife = 1
End If
Application.ScreenUpdating = False
' Eigentlicher Suchvorgang (in allen Tabellenblättern)
x = 1
For y = 1 To Schleife
For n = 1 To Sheets.Count
' Letzte Zelle des Bereiches ermitteln. Diese Zelle wird als Startzelle für
' die Suche deffiniert, da Suche nach dieser Zelle, also in erster Zelle
' des Bereiches beginnt.
'Bereich festlegen
Set Bereich = Worksheets(n).UsedRange
With Worksheets(n).Range(Bereich.Address)
xZelle = .Columns(.Columns.Count).Column
yZelle = .Rows(.Rows.Count).Row
End With
With Sheets(n).Range(Bereich.Address)
Set c = .Find(Suchen(y), after:=Cells(yZelle, xZelle), LookIn:=xlValues)
If Not c Is Nothing Then
ErsteAdresse = c.Address
Do
ReDim Preserve Adresse(x): ReDim Preserve xTabelle(x)
xTabelle(x) = Sheets(n).Name
Adresse(x) = c.Address(RowAbsolute:=False, ColumnAbsolute:=False)
Set c = .FindNext(c)
x = x + 1
Loop While Not c Is Nothing And c.Address <> ErsteAdresse
End If
End With
Next n
Next y
Application.ScreenUpdating = True
' Die Anzahl der gefundenen Werte ist (x - 1), wenn keiner
' gefunden wurde dann ist x = 1
Select Case x
Case 1
Meldung = MsgBox("Es wurde leider Nix gefunden", _
vbOKOnly, "G E F U N D E N E   W E R T E")
Exit Sub
Case Else
Meldung = MsgBox("Hurra " & (x - 1) & " Übereinstimmungen gefunden.", _
vbOKOnly, "G E F U N D E N E   W E R T E")
'Tabelle einfügen
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
On Error Resume Next
With ActiveSheet
.Name = "Suchergebnis"
.[A1] = "Geräteart"
.[B1] = "In der Zelle"
For n = 1 To x - 1
.Cells(n + 1, 1) = xTabelle(n)
.Cells(n + 1, 2) = Adresse(n)
Next n
End With
End Select
End Sub

oder nimm das hier:
Option Base 1
Option Compare Text

Sub Suchen_und_anzeigen()
Dim Meldung         As Byte, Pos        As Byte
Dim Schleife        As Byte, y          As Byte
Dim Begriff, Suchen()                   As Variant
Dim Bereich                             As Range
Dim n%, x%, xZelle%, yZelle%
Dim xTabelle$(), Adresse$(), Text$
' Suchbegriff eingeben
Begriff = InputBox _
("Suchwort eingeben." & vbCrLf & _
"Willst Du Abbrechen,einfach Enter drücken", "S U C H M O D U S")
If Begriff = "" Then Exit Sub
Pos = InStr(Begriff, "+")
If Pos Then
ReDim Suchen(2)
Suchen(1) = Left(Begriff, Pos - 1)
Suchen(2) = Right(Begriff, Len(Begriff) - Pos)
Schleife = 2
Else
ReDim Suchen(1)
Suchen(1) = Begriff
Schleife = 1
End If
Application.ScreenUpdating = False
' Eigentlicher Suchvorgang (in allen Tabellenblättern)
x = 1
For y = 1 To Schleife
For n = 1 To Sheets.Count
If Sheets(n).Name <> "Auswahltabelle" Then
' Letzte Zelle des Bereiches ermitteln. Diese Zelle wird als Startzelle für
' die Suche deffiniert, da Suche nach dieser Zelle, also in erster Zelle
' des Bereiches beginnt.
'Bereich festlegen
Set Bereich = Worksheets(n).UsedRange
With Worksheets(n).Range(Bereich.Address)
xZelle = .Columns(.Columns.Count).Column
yZelle = .Rows(.Rows.Count).Row
End With
With Sheets(n).Range(Bereich.Address)
Set c = .Find(Suchen(y), after:=Cells(yZelle, xZelle), LookIn:=xlValues)
If Not c Is Nothing Then
ErsteAdresse = c.Address
Do
ReDim Preserve Adresse(x): ReDim Preserve xTabelle(x)
xTabelle(x) = Sheets(n).Name
Adresse(x) = c.Address(RowAbsolute:=False, ColumnAbsolute:=False)
Set c = .FindNext(c)
x = x + 1
Loop While Not c Is Nothing And c.Address <> ErsteAdresse
End If
End With
End If
Next n
Next y
Application.ScreenUpdating = True
' Die Anzahl der gefundenen Werte ist (x - 1), wenn keiner
' gefunden wurde dann ist x = 1
Select Case x
Case 1
Meldung = MsgBox("Es wurde leider Nix gefunden", _
vbOKOnly, "G E F U N D E N E   W E R T E")
Exit Sub
Case Else
Meldung = MsgBox("Hurra " & (x - 1) & " Übereinstimmungen gefunden.", _
vbOKOnly, "G E F U N D E N E   W E R T E")
'Tabelle einfügen
'ALTER CODE: Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
On Error Resume Next
With ActiveSheet
.Name = "Startseite"
.[A1] = "Suchergebnis"
For n = 1 To x - 1
.Cells(n + 1, 1) = xTabelle(n)
.Cells(n + 1, 2) = Adresse(n)
Next n
End With
End Select
End Sub

Gruss aus Kärnten, Kurt


PS.: Feedback wäre nett, Danke.


 


 


Homepage: http://www.saualmteufel.perchten.at


Anzeige
AW: Suchen in allen Tabellen und kopieren
26.10.2005 18:40:46
Michael
Danke Kurt für Deine Hilfe
Das funktioniert einwandfrei. Mein großes Problem: Es soll eigentlich nicht die Suchstelle angezeigt werden, sondern es sollte die ganze Zeile(n) kopiert werden. Ich bin gerade dabei und versuche das ganze irgenwie umzuschreiben.
Salzburg schickt schöne Grüße nach Kärnten
Michael
AW: Gern geschehen, o.T.
26.10.2005 19:34:46
Rausch
AW: Gern geschehen, o.T.
26.10.2005 21:38:43
Michael
Hallo noch einmal zusammen
Kurt hat mir mit seinem Code gewaltig geholfen (der ist Super). Kann mir irgendwer helfen, damit man diesen so umbaut, daß mir anstelle der Anzeige des Fundorts die ganze Zeile kopiert wird
Danke für eure Hilfe und besten Dank auch an Kurt
Michael
Anzeige
AW: Gern geschehen, o.T.
26.10.2005 23:27:56
gordon
Hallo Michael,
wie gefällt Dir folgendes - Bitte beachten: Das erste Blatt wird zu Beginn geleert

Sub MichaelsSearchAndCopy()
' Kopieren aller Zeilen die strSearch=<Suchbegriff> in Spalte A enthalten in das Erste Tabellenblatt
Dim ws As Worksheet, _
rErg As Range, _
strSearch As String, _
StrFirstFound As String, _
iFound As Integer
strSearch = InputBox("wonach wollen Sie suchen?", , "Schröder")
'ACHTUNG erstes Tabellenblatt wird vollständig geleert
ThisWorkbook.Worksheets(1).Cells.ClearContents
For Each ws In ThisWorkbook.Worksheets
If ws.Index > 1 Then
Set rErg = ws.Range("A:A").Find(strSearch)
If Not rErg Is Nothing Then
StrFirstFound = rErg.Address
Do
iFound = iFound + 1
'Ausgabe Fundzeile
rErg.EntireRow.Copy (ThisWorkbook.Worksheets(1).Cells(iFound, 1))
Set rErg = ws.Range("A:A").FindNext(rErg)
Loop While Not rErg Is Nothing And rErg.Address <> StrFirstFound
End If
End If
Next ' ws
End Sub

Gruß
gordon
Anzeige
Danke Kurt und Gordon
27.10.2005 07:15:13
Michael
Danke an alle die sich so bemüht haben:
Jetzt ist das ganze perfekt!! Vielleicht lerne ich das auch noch einmal (was ich nicht glaube)
Schöne Grüße
michael

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige