マクロの解説

ここでは実際に使用されているマクロの重要なところを部分的に切り取って解説してまいりたいと思います。

文字の比較

If KensakuChar = ListChar Then
    Renzoku = True
    Charsu = Charsu + 1
                    
    If NamaeNagasa = Charsu Then
        With MeNamae
           .ListBox1.AddItem (ListNamaeX)

上記のコードがまさに検索キーワード(以降検索ワード)と検索される側の単語(以降単語)の文字を比較しているところです。

KensakuCharが検索ワードの一文字で、ListCharが単語の一文字です。

そしてその下にあるRenzoku = Trueというのがまさにこのサイトの「この検索窓のしくみ」で述べさせていただいた検索ワードがちゃんと単語の中に連続して入っているかを判定するための肝になるところです。これがいったんTrueになると次の文字も検索ワードと単語の一文字が一致しなければならず、一致しない場合は比較はその時点で終了となります。例えるならパチンコで最初に「7」が来たのに2列目の絵柄が違っているとそこで大当たりの可能性はなくなったというようなものです。

言い換えるとこの変数は連続して検索ワードが単語の中に並んでいるかを判定するために使われております。

NamaeNagasaは検索ワードの文字数、Charsuは一致した文字の文字数です。

例えばパチンコでいえばスロットの2列目まで「7」が一致した場合、Charsuは2になります。

そして3列目も「7」がきたらCharsuは3になりスロットは全部で3列しかないのでNamaeNagasaは3となりNamaeNagasaとCharsuがイコールになりスロットの列全部で「7」がそろったということで大当たり(検索の場合は検索結果リストへ単語を加える)ということになります。

ListNamaeXは単語が入っている変数で、.ListBox1.AddItem (ListNamaeX)で単語をリストボックス1(結果リスト)へ加えるということになります。

ちなみにMeNamaeは検索窓のことです。正確に言うとフォームの名前です。検索窓は一つのフォームです。

文字を取り出して比較する

       For P = 1 To ListNagasa
                r = r + 1
                If KensakuChar = ListChar Then
                    Renzoku = True
                    Charsu = Charsu + 1
                    If NamaeNagasa = Charsu Then
                        With MeNamae
                            .ListBox1.AddItem (ListNamaeX)
                            S2.Cells(g, 2) = i
                            g = g + 1
                        End With
                        KBanme = 0
                        Exit For
                     End If  
                     If NamaeNagasa >= Charsu Then
                        KBanme = KBanme + 1
                        KensakuChar = Mid(Namae, KBanme, 1)
                     End If
                     If ListNagasa >= LBanme Then
                        LBanme = LBanme + 1
                        ListChar = Mid(ListNamae, r, 1)
                      End If
                    Else
                        If Renzoku = True Then
                            Exit For
                        End If
                        LBanme = LBanme + 1
                        ListChar = Mid(ListNamae, LBanme, 1)
                     End If
                Next
        

このマクロは検索キーワードと検索される側の単語から比較するための1文字を取り出すためのものですがご覧の通り比較した文字が一致しない場合は、検索される側の単語からのみ次の文字を取得して、検索キーワード側は再び前回と同じ文字で比較するようになっております。

NamaeNagasa >= CharsuでNamaeNagasaは検索キーワードの文字数でCharsuは一致した文字の文字数です。つまりこれは一致した文字数が検索キーワードの文字数以下の場合ということになりますので検索される側の単語に検索キーワードが確認されてない場合ということになります。

検索キーワードが確認されるか、もしくは変数RenzokuがTrueの状態(一致する文字が表れている状態)で次の文字が一致しない場合までこの比較は行われます。

比較する1文字はMidを使って取ってきています。

ここで謎のS2という変数が表れますがこれはオブジェクト型の変数で、私もそんなに詳しくないですがちょっと調べたところフォームとかワークシートはたまたセルやRangeなどを入れておくための変数で、IntegerやString、Booleanなどのセル内にテキスト文字で記載できないようなものを入れるためのデーター型らしいです。このS2には「データ管理用3」という検索にヒットした単語の行番号を記録するためのワークシート情報が入っています。