t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Webで動くVBAチュートリアルを作りたい その4

その2で公開したFindString関数の以下の部分は、もっとスマートに書けるということに気づいた。

    Else
        'ひと文字目が「"」以外の場合は、
        '次の「"」の手前までの文字を返して終了
        For i = 2 To Len(st)
            If Mid(st, i, 1) = """" Then
                FindString = Left(st, i - 1)
                Exit Function
            End If
        Next
    End If

新しいコードはこちら

    Else
        FindString = Split(st, """")(0)
        Exit Function
    End If

Split関数をつかってダブルクォーテーションで分割し、その配列のインデックス0を参照すれば、目的の文字列が入っている。

 ついでに、その3で公開したtest関数もreplaceの繰り返しが見苦しいので修正。

古いコード

            result = Replace(result, "&", " & ")
            result = Replace(result, "+", " + ")
            result = Replace(result, "-", " - ")
            result = Replace(result, ")", " ) ")
            result = Replace(result, "(", " ( ")
            result = Replace(result, "*", " * ")
            result = Replace(result, "/", " / ")
            result = Replace(result, "=", " = ")
            result = Replace(result, ",", " , ")
            result = Replace(result, "'", " ' ")
            result = Replace(result, vbTab, " ")

新しいコード

            For Each x In Split("& + - ) ( * / = , '", " ")
                result = Replace(result, x, " " & x & " ")
            Next x
            result = Replace(result, vbTab, " ")

Tabの置換は残ったが、それでもだいぶマシになった。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。