【Excel VBA】文字列の切り出し・検索の方法

Excel VBA 文字列の切り出し・検索方法

Excel VBAで、文字列の一部分を切り取る関数と、文字列の中に特定の文字があるか検索する関数を説明します。

文字列の一部を切りだす方法(Left / Right / Mid)

文字列の一部を切り出す関数は、切り出した文字列が返り値となります。また、関数は3種類用意されていて、文字列のどの位置から文字を切り出すかが分かれています。

  • Left    : 文字列をから切り取る
  • Right  : 文字列をから切り取る
  • Mid    : 文字列の真ん中から切り取る

使い方は以下になります。文字の数え方は1から。プログラムを書いていると0からだっけ?と勘違いすることもあるかもしれませんが1からです。

  • Left(対象の文字列, 左から数えて切り出す文字数)
  • Right(対象の文字列, 右から数えて切り出す文字数)
  • Mid(対象の文字列, 切り出し始める文字位置, 切り出す文字数)
Left / Right / Midのサンプル

copy

Sub CutString()

    Dim str As String
    Dim sheet As Worksheet
    
    str = "LeftMidRight"
    
    Set sheet = ActiveSheet
    
    sheet.Cells(1, 1).Value = Left(str, 4)   'Left
    sheet.Cells(2, 1).Value = Mid(str, 5, 3) 'Mid
    sheet.Cells(3, 1).Value = Right(str, 5)  'Right

End Sub

文字列を検索する関数(InStr / InStrRev)

文字列を検索する関数は、見つけた文字の位置を数値型として返します。関数は2種類用意されていて、文字を右から検索するか、左から検索するかの違いがあります。

対象の文字列の中に検索したい文字が複数ある場合に、InStrとInStrRevを使い分けます。

注意すべき点は、検索の開始位置が異なるだけで、両方とも文字列の左からの位置を返します。

  • InStr       : 指定した文字をから検索し、左からの文字位置を返す
  • InStrRev : 指定した文字をから検索し、左からの文字位置を返す

※ 両関数とも、指定した文字が見つからない場合は0を返します。

使い方は以下になります。これだけ見てもピンとこないと思うので、さらに下のサンプルコードも合わせてご覧ください。

  • InStr(対象の文字列, 検索する文字列)
  • InStrRev(対象の文字列, 検索する文字列)
InStr / InStrRevのサンプル

copy

Sub SearchString()

    Dim str As String
    Dim sheet As Worksheet
    
    str = "123@56@890"
    
    Set sheet = ActiveSheet
    
    sheet.Cells(1, 1).Value = InStr(str, "@")    '4
    sheet.Cells(2, 1).Value = InStrRev(str, "@") '7

End Sub

InStrは左から検索するので4を返し、InStrRevは右から検索するので7を返します。

繰り返しになりますが、InStrもInStrRevも左から数えた位置を返します。InStrRevを使うと、右から検索するから右からの文字数を返すと勘違いしそうなので注意してください。

文字が存在するor存在しない場合に処理を分岐させる

文字が見つからない場合には0を返すことを利用して、文字の存在チェックをして処理を分岐させることが可能です。個人的にはこの使い方をすることが多いです。

InStr / InStrRevの応用例

copy

Sub CheckEmailAddressFormat()

    Dim str1, str2 As String
    Dim sheet As Worksheet
    
    str1 = "takenoko-blog:test.co.jp"
    str2 = "takenoko-blog@test.co.jp"
    
    Set sheet = ActiveSheet
    
    If InStr(str1, "@") = 0 Then
        sheet.Cells(1, 1).Value = str1 + "はメールアドレスの形式ではありません"
    End If
    
    If InStr(str2, "@") > 0 Then
        sheet.Cells(2, 1).Value = str2 + "はメールアドレスの形式です"
    End If

End Sub

切り出し関数と検索関数の合わせ技

切り出し関数と検索関数を組み合わせることで、便利な使い方が出来るので紹介します。

例えば、メールアドレスのドメイン部分を切り出したり、ファイルの拡張子を取り除くことに使えます。

検索と切り出しの組み合わせサンプル

copy

Sub SearchAndCutString()

    Dim str1, str2 As String
    Dim sheet As Worksheet
    
    str1 = "takenoko-blog@test.co.jp"
    str2 = "sample.txt"
    
    Set sheet = ActiveSheet
    
    sheet.Cells(1, 1).Value = Mid(str1, InStr(str1, "@") + 1)  'test.co.jp
    sheet.Cells(2, 1).Value = Left(str2, InStrRev(str2, ".") - 1) 'sample

End Sub

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です