2016-05-25 10 views
0

Ich versuche, ein Makro zum Suchen und Anzeigen von Zeilen von Daten basierend auf einem Suchbegriff, der eine Teilzeichenfolge (in der Regel 4 Zeichen von möglicherweise 16) ist, bin ein absoluter Anfänger, aber so bis jetzt hat ich die folgende (mit Hilfe von Gord):Partielle Zeichenfolge sucht mit VBA

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim cell As Range 
Application.ScreenUpdating = False 
With ActiveSheet 
    .Rows.Hidden = False 'unhides all rows 
End With 
For Each cell In ActiveSheet.Range("C3:C1000") 
    If cell.Value <> ActiveSheet.Range("A1").Value Then _ 
      cell.EntireRow.Hidden = True 
    If ActiveSheet.Range("A1").Value = "" Then 
     cell.EntireRow.Hidden = False 
    End If 
Next 
Range("A1").Select 'ready for next value input 
Application.ScreenUpdating = True 
End Sub 

wie kann ich den Suchbegriff als teilweise Übereinstimmung nicht eine exakte Übereinstimmung und losen Fall senstivity definieren?

TIA

Duncan

Der Datenstring hat keine Sonderzeichen nur 0-9 und A-Z so vermutlich die Funktion Wie wird die Aufgabe gerecht wird. Wenn ja, wie würde sich das Makro ändern? Entschuldigung aber bin total Neuling dabei. Es versucht, Bearbeitung: Wenn ActiveSheet.Range ("A1") Value = "" Dann
zu: Wenn ActiveSheet.Range. ("A1"). Value wie "*" Dann aber kein Ergebnis

Antwort

2

Erste Versuchen Sie, beide Strings (Nadel und Heuhaufen) in LCASE() zu konvertieren und verwenden Sie dann den Operator LIKE. Wie im Beispiel unten

if lcase(haystack) like "*" & lcase(needle) & "*" then 
'do something 

das wird wenig wie regexp funktioniert. So wird es in Heuhaufen suchen, wenn es Nadel enthält. Wobei * alles (oder nichts) bedeutet. Ist das klar?

+0

Vielen Dank Lubos, ich folge der Logik, aber nicht sicher, wo ich das Makro bearbeiten muss. Die Groß-/Kleinschreibung ist nicht kritisch, ich bin mehr daran interessiert, die Teilübereinstimmung zu sortieren, also sollte diese Zeile If ActiveSheet.Range ("A1"). Value = "" Dann lese ich jetzt If ActiveSheet.Range ("A1") "*" Dann? – duncan297

+0

@ duncan297 Im Moment testen Sie Ihre Versteckbedingung wie folgt: 'cell.Value = ActiveSheet.Range (" A1 "). Value'. Ersetze diesen Teil mit der gewünschten Lösung und benutze 'cell.Value' als Heuhaufen. – Verzweifler

+0

@ duncan297 können Sie bitte Ihre Frage mit diesem Punkt aktualisieren? im Kommentar ist es schwerer zu lesen. Aber Sie müssen "Like" oder "Instr" (wie Verzweiler genannt) anstelle von anderen Vergleichsoperatoren verwenden. Wenn Sie = verwenden, prüfen Sie, ob zwei Variablen gleich sind, wenn Sie <> verwenden, sind sie nicht gleich, statt dessen können Sie like verwenden, um es teilweise zu überprüfen –

2

Da wir nicht wissen, ob Sie die Nadel enthält like -sensitiven Zeichen wie # oder ?, ich habe eine Lösung über instr() würde vorschlagen:

if instr(lcase(haystack), lcase(needle)) > 0 then 
' Do Stuff 

Dies Sie die Startposition des ersten Auftretens gibt der needle in haystack, oder 0, wenn needle nicht gefunden wird.

+0

guter Punkt, aber ich denke, dass VBA 'like'- ignoriert empfindliche Zeichen in Variable, aber nicht sicher damit. Du hast mir einen guten Punkt zum Nachdenken gegeben: p –

+1

Ich bin mir ziemlich sicher, dass VBA diese Zeichen nicht ignoriert. Ich habe 'Like' verwendet, um benutzerdefinierte Suchanfragen basierend auf diesen Ausdrücken zu erstellen. – Verzweifler

Verwandte Themen