Developer

【ExcelVBA】VBAの関数 文字列操作②
2022.08.31
Lv1

【ExcelVBA】VBAの関数 文字列操作②

文字列操作の関数②

前回に続き文字列操作の関数を見ていきましょう。
前回は文字列を検索することができるInStr関数について説明しました。
今回はInStr関数と共に利用することで文字列から必要な文字列が抽出できる関数について説明します。
文字列を取り出す関数を使うことで、ファイルのフルパスからファイル名を除いたパスの部分だけを取り出したり拡張子だけを取り出したりすることができるようになります。

文字列を取り出す関数

文字列からある部分を抽出することができる関数にはLeft関数、Right関数、Mid関数があります。
それぞれの構文は以下のようになります。

Left(対象文字列, 抜き出したい文字数)
Right(対象文字列, 抜き出したい文字数)
Mid(対象文字列, 開始位置, 抜き出したい文字数)

Left関数とRight関数は対象の文字列と抜き出したい文字数を指定しますが、Midは抜き出しを開始する位置を指定する必要があります。
戻り値は抜き出した文字列となります。
Left関数は先頭から指定された文字数分抜き出す関数です。
Right関数はその逆で右側つまり後ろから指定された文字列を抜き出す関数です。
Mid関数は指定された部分から指定された文字数を抜き出す関数です。

文字数をカウントする関数

上記の文字列を取り出す関数と共に使うことがある関数として、文字列の文字総数をカウントする関数があります。
文字数をカウントする関数にはLen関数があります。
取り出す関数とLen関数を使用することで拡張子だけを抜き出すといったことができるようになります。
Len関数の構文は以下のようになります。

Len(対象文字列)

戻り値は文字数となります。

文字列抽出関数の使い方

これらの関数は単独で使用するというよりも前回紹介したInStrなどと組み合わせて使用することが多いかもしれません。
そこで前回説明したInStrと組み合わせて、これらの関数を使用したサンプルコードを見てみましょう。
C:\test.txtというファイルのフルパスからドライブレターやファイル名や拡張子などを抜き出す一例となります。

Sub VBA基礎第39回_1()
    Dim dot As Integer
    Dim en As Integer
    Dim cnt As Integer
    
    Dim str As String
    
    Dim drive As String
    Dim file As String
    Dim extension As String
    
    str = "C:\test.txt"
   
    'ドライブ文字を抽出
    en = InStr(str, "\")
    drive = Left(str, en - 1)
    'ファイル名を抽出
    dot = InStr(str, ".")
    file = Mid(str, en + 1, dot - en - 1)
    '拡張子を抽出
    cnt = Len(str)
    extension = Right(str, cnt - dot)
    
    MsgBox "ドライブは" & drive & " 。ファイル名は" & file & " 。拡張子は" & extension & " 。"
    
End Sub

実行結果は以下になります。

strの中からまずInStrを使用して「\」を検索します。今回の場合、変数enには3が入ります。
その部分より先頭から「\」の手前までを取り出せばドライブレターが取得できます。
そこでLeft関数を使用し「\」の手前までを取り出しています。
次にファイル名の取り出しです。ファイル名は「\」より後ろから「.」の手前までを取り出せば取得できます。
そこで再びInStrを使用し「.」の位置を検索します。8文字目なので結果として変数dotに8が入ります。
「\」より後ろから「.」の手前までを取り出すためにMid関数を使用しています。3つ目の変数には取り出す文字数を入れる必要があるためそれを計算しています。
最後に拡張子は文字列の最後から「.」より右側までを取り出せばよいことになります。
ただ拡張子の文字数が分からないため、まず文字列の総数から「.」までの文字数を引いて拡張子の文字数を出しています。
取り出す文字数が分かれば、Right関数を使用して取り出しています。
※パスがもっと長く\が複数出てくる場合はもう少しコードを工夫する必要があります。

まとめ

文字列を抽出する際に使用できる関数としてLeft関数、Right関数、Mid関数などがあります。
またそれらの関数と共に文字数をカウントするLeft関数を組み合わせて拡張子の抽出などができます。

確認問題

以下のコードの○○〇にコードを入れて、メールアドレスからユーザ名を抽出する処理を完成させてください。

Sub VBA基礎第39回_2()
    Dim atmark As Integer
    Dim mail As String
    Dim username As String

    mail = "testuser01@test.local"
  
    atmark = InStr(mail, "@")
    username = 〇〇〇
    
    MsgBox "ユーザ名は" & username
    
End Sub
答え


@よりも左側を抽出すればよいのでLeft関数を使用します。
[vb] Sub VBA基礎第39回_2()
Dim atmark As Integer
Dim mail As String
Dim username As String

mail = "testuser01@test.local"

atmark = InStr(mail, "@")
username = Left(mail, atmark – 1)

MsgBox "ユーザ名は" & username

End Sub
[/vb]

次回は、「【ExcelVBA】VBAの関数 文字列操作③」です。

 

連載目次リンク

ExcelVBA 入門 連載目次