2017-01-13 29 views
1

私のプログラムが配列内の文字列を検索する方法を高速化しようとしています。例えば、私は1000単語の列に "test"という単語を検索するプログラムを書いています。VBAの文字列比較アルゴリズムとは何ですか?

現在、私のプログラムは単純です:

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

はしかし、ここでの私の考えは、

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

あるしかし、私は私がVBAを求めるときかどうかをテストする場合は疑問に思い始めましたvalue = "test"、それは私はその2番目のコードで概説したプロセスを通過するのですか?基本的に、私の質問は、2番目のコードは冗長ですか?私は、VBAが本質的に一致する文字列全体をどのように探すかには慣れていません。私がValue = "string"を探すように頼んだときに誰かがVBAの流れを見せてくれたら、それは本当に助けになるかもしれません。ありがとう!

+2

「Range.Find」メソッドを使用するのはなぜですか? –

+1

または 'Match'関数?最適化を検討しているなら、確かに、ブルートフォースのセルワイズ反復に頼るよりも優れた組み込み方法があります。 –

+0

セルを繰り返し読み込むとすぐにウィンドウに表示されるようなメリットがあります。値を読み取るシートに行くオーバーヘッドは比較的大きいので、繰り返し繰り返すのは良い方向ではありません。 –

答えて

0

与えられた値がRange.Find methodを使用して範囲内に存在するかどうか検索する方法:

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 

Range.Find方法は、全体又は部分一致、大文字と小文字の区別を指定するために使用できるオプションの引数を有する、等

Match関数を使用して、指定された値を見つける方法は範囲内にあります。

NB:Application.Match関数は、一致が見つからないれる場合Applicationクラスは、エラータイプ(Variantとしてその戻り値を定義する、したがって必要が返されることを除いてWorksheetFunction.Matchと類似しているのに対し、WorksheetFunctionクラス意志にエラーを発生させます)。 Match機能の

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 

制限:Match機能はだけは本当に構築された他の仮定を持っている(False引数を使用して)完全一致または(TruemsoTrueまたはmsoCTrue引数を使用して)おおよそ試合のために働きますすなわち、データがソートされていること)。 Match関数は、単一列範囲または単一行範囲でのみ使用できます。