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

Forumthread: In einer Spalte suchen, auch mit Platzhaltern

In einer Spalte suchen, auch mit Platzhaltern
04.08.2005 08:13:20
Sören
Moin.
Ich benötige wieder einmal eure Unterstützung.
Mir schwebt folgendes vor:
In die Zelle "a1" wird der zu suchende Begriff eingegeben.
Die Spalte "D" soll als Beispiel nach diesem Wert durchsucht werden und die Mehrfachtreffer in einem Array abgelegt werden. Ideal wäre es natürlich, wenn in "a1" auch Platzhalter mit verwendet werden können.
Bislang habe ich es mit "Find" und mit dem Makrorecorder, ein "suche-Vorgang" aufgezeichnet, probiert.....leider nicht mit einem passenden Ergebnis. "Find" hat bei mir keine Platzhalter akzeptiert und ich habe es nicht geschafft, dass er mit mehrere mögliche Treffer in ein Array legt.
Vielleicht habt ihr ja eine gute Idee. Bin für jeden Tipp dankbar.
Gruß, Sören
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: In einer Spalte suchen, auch mit Platzhaltern
04.08.2005 08:43:20
Luschi
Hallo Sören,
als Platzhalter dient in Excel das Tildezeichen ~.
Mit ~aus findet man alle Wörter wie Haus, Maus, Ausstellung, hinaus usw.
Gruß von Luschi
aus klein-Paris
AW: In einer Spalte suchen, auch mit Platzhaltern
04.08.2005 09:17:30
Sören
Danke......
Gruß, Sören
AW: In einer Spalte suchen, auch mit Platzhaltern
04.08.2005 08:47:41
bst
Morgen Sören,
wenn's denn auch 'etwas erweiterte Platzhalter' sein dürfen, versuch mal sowas. Siehe:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/js56jsgrpregexpsyntax.asp
cu, Bernd
--
Option Explicit

Sub SuchenMitRE()
   Dim src As Range, cell As Range
   Dim re As Object
   Dim ar() As String
   Dim arCount As Long
   
   If Trim(Range("A1").Value) = "" Then
      MsgBox "Suchmuster in Zelle A1 fehlt"
      Exit Sub
   End If
   arCount = -1
   Set re = CreateObject("vbscript.regexp")
   re.Pattern = Range("A1").Value
   On Error Resume Next
   re.test ""
   If Err.Number <> 0 Then
      MsgBox "Fehler in Suchmuster in Zelle A1"
      Exit Sub
   End If
   On Error GoTo 0
   Set src = Range("D1:D" & Cells.SpecialCells(xlCellTypeLastCell).Row)
   For Each cell In src
      If re.test(cell.Value) Then
         arCount = arCount + 1
         ReDim Preserve ar(arCount)
         ar(arCount) = cell.Value
      End If
   Next
   If arCount >= 0 Then Range("E1:E" & arCount + 1) = _
   Application.WorksheetFunction.Transpose(ar)
   Set re = Nothing
End Sub

Anzeige
AW: In einer Spalte suchen, auch mit Platzhaltern
04.08.2005 13:50:45
Sören
Hi Bernd.
Danke für die Hilfe.
Allerdings läuft er nur fast gut.
Das Listing funktioniert soweit, allerdings zeigt er mir nur einige entsprechende Zeilen an, aber nie alle. Manchmal unterschiedet er auch zwischen "Groß" & "Klein".
Anderes findet er dann gar nicht. Leider ist es noch nicht so zuverlässig.
Vielleicht hast Du ja noch ne Idee.
Ich arbeite hier jetzt mit zwei Tabellenblättern. Auf Einem sind die Quelldaten und auf dem Anderen soll er mir das Ergebnis bringen. Das ist alles nicht das Problem. Er ist halt nur nicht so zuverlässig.
Nochmals Danke, Sören
Anzeige
AW: In einer Spalte suchen, auch mit Platzhaltern
04.08.2005 14:06:43
bst
Hi Sören,
Du irrst Dich. Es funktioniert schon.
Allerdings sind hier nicht mehr die 'Wildcards' von Excel anzugeben, also was wie "*", "?", oder ggf. noch die Teile "#", "[xyz]" und "[!xyz] vom LIKE-Operator sondern
echte Regular Expressions ;-) Lies mal die Beschreibung von obigem Link komplett durch.
Und, so wie ich's geschrieben habe ist IgnoreCase hier immer False, d.h. es wird immer zwischen Groß-Kleinschreibung unterschieden.
Ganz kurz und nicht 'wirklich zu 100% korrekt':
Anstatt von "?" nimm jetzt ".", anstatt "*" nimm ".*", anstatt "#" nimm "\d", die Syntax von "[xyz]" und "[a-z]" ist gleich, anstatt "[!abc]" nimm "[^abc]".
cu, Bernd
Anzeige
AW: In einer Spalte suchen, auch mit Platzhaltern
04.08.2005 14:16:54
Sören
Hallo Bernd.
OK, hab ich jetz auch mitbekommen :D
Aber wie kommt es denn, dass in der Quelle mehrere gleiche Namen sind und er mit manchmal nur einen davon anzeigt?
Beispiel:
Quelle:
Mannesmann
Signal
...
..
Signal..
..
Mannesmann..
Wenn ich jetzt nach "Sig" suchen lasse, zeigt er mir alle an. Suche ich "Mann" zeigt er mir nur einen an.?
Anderes Prob noch. Wollte den Ausgabeplatz etwas verändern (Zelle).
If arCount &gt= 0 Then Range("B4:B" & arCount + 1) = _~f~
~f~ Application.WorksheetFunction.Transpose(ar)~f~
~f~ Set re = Nothing~f~
~f~ End Sub
Er soll hier erst in b4 anfangen. nach jeder suche zieht er die ausgabe auf b3, b2 b1 und teileweise kommt zum Schluß die Fehlermeldung #NV?
Vielleicht hat mein Excel ja auch nen Meisenschuß :D
Gruß, Sören
Anzeige
AW: In einer Spalte suchen, auch mit Platzhaltern
04.08.2005 14:28:15
bst
Hi Sören
&GTWenn ich jetzt nach "Sig" suchen lasse, zeigt er mir alle an. Suche ich "Mann" zeigt er mir nur einen an.?
Verstehe ich nicht. Bei mir geht das. Schick im Zweifelsfall mal eine Datei.
&GT If arCount &GT= 0 Then Range("B4:B" & arCount + 1) = ...
Die Anzahl der Daten in ar() und dem Range stimmt nicht mehr überein.
Du mußt beide Seiten erhöhen. Nimm sowas:
If arCount &GT= 0 Then Range("B4:B" & arCount + 4) = ...
cu, Bernd
Anzeige
AW: In einer Spalte suchen, auch mit Platzhaltern
04.08.2005 14:38:30
Sören
Hi Bernd.
Danke, habe soweit alles zum Laufen, bis auf das Prob, dass er mir bei meinem Blatt nicht immer alle möglichen Einträge anzeigt.
Habe eben noch eine kurze Testdatei angelegt. Mit der hat das gut funktioniert.
Kann das an meiner Originaldatei liegen. Hat die vielleicht Probleme mit irgendeiner Formatierung oder so?
Werde erst morgen wieder an einen Rechner kommen.
Danke Dir nochmals.
Wenn Du viel Zeit und Lust hast. Würde ich mich freuen, wenn Du mir Dein Listung noch einmal geben könntest, allerdings vielleicht mit ein paar Kommentaren, damit ich es leichter verstehe. Danke.
Gruß, Sören s-kelmereit@gmx.net
Anzeige
AW: In einer Spalte suchen, auch mit Platzhaltern
05.08.2005 08:24:11
bst
Guten Morgen,
hatte Gestern nicht gesehen daß Du den Thread noch als offen markiert hast und Dir
das kommentierte Teil an Deine Mail-Addie geschickt...
FWIW, hier einfach nochmal dieses reinkopiert.
cu, Bernd
--
Hallo Sören,
hier ein bischen kommentiert. Da Du ja eigentlich kein Array brauchst, würde es hier auch einfacher gehen.
cu, Bernd
--
Option Explicit
' Anmerkung: Da hier nun in einen Range geschrieben wird könnte man sich
' den gesamten Array-Schickschnack sparen !!

Sub SuchenMitRE()
Dim src As Range     ' Hierin wird gesucht
Dim cell As Range    ' Ein Zelle in src für die Schleife
Dim re As Object     ' ein Regular Expression Objekt
Dim ar() As String   ' ein Array für die gefundenen Werte
Dim arCount As Long  ' Zähler für Elemente im Array, bzw. korrekter:
' Anzahl der Elemente - 1 = Index des aktuellen Elements
' Test ob Suchmuster leer
If Trim(Range("A1").Value) = "" Then
MsgBox "Suchmuster in Zelle A1 fehlt"
Exit Sub
End If
' Array-Index startet ab 0, deshalb Index = -1 um später +1 addieren zu können
arCount = -1
' erstellt ein RE-Objekt
Set re = CreateObject("vbscript.regexp")
' weist dem das Pattern (Suchmuster) zu
re.pattern = Range("A1").Value
' einfacher Test, ob's einen Fehler im Suchmuster gibt
' zum Testen wird einfach ein Leerstring genommen, sollte immer reichen
On Error Resume Next
re.test ""
If Err.Number <> 0 Then
MsgBox "Fehler in Suchmuster in Zelle A1"
Exit Sub
End If
On Error GoTo 0
' src = alle Zellen in Spalte D
Set src = Range("D1:D" & Cells.SpecialCells(xlCellTypeLastCell).Row)
' Schleife über alle Zellen in src
For Each cell In src
' Falls der Zellwert das Suchmuster 'matched', liefert re.Test TRUE
If re.test(cell.Value) Then
' ein Element mehr im Array
arCount = arCount + 1
' dafür Speicher holen aber alte Werte behalten
ReDim Preserve ar(arCount)
' Und noch den Wert eintragen
ar(arCount) = cell.Value
End If
Next
' In arrcount steht der letzte benutzte Index, falls er z.B. 4 ist
' existieren 4 + 1 (!) Elemente mit den Indices 0, 1, 2, 3, 4.
' Range() = ar() 'will eigentlich' ein 2-Dim Feld mit Zeilen&Spalten
' deshalb wird die 1-Dim 'Zeile' in eine 1-Dim Spalte transponiert
' ist sich wohl ein bischen Tricky
If arCount >= 0 Then Range("B4:E" & arCount + 4) = _
Application.WorksheetFunction.Transpose(ar)
' Anständige Leute geben am Ende Objekte wieder frei
Set re = Nothing
End Sub

Anzeige
AW: In einer Spalte suchen, auch mit Platzhaltern
05.08.2005 10:12:01
Sören
Moinsens.
Besten Dank. Ist alles angekommen und hat mir sehr geholfen.
Wünsche vorab ein schönes Wochenende.
Gruß, Sören
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

In einer Spalte suchen mit Platzhaltern in Excel


Schritt-für-Schritt-Anleitung

  1. Vorbereitung:

    • Stelle sicher, dass Du in Zelle A1 das Suchmuster eingibst. Hier kannst Du auch Platzhalter verwenden. In Excel wird der Platzhalter * verwendet, um eine beliebige Anzahl von Zeichen darzustellen.
  2. VBA-Editor öffnen:

    • Gehe zu Entwicklertools > Visual Basic, um den VBA-Editor zu öffnen. Wenn die Entwicklertools nicht angezeigt werden, aktiviere sie in den Excel-Optionen.
  3. Neues Modul erstellen:

    • Klicke mit der rechten Maustaste auf "VBAProject (deine Datei)" und wähle Einfügen > Modul.
  4. Code einfügen:

    • Füge den folgenden VBA-Code in das Modul ein:
    Sub SuchenMitPlatzhaltern()
       Dim src As Range
       Dim cell As Range
       Dim ar() As String
       Dim arCount As Long
    
       If Trim(Range("A1").Value) = "" Then
           MsgBox "Suchmuster in Zelle A1 fehlt"
           Exit Sub
       End If
    
       arCount = -1
       Set src = Range("D1:D" & Cells.SpecialCells(xlCellTypeLastCell).Row)
    
       For Each cell In src
           If cell.Value Like Range("A1").Value Then
               arCount = arCount + 1
               ReDim Preserve ar(arCount)
               ar(arCount) = cell.Value
           End If
       Next
    
       If arCount >= 0 Then
           Range("B4").Resize(UBound(ar) + 1, 1).Value = Application.Transpose(ar)
       End If
    End Sub
  5. Makro ausführen:

    • Kehre zu Excel zurück und führe das Makro unter Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Suchmuster in Zelle A1 fehlt: Stelle sicher, dass Du ein Suchmuster eingegeben hast, bevor Du das Makro ausführst.
  • Nicht alle Treffer werden angezeigt: Überprüfe, ob Du den Platzhalter korrekt verwendest. Der * Platzhalter sollte in der Suchanfrage stehen.
  • Fehlermeldung bei der Ausgabe: Achte darauf, dass der Zielbereich für die Ausgabe (in diesem Fall B4) ausreichend Platz hat, um die Ergebnisse anzuzeigen.

Alternative Methoden

  • Excel-Funktion FILTER: Wenn Du Excel 365 oder Excel 2021 verwendest, kannst Du die FILTER-Funktion verwenden, um Daten mit Platzhaltern zu filtern.

    =FILTER(D:D, ISNUMBER(SEARCH(A1, D:D)))
  • SVERWEIS mit Platzhaltern: Verwende SVERWEIS, um Daten zu suchen, wobei Du den Platzhalter * in der Suchanfrage einfügst.


Praktische Beispiele

  • Beispiel für Platzhalter: Wenn Du in Zelle A1 „Mann*“ eingibst, findet das Makro alle Einträge, die mit „Mann“ beginnen, wie „Mannesmann“ und „Mannheim“.

  • Zahlen suchen: Wenn Du nach einer Zahl suchst, die mit einem bestimmten Muster beginnt, kannst Du auch Platzhalter verwenden. Zum Beispiel: „123*“ für alle Werte, die mit „123“ beginnen.


Tipps für Profis

  • Reguläre Ausdrücke: Wenn Du komplexere Suchmuster benötigst, kannst Du auch reguläre Ausdrücke in VBA verwenden. Dies bietet mehr Flexibilität beim Suchen mit Platzhaltern.

  • Leistungsoptimierung: Bei großen Datenmengen kann es hilfreich sein, die Suchrange einzuschränken, um die Performance zu verbessern.


FAQ: Häufige Fragen

1. Wie kann ich Platzhalter in Excel verwenden?
Die Platzhalter * und ? können in Excel verwendet werden, um beliebige Zeichen oder eine einzelne Zeichenposition darzustellen.

2. Was ist der Unterschied zwischen LIKE und SEARCH in Excel?
LIKE wird in VBA verwendet, um Muster mit Platzhaltern zu vergleichen, während SEARCH eine Excel-Funktion ist, die die Position eines Teilstrings in einem Text zurückgibt.

3. Warum funktionieren meine Platzhalter nicht?
Stelle sicher, dass Du die richtige Syntax verwendest. In VBA wird Like für Platzhalter verwendet, während in Excel Formeln wie SEARCH oder FILTER zum Einsatz kommen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige