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

Suchfunktion

Suchfunktion
26.02.2021 19:36:22
Lehmann
Hallo zusammen,
für mein Projekt wollte ich in meine Arbeitsmappe iene Suchfunktion integrieren. Glücklicherweise konnte ich hier einen entsprechenden Code finden, welcher auch funktioniert (siehe Ende des Beitrags).
Nun meine Frage:
Lässt sich dieser Code so erweitern, dass man direkt zu der angezeigten Zelle springen kann? (Diese befindet sich auf einer von vielen Tabellen in der Mappe).
VG
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 _
("Bitte den zu suchenden Wert eingeben. Sollen 2 Werte" & vbCrLf & _
"gleichzeitig gesucht werden, dann mit Zeichen  +  " & vbCrLf & _
"voneinander trennen (z.B.: Summe+die)." & vbCrLf & vbCrLf & _
"ENTER ohne Wert = Abbruch", "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 kein übereinstimmender Wert gefunden", _
vbOKOnly, "G E F U N D E N E   W E R T E")
Exit Sub
Case Else
Meldung = MsgBox("Es wurden " & (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] = "Tabelle"
.[B1] = "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


17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Option Explicit erfordert Variablendeklaration
26.02.2021 22:03:05
Matthias
Hallo,
Warum ist dann c nicht definiert?
Warum ist dann ErsteAdresse nicht definiert?
Lässt sich dieser Code so erweitern, dass man direkt zu der angezeigten Zelle springen kann? (Diese befindet sich auf einer von vielen Tabellen in der Mappe).
Zu welcher Zelle denn, wenn Du mehrere Suchbegriffe gefunden hast?
Ansonsten hast Du doch in A2 den Blattnamen stehen und in B2 die Adresse
Somit hast Du doch alles was Du brauchst.
Gruß Matthias

AW: Option Explicit erfordert Variablendeklaration
26.02.2021 22:43:11
Daniel
Hi Matthias
wenn kein Option Explicit verwendet wird, dann darf man Variablen verwenden, ohne sie vorher zu deklarieren.
im gezeigten Quellcode steht kein Option Explicit.
Gruß Daniel

Anzeige
AW: Option Explicit erfordert Variablendeklaration
26.02.2021 22:53:24
Matthias
Hi Daniel,
im gezeigten Quellcode steht kein Option Explicit
Genau deshalb sollte er es benutzen.
Denn wenn ich den Code in meinem Editor einfüge steht dort Option Explicit
Gruß Matthias

"Sollte" ist soweit ok, aber ...
27.02.2021 17:54:11
lupo1
... dass bei Dir Option Explicit steht, muss doch nicht den Rest der Welt interessieren, oder?

und warum interessiert es Dich dann?
27.02.2021 18:49:00
Matthias

Weil Du Dein Befinden über das des TE stellst.
28.02.2021 08:26:43
lupo1

Das ist Deine Meinung, die interessiert mich nicht
28.02.2021 14:19:32
Matthias
Antworte einfach nicht auf meine Antworten, sondern auf Fragen!
Und unterstelle mir bitte nichts. Ich hab mich hier damals angemeldet um Anderen nicht so versierten Excelnutzern zu helfen. Nicht um mich mit solchen Leuten wie Dir zu beschäftigen.
Wer meine Beiträge kennt, der weiß das ich sachlich antworte und mir von Leuten wie Dir (die nur Stunk suchen wollen) nichts gefallen lasse.
Häng also mal Dein Ego ins Erdgeschoß (um nicht Keller zu schreiben) und nicht in die 30.Etage.
Auch wenn Du Dir einbildest Du wärst hier der Größte, für mich bist Du ein Forenbenutzer wie jeder Andere auch. Also lass es einfach, mich zu kritisieren wenn es keinen Anlass gibt!
Ich frage mich echt was Dich dazu bewogen hat auf meine Antwort zu reagieren?
Wahrscheinlich weil Du Dein Befinden über meins stellst?
Solche Leute wie Du sind mir seit Jahren ein Dorn im Auge.
Kümmere Dich also einfach um Dich und nicht um mich! Kapiert?

Anzeige
Der geneigte Leser dieses Threads tippt sich aber
28.02.2021 15:23:28
lupo1
... eher Deinetwegen an den Kopf.

glaub ich eher nicht, Du Arroganzling!
28.02.2021 15:29:39
Matthias
Lass Andere einfach in Ruhe und komm mal von Deinem selbst gebauten hohe Roß runter!
Antworte einfach nicht auf Antworten , sondern nur auf Fragen, schon treffen wir uns nicht mehr.

Süß, wenn Du mehr als 50% fett schreibst.
28.02.2021 16:14:34
lupo1
Rumschreien zeigt Hilflosigkeit.

Nee, Wehrhaftigkeit und nun schleich Dich ...
28.02.2021 16:20:29
Matthias

Ich lass es besser, sonst Du noch Herzkasper :-)
28.02.2021 16:28:55
lupo1

wer mich angreift muss damit klarkommen!!
28.02.2021 16:35:04
Matthias

AW: Suchfunktion
26.02.2021 22:36:21
Daniel
Hi
kommt darauf an, wann und wie du zu zu den Zellen springen willst.
direkt nach set c = ...Find(...) gehts mit Application.Goto c
wenn du zu einer Zelle springen willst, die du in den Variablen xTabelle() und Adresse() hinterlegt hast, gehts mit: Application.Goto Sheets(xTabelle(n)).Range(Adresse(n))
Gruß Daniel

Anzeige
AW: Suchfunktion
28.02.2021 11:22:02
GraFri
Hallo
Ich würde bei den Suchergebnissen eine drite Spalte mit einem Hyperlink zu dem Suchergebnis in der jeweiligen Tablle einfügen.
Geändertes Makro, wobei auch alle Variablen deklariert wurden.
Option Explicit
Sub Suchen_und_anzeigen()
Dim Schleife As Long, x As Long, y As Long
Dim n As Long, xZelle As Long, yZelle As Long
Dim Pos As Long
Dim Begriff As Variant, Suchen() As Variant
Dim Bereich As Range, c As Range
Dim xTabelle() As String, Adresse() As String, Text As String
Dim ErsteAdresse As String, meldung As String
' Suchbegriff eingeben
Begriff = InputBox _
("Bitte den zu suchenden Wert eingeben. Sollen 2 Werte " & _
"gleichzeitig gesucht werden, dann mit dem Zeichen  +  " & _
"voneinander trennen (z.B.: Summe+die)." & vbCrLf & vbCrLf & _
"ENTER ohne Wert = Abbruch", "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 kein übereinstimmender Wert gefunden", _
vbOKOnly, "G E F U N D E N E   W E R T E")
Exit Sub
Case Else
meldung = MsgBox("Es wurden " & (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] = "Tabelle"
.[B1] = "Zelle"
For n = 1 To x - 1
.Cells(n + 1, 1) = xTabelle(n)
.Cells(n + 1, 2) = Adresse(n)
.Cells(n + 1, 3).Hyperlinks.Add Anchor:=Cells(n + 1, 3), _
Address:="", SubAddress:="'" & xTabelle(n) & "'!" & Adresse(n),  _
_
_
TextToDisplay:=xTabelle(n) & "!" & Adresse(n)
Next n
End With
End Select
End Sub

mfg GraFri

Anzeige
AW: Suchfunktion
28.02.2021 19:03:05
GraFri
Hallo
Hab den Code noch mal überarbeitet, vereinfacht sowie die Anzeige formatiert.
Option Explicit
' Suchen bis 2 Begriffe in allen Tabellen. Die Funde werden
' in einem eigenen Tabellenblatt ('Suchergebnis') aufgelistet
' und ein Hyperlink zu den gefundenen Stellen gesetzt
Sub Suchen_und_anzeigen()
Dim x As Long, y As Long, n As Long
Dim Pos As Long, xZelle As Long, yZelle As Long
Dim wasSuchen() As Variant
Dim Bereich As Range, c As Range
Dim xTabelle() As String, xAdresse() As String
Dim ersteAdresse As String, Meldung As String
' Suchbegriff eingeben
ReDim wasSuchen(1)
wasSuchen(1) = Application.InputBox _
("Bitte den zu suchenden Wert eingeben. Sollen 2 Werte " & _
"gleichzeitig gesucht werden, dann mit dem Zeichen  |  " & _
"voneinander trennen (z.B.: Land | Gemeinde)." & vbCrLf & vbCrLf & _
"ENTER ohne Wert = Abbruch", "S U C H M O D U S")
If wasSuchen(1) = "" Then Exit Sub
Pos = InStr(wasSuchen(1), "|")
If Pos Then
ReDim Preserve wasSuchen(2)
wasSuchen(2) = Trim(Right(wasSuchen(1), Len(wasSuchen(1)) - Pos))
wasSuchen(1) = Trim(Left(wasSuchen(1), Pos - 1))
End If
Application.ScreenUpdating = False
' Eigentlicher Suchvorgang (in allen Tabellenblättern)
x = 1
For y = 1 To UBound(wasSuchen)
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(wasSuchen(y), after:=Cells(yZelle, xZelle), LookIn:=xlValues)
If Not c Is Nothing Then
ersteAdresse = c.Address
Do
ReDim Preserve xAdresse(x): ReDim Preserve xTabelle(x)
xTabelle(x) = Sheets(n).Name
xAdresse(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
' Anzahl der gefundenen Werte ist (x - 1), wenn keiner gefunden wurde dann ist x = 1
Select Case x
Case 1
Meldung = MsgBox("Es wurde kein übereinstimmender Wert gefunden", _
vbOKOnly, "G E F U N D E N E   W E R T E")
Exit Sub
Case Else
Meldung = MsgBox("Es wurden " & (x - 1) & " Übereinstimmungen gefunden.", _
vbOKOnly, "G E F U N D E N E   W E R T E")
'Neue Tabelle einfügen, auf 'Suchergebnis' umbenennen und Ergebnis eintragen
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
On Error Resume Next
With ActiveSheet
.Name = "Suchergebnis"
.[A1] = "Tabelle"
.[B1] = "Zelle"
.[C1] = "Hyperlink"
.[A1:C1].Font.Bold = True
For n = 1 To x - 1
.Cells(n + 1, 1) = xTabelle(n)
.Cells(n + 1, 2) = xAdresse(n)
.Cells(n + 1, 3).Hyperlinks.Add Anchor:=Cells(n + 1, 3), _
Address:="", SubAddress:="'" & xTabelle(n) & "'!" & xAdresse(n), _
TextToDisplay:=xTabelle(n) & "!" & xAdresse(n)
Next n
.Columns("A:C").EntireColumn.AutoFit
End With
End Select
End Sub
mfg GraFri

Anzeige
AW: Suchfunktion
04.03.2021 05:12:05
Lehmann
Hallo zusammen,
Ersteinmal vielen Dank für die Antworten. Leider konnte ich mich heute erst weiter um das Projekt kümmern. Ich werde den Code heute ausprobieren und dann noch einmal berichten.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige