このマクロがどのようにして検索しているかと申しますと、地味に1文字ずつ比較しております。
「完全一致」で検索するのと「部分一致」(検索キーワードが検索される側の単語に含まれていればよしとする)とでは若干このプロセスは変わってきますが、基本は同じです。
完全一致の場合は「東京」の一番最初にある「東」の文字が検索される側の単語の一番最初の文字と一致するかどうかを調べます。そして一致する場合はさらに2番目の文字「京」が両方の文字列と一致するかを調べます。このようにして順番に検索キーワードの文字数分この工程が繰り返され検索キーワードと検索される側の文字列が一致してなおかつ両者の文字数も同じ場合に検索結果リストに加え、一致しなかった場合は次の行にある単語を同じように比較していきます。
さて、これまでは完全一致の工程について述べてきましたが「部分一致」についても基本は完全一致の調べ方と同じです。
違いは1文字目を比較して一致しなくとも検索される側の文字列の文字の2番目、3番目と順に比較していく点です。
例えば検索キーワードが先ほどと同じように「東京」だとしてリストの文字が「日本国東京」だとすると当然1文字目は「東」と「日」と異なりますが、ここで比較をやめずに検索キーワードの「東」とリスト文字列2番目の文字の「本」を比較し、ここでも違うとなれば次の「国」と比較しまた違います。しかし次の文字で「東」が出てきますので、ここで一致することになります。そしてここであらかじめ用意しておいたBoolean形の変数(TrueもしくはFalseが入る変数)にTrueをいれます。
このTrueはパチンコでいえばスロットの1番目に「7」が来たということを記録するためのものです。つまり大当たりの可能性が出てきた(文字列が一致する可能性が出てきた)。そしてさらに比較は続き検索キーワードの次の文字「京」と比較される側の文字列の次の文字「京」が比較され合致していて変数はTrueのため前の文字列も一致しているということになり、ここで検索キーワードの文字数分(ここでは2文字)が一致したということで検索結果リストに「日本国東京」という文字列を加えこの行の検索は終了します。
検索のためにBoolean形の変数Trueを入れたのは検索キーワードの文字列が検索リスト文字列の中でちゃんと「東京」という風に連続して入っているかを確かめるためです。例えば検索リストの文字列(比較される側の文字列)が「東西京」だった場合「東」は一致していても、次の文字を比較したら「西」で「京」とは一致していませんが比較は最後まで行われるため、この時点で比較終了とはならずさらに3文字目の「京」と「京」が比較され一致しているということになり、文字数も検索キーワード(この場合は東京)の文字数分2文字一致したということで「東京」という文字列が連続して入っていないのにもかかわらず結果リストに「東西京」という文字列が加えられることになってしまいます。
Trueという変数を入れておけば、1番目の文字列が一致してTrueになることにより2番目の文字列を比較して一致しなかったときに1番目の文字は一致しているが2番目の文字は一致していないということがわかり、2番目の文字が一致していないということは連続して一致していないということになりそれ以上比較するのは無意味ということでその文字列の比較をそこで終了することができます。
Boolean形の変数Trueは検索キーワードが連続して検索される側の単語の中に入っているかどうかを判定するために存在しております。パチンコでいえば最初に「7」が来た時点でリーチの可能性が出てきたということで変数がTrueになり次も7が来たら変数はそのままTrueを維持してリーチ、そして最後に7がきたときに変数を見るとTrueになっているので前の2列は7ということがわかり7が連続して3つ並んだと判定されて大当たり!!確変のフィーバータイムに入ります。この間一度でも「7」以外の絵柄が出てきたらその時点で大当たりの可能性はなくなったということになり検索でいえば、その文字列の検索は終了、TrueはFalseに変わります。
このBoolean形の変数が一度もTrueになっていない場合は文字列最後まで比較が続きます。