Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
644to648
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
644to648
644to648
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige