2017-01-13 11 views
1

Ich versuche zu beschleunigen, wie mein Programm nach Zeichenfolgen in einem Array sucht. So schreibe ich zum Beispiel ein Programm, das in einer Spalte von 1000 zufälligen Wörtern nach dem Wort "test" sucht.Was ist der String-Vergleichsalgorithmus von VBA?

Derzeit mein Programm ist ein einfaches:

If Cells(x,1).Value = "test" Then 
... 
End If 

aber hier ist meine Idee,

If Left(Cells(x,1).Value,1) = "t" Then 
If Left(Cells(x,1).Value,2) = "te" Then 
... and so on ... 
End If 

Aber dann begann ich, wenn sich zu fragen, wenn ich für VBA bitten zu prüfen, um zu sehen, ob die value = "test", geht es durch den Prozess, den ich in diesem zweiten Code umrissen habe? Grundsätzlich ist meine Frage, ist der zweite Code überflüssig? Ich bin nicht vertraut damit, wie VBA inhärent nach ganzen übereinstimmenden Strings sucht. Wenn jemand aufklären könnte, was VBA durchmacht, wenn ich es frage, nach einem Value = "string" zu suchen, könnte es wirklich helfen. Vielen Dank!

+2

Warum verwenden Sie nicht einfach die Methode 'Range.Find'? –

+1

oder 'Match' Funktion? Wenn Sie sich die Optimierung ansehen, gibt es sicherlich bessere integrierte Möglichkeiten, als sich auf die zellweise Iteration von Brute-Force zu verlassen. –

+0

Jeder Vorteil, der das Fenster verlassen könnte, sobald Sie die Zelle wiederholt zu lesen beginnen - der Aufwand, zum Blättern zu gehen, um einen Wert zu lesen, ist vergleichsweise groß, so dass das immer wieder vorbei ist, ist keine gute Richtung. –

Antwort

0

Wie zu finden, wenn ein bestimmte Wert in einem Bereich existiert Range.Find method mit:

Dim rng as Range 
Dim found as Range 
Dim val As String 

val = "test" '## Modify as needed 
Set rng = Range("A1:A1000") '## Modify as needed 
Set found = rng.Find(val) 

'The Range.Find method will return a Nothing if the value is not found 
If found Is Nothing Then 
    MsgBox "Not found!" 
Else 
    'do something with it... 

End If 

Die Range.Find Methode optionale Argumente hat, die verwendet werden kann, ganz oder teilweise Übereinstimmungen angeben, Groß- und Kleinschreibung usw.

Wie man einen gegebenen Wert findet, existiert in einem Bereich, der Match Funktion verwendet.

NB: Die Application.Match Funktion zum WorksheetFunction.Match ähnlich ist, wenn das Spiel wird nicht die Application Klasse gefunden wird einen Typ Fehler (daher die Notwendigkeit Rückkehr der Rückgabewert als Variant, während die WorksheetFunction Klasse zu definieren erhöhe einen Fehler).

Dim rng as Range 
Dim found as Variant 
Dim val as String 
val = "test" '## Modify as needed 
Set rng = Range("A1:A1000") '## Modify as needed 
found = Application.Match("test", rng, False) 

'The Application.Match function will return an Error Type if the val is not found 
If IsError(found) Then 
    MsgBox "Not found!" 
Else 
    'do something with it 
End If 

Einschränkungen der Match Funktion: Die Match Funktion funktioniert nur wirklich für exakte Übereinstimmungen (mit dem False Argumente) oder ungefähren Matches (unter Verwendung der True, msoTrue oder msoCTrue Argumente), die einige andere Annahmen hat gebaut in, nämlich dass die Daten sortiert sind). Die Match-Funktion kann nur für einen einspaltigen Bereich oder einen einzeiligen Bereich verwendet werden.