Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1108to1112
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
3-Wort-Suche (Reihenfolge) - VBA
Steve
Guten Tag
Ich habe gerade gemerkt, dass die Wort-Reihenfolge in der Find-Funktion eine Rolle spielt.
Habe dazu leider nichts Schlaues im Internet gefunden und es scheint dafür auch keine Funktion zu geben.
Was ich bräuchte wäre eine neu definierte Funktion die basierend auf 1 - 3 Worten alle Zeilen löscht in einer Tabelle, wo diese Worte in keiner Zelle dieser Zeile (unabhängig von Wortreihenfolge) vorkommt. Der User würde diese Worte über z.B. 3 Text-Felder in der UserForm eingeben.
Falls möglich, scheint mir aber sehr kompliziert, könnten idealerweise auch die Zeilen gelöscht werden, wo diese Such-Wörter über alle Zellen gesehen nicht vorkommen (d.h. Zeile wird nicht gelöscht wenn z.B. Such-Wort1 in Column B steht, Such-Wort3 + 2 in Column F)
Wahrscheinlich müsste man da per Algorithmus alle Kombinationen der Wörter durchgehen.
Hat da jemand einen Tip, wie das mit VBA gehen würde. Ich kann zwar VBA Code lesen und auch ein bisschen abändern, aber dieses Problem könnte ich definitiv nicht selber lösen 
Vielen Dank im Voraus für die Antwort
Beste Grüsse
Steve

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
vielleicht geht es so...
08.10.2009 15:42:48
Tino
Hallo,
also so wie ich es verstanden habe,
möchtest Du alle Zeilen löschen die nicht eines dieser drei Suchbegriffe irgendwo
in der Zeile stehen haben.
Richte Dir eine Userform mit 3 TextBoxen (Name TextBox1 bis TextBox3) und
einen CommandButton (Name CommandButton1) ein.
In die Userform machst Du diesen Code.
Im Code gehe ich davon aus, dass die erste Zeile die Überschrift ist und
nicht berücksichtig werden soll.
Private Sub CommandButton1_Click()
Dim strFormel As String
Dim i As Integer
For i = 1 To 3
 If Me("TextBox" & i) <> "" Then
  strFormel = strFormel & "COUNTIF(RC1:RC[-1],""" & Me("TextBox" & i) & """)+"
 End If
Next i

If Right$(strFormel, 1) = "+" Then strFormel = Left$(strFormel, Len(strFormel) - 1)

With Tabelle1
 With .UsedRange.Columns(.UsedRange.Columns.Count).Offset(1, 1)
   .FormulaR1C1 = "=IF(" & strFormel & ">0,ROW(),True)"
   Tabelle1.UsedRange.Offset(1, 0).Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlNo
   
   On Error Resume Next
   .SpecialCells(xlCellTypeFormulas, 4).EntireRow.Delete
   .EntireColumn.Delete
   On Error GoTo 0
 
 End With
End With

End Sub

Gruß Tino
Anzeige
AW: vielleicht geht es so...
09.10.2009 17:32:14
Steve
Hallo Tino
Vielen Dank!
Im Moment erhalte ich bei der folgenden Zeile noch einen Fehler:
With .UsedRange.Columns(.UsedRange.Columns.Count).Offset(1, 1)
"Run-time error 424 - Object required"
Habe leider bis jetzt noch nicht herausgefunden was man ändern muss.
Aber ich gebe mir Mühe das noch herauszukriegen.
Beste Grüsse
Steve
AW: vielleicht geht es so...
09.10.2009 18:12:32
Tino
Hallo,
bei Dir gibt es wahrscheinlich die With Tabelle1 nicht.
Gruß Tino
noch was...
09.10.2009 18:18:38
Tino
Hallo,
wenn Du nach dem Teilwort suchen möchtest, ersetze die Zeile so
strFormel = strFormel & "COUNTIF(RC1:RC[-1],""*" & Me("TextBox" & i) & "*"")+"
Gruß Tino
Anzeige
AW: noch was...
13.10.2009 09:18:06
Steve
Hallo Tino
Ja, der Fehler lag daran, dass ich nur den Namen des Tabs von Sheet1 auf Tabelle1 geändert habe. Ich wusste nicht dass man auch den Namen im VBA Projekt-Explorer ändern muss.
Ich habe gemerkt, dass die Suche leider für Zahlen nicht funktioniert. Die match Funktion von Erich und die Countif Funktion von dir scheinen auch keine Möglichkeit zu bieten nach zahlen mit z.B. "*234*" zu suchen, so dass auch "12345" gefunden wird.
Muss man da etwas mit der Find-Funktion zu machen?
Bei gemischten strings Zahlen&Buchstaben klappt es.
Aber auch wenn ich das ganze Sheet als text formatiere funktioniert es nicht.
Beste Grüsse
Reto
Anzeige
AW: 3-Wort-Suche (Reihenfolge) - VBA
08.10.2009 16:40:24
Erich
Hi Steve,
hier noch eine Variante mit zwei Funktionen, die jeweils einen Bereich aus Zeilen zurückgeben, in denen
- alle Suchbegriffe vorkommen (And)
- mindestens 1 Suchbegriff vorkommt (Or).

Function rngFindAnd(rngB As Range, arrV() As Variant) As Range
Dim arrW, lngZ As Long, lngS As Long, arrZ(), intT As Integer
arrW = rngB.Value
For lngZ = 1 To UBound(arrW)
ReDim arrZ(1 To UBound(arrW, 2))
For lngS = 1 To UBound(arrW, 2)
arrZ(lngS) = arrW(lngZ, lngS)
Next lngS
For intT = LBound(arrV) To UBound(arrV)
If Not IsNumeric(Application.Match(arrV(intT), arrZ, 0)) Then Exit For
Next intT
If intT > UBound(arrV) Then
If rngFindAnd Is Nothing Then
Set rngFindAnd = rngB.Rows(lngZ)
Else
Set rngFindAnd = Union(rngFindAnd, rngB.Rows(lngZ))
End If
End If
Next lngZ
End Function
Function rngFindOr(rngB As Range, arrV() As Variant) As Range
Dim arrW, lngZ As Long, lngS As Long, arrZ(), intT As Integer
arrW = rngB.Value
For lngZ = 1 To UBound(arrW)
ReDim arrZ(1 To UBound(arrW, 2))
For lngS = 1 To UBound(arrW, 2)
arrZ(lngS) = arrW(lngZ, lngS)
Next lngS
For intT = LBound(arrV) To UBound(arrV)
If IsNumeric(Application.Match(arrV(intT), arrZ, 0)) Then
If rngFindOr Is Nothing Then
Set rngFindOr = rngB.Rows(lngZ)
Else
Set rngFindOr = Union(rngFindOr, rngB.Rows(lngZ))
End If
Exit For
End If
Next intT
Next lngZ
End Function
Wie man die beiden Fkt. verwenden kann, siehst du in der Beispielmappe:
https://www.herber.de/bbs/user/64971.xls
Wie die Suchbegriffe vorgegeben werden (aus Tabelle gelesen oder aus einer UserForm),
spielt für die Fkt. keine Rolle.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: 3-Wort-Suche (Reihenfolge) - VBA
09.10.2009 17:28:07
Steve
Hallo Erich
Vielen Dank. Funktioniert einwandfrei.
Ich habe den Code noch ergänzt, so dass auch nur Teilwörter gefunden werden über die "*" Wildcards...
Scheint zu funktionieren (siehe unten).
If IsNumeric(Application.Match("*" & arrV(intT) & "*", arrZ, 0)) Then
Beste Grüsse und Danke nochmals
Steve
AW: 3-Wort-Suche (Reihenfolge) - VBA
13.10.2009 18:13:18
Steve
Hallo Erich
Hast du eine Idee wie man das hinkriegt, dass auch Zahlen über "*" gefunden werden?
Z.B. "*234*" sollte auch 12345 finden.
Mit match und countif scheint es nicht zu gehen und auch im Netz habe ich da keine Lösung gefunden.
Beste Grüsse
Steve
Anzeige
Suche mit * in Zahlen
13.10.2009 18:41:12
Erich
Hi Steve,
nach und in Zahlen kann man nicht mit * suchen. "*234*" ist ja auch ein Text (eine Zeichenkette).
Erste Näherung: Probier es mal aus mit
arrZ(lngS) = CStr(arrW(lngZ, lngS))
statt
arrZ(lngS) = arrW(lngZ, lngS)
Dann besteht arrZ aus Texten, in denen du mit ...Match("*" & arrV(intT) & "*", arrZ, 0))
suchen kannst.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige