ITサポーターTsuchida

VBA Advance7

第7章 リニアサーチ

Excelの関数の中にVlookup関数があります。Vlookup関数は別の表から検索値に対応するデータを取得するため、非常に使用頻度が高い関数です。VBAの場合は、サーチのアルゴリズムを使えばVlookup関数と同じことができます。

リニアサーチとはデータを先頭から順番に探す、アルゴリズムとしては簡単なサーチです。ただし先頭から順番に探すので、表のデータが増えればスピードが遅くなります。10000件なら平均で5000件目で見つかり、見つからない場合は10000件探すことになります。そのためデータ量が増えれば増えるほど遅くなる欠点があります。

ちなみにVlookup関数の引数がfalseはリニアサーチになります。Vlookup関数の引数がfalseはデータ量が多くなると遅くなります。

リニアサーチのアルゴリズム

同じブックにあるSheet2のシートの表のA列に該当するC列を取得する、リニアサーチで求める方法(検索値はsDataとする)

Dim ws As Worksheet

Dim i As Long

Dim result As Variant

Set ws = ThisWorkbook.Sheets("Sheet2")

result = ""

For i = 2 To ws.Cells(Rows.Count, 1).End(xlup).Row

If sData = ws.Cells(i, 1) then

result = ws.Cells(i, 3)

Exit For

End If

Next

ForステートメントとIfステートメントの組み合わせで、ループの処理と複数のシートをまたぐ処理ができれば比較的簡単に作れます。