文字列の検索

変数に設定してある文字の長さはどれだけだろう、文字列の中に見つけたい文字列が入っているだろうか、などの疑問が出てきたとき、調べるための関数が用意されています。長さを調べるLen関数、文字列を検索するInStr関数/InStrRev関数です。詳しく見ていきましょう。

Len関数

文字列の長さを教えてくれる関数です。

[リスト6]Rei_Len(文字列の検索.xlsm)

Sub Rei_Len()
   s = "こんにちはお元気ですか?"
   MsgBox (Len(s))      '(1)結果:12

   s = "私は3丁目5番地に住んでいます"
   MsgBox (Len(s))      '(2)結果:15

End Sub

(1)はすべて全角で12文字です。(2)は全角、半角入り混じって15文字です。Len関数は表示される文字数を教えてくれます。

InStr関数

文字列の中から、指定した文字列が入っているか、文字列の指定位置から検索し、見つかった文字位置を教えてくれます。

[構文]InStr関数

InStr([start,]stringcheck,stringmatch)
    start:検索開始位置  stringcheck:検索対象文字列
    stringmatch:検索する文字

最初の検索開始位置は省略可能です。

[リスト7]Rei_InStr(文字列の検索.xlsm)

Sub Rei_InStr()
    moto = "AAABCAABAAABC"
    s = "BC"
    c = InStr(1, moto, s)   '(1)結果:4
    MsgBox (c)

    c = InStr(5, moto, s)   '(2)結果:12
    MsgBox (c)

    c = InStr(moto, s)   '(3)結果:4
    MsgBox (c)

    s = "Z"
    c = InStr(moto, s)   '(4)結果:0
    MsgBox (c)
End Sub

(1)は検索開始位置を1文字目からに指定しています。(2)は5文字目からの指定です。(3)は開始位置を省略してみました。(4)は検索対象文字列に無い文字を指定しました。

実行のイメージ図を見て、確認してください。

図1:InStr関数イメージ図

InStrRev関数

文字列の中から、指定した文字列が入っているか、文字列の最後から最初に向かって検索し、見つかった文字位置を教えてくれます。Instr関数が最初の文字から検索するのに対して、InStrRev関数は最後の文字から検索します。

[構文]InStrRev関数

InStrRev(stringcheck,stringmatch[,start])
    stringcheck:検索対象文字列  stringmatch:検索する文字
    start:検索開始位置

最後の検索開始位置は省略可能です。

[リスト8]Rei_InStrRev(文字列の検索.xlsm)

Sub Rei_InStrRev()
    moto = "AAABCAABAAABC"
    s = "BC"
    c = InStrRev(moto, s, 1)   '(1)結果:0
    MsgBox (c)

    c = InStrRev(moto, s, 5)   '(2)結果:4
    MsgBox (c)

    c = InStrRev(moto, s)   '(3)結果:12
    MsgBox (c)

    s = "Z"
    c = InStrRev(moto, s)   '(4)結果:0
    MsgBox (c)

End Sub

(1)は1文字目からの検索を指定ます。検索する方向がInStr関数とは逆で、検索順は1文字目が最後になるので、検索対象の文字列を見つけることができません。(2)は5文字目から1文字目に向かって検索をします。(3)は検索開始を省略しているので、最後から検索して、見つかった場所を返します。(4)は検索対象文字列に検索する文字がないので、「0」を返します。

InstrRevのイメージ図です。図1と比較してみてください。

図2:Rei_InStrRevイメージ図

文字列の切り出し

文字列を好きなところから切り出したいとき、左からほしい文字数を切り出すには、Left関数、右端からほしい文字を切り出すには、Right関数、真ん中の文字列を切り出すにはMid関数を使います。それぞれを説明します。

Left関数

左からほしい文字数を切り出す関数です。

[構文]Left関数

Left(string,length)
    string:切り出したい文字列  length:切り出す文字数

以下に、具体的な用例を示します。

[リスト9]Rei_Left(文字列の切り出し.xlsm)

Sub Rei_Left()
    s = "Left関数は左から文字を切り出します"
    a = Left(s, 6)      '(1)結果:Left関数
    MsgBox (a)

    s = "Left関数は左から文字を切り出します"
    a = Left(s, 6)      '(2)結果:Left関数
    MsgBox (a)
End Sub

(1)も(2)も左から6文字切り出しています。はじめは、切り出したい文字列の「Left」は全角で書かれ、次の「Left」は半角で書かれています。切り出した文字列は「Left関数」と「Left関数」となります。全角、半角どちらも1文字と数えます。

Right関数

右からほしい文字数を切り出す関数です。

[構文]Right関数

Right(string,length)
string:切り出したい文字列  length:切り出す文字数

以下に、具体的な用例を示します。

[リスト10]Rei_Right(文字列の切り出し.xlsm)

Sub Rei_Right()
    s = "右から文字を切り取り出すRight関数です"
    a = Right(s, 9)     '(1)結果:Right関数です
    MsgBox (a)

    s = "右から文字を切り取り出すRight関数です"
    a = Right(s, 9)     '(2)結果:Right関数です
    MsgBox (a)
End Sub

(1)も(2)も右から9文字切り出します。はじめは、切り出したい文字列の「Right」は全角で書かれ、次の「Right」は半角で書かれています。切り出した文字列は「Right関数です」と「Right関数です」となります。全角、半角どちらも1文字と数えます。

Mid関数

文字列の中の一部をほしい文字数を指定して切り出す関数です。

[構文]Mid関数

Mid(string,strat[,length])
    string:切り出したい文字列  start:切り出す開始番号
    length:切り出したい文字数

最後の切り出したい文字数は省略可能です。

[リスト11]Rei_Mid(文字列の切り出し.xlsm)

Sub Rei_Mid()
    s = "中央の文字はMid関数で切り取り出します"
    a = Mid(s, 7, 5)        '(1)結果:Mid関数
    MsgBox (a)

    s = "中央の文字はMid関数で切り取り出します"
    a = Mid(s, 7, 5)        '(2)結果:Mid関数
    MsgBox (a)

    s = "中央の文字はMid関数で切り取り出します"
    a = Mid(s, 7)       '(3)結果:Mid関数で切り取り出します
    MsgBox (a)
End Sub

(1)も(2)も7文字目から5文字文切り出します。はじめは、切り出したい文字列の「Mid」は全角で書かれ、次の「Mid」は半角で書かれています。切り出した文字列は「Mid関数」と「Mid関数」となります。全角、半角どちらも1文字と数えます。(3)は切りだす文字数を省略しました。省略されると開始文字から最後の文字までまとめて切り取られます。

まとめ

文字列を加工したい時によく使用する関数を集めてみました。どの関数も良く使用されています。覚えておくととても便利です。次回も文字列用の関数を集めて説明したいと思います。

WINGSプロジェクト 横塚利津子著/山田祥寛監修
<WINGSプロジェクトについて>テクニカル執筆プロジェクト(代表山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・雑誌/Web記事の執筆、講演等を幅広く手がける。2009年4月時点での登録メンバは30 名で、現在も一緒に執筆をできる有志を募集中。