ラピードアクト株式会社

技術記事:ExcelVBAで仕事を効率化しようVol.16

みなさん、こんにちは。
ITソリューション事業部の林です。

本記事では、ExcelVBAのテクニックを紹介・解説いたします。

今回紹介するのは、「文字列の一部を抽出する関数」です。

【目次】

  1. 文字列の一部を抽出するとは
  2. 構文
  3. 使用例
  4. 終わりに

それでは、始めましょう!

文字列の一部を抽出するとは

ある程度の長さがある文字列から、「先頭(または末尾)からn文字抜き出す」、あるいは「n文字目からn文字だけ抜き出す」といった使い方をします。
例えば、「サンプル.xlsx」というファイル名の文字列から一部を抜き出す、といった使い方ができます。

この特性を利用して、条件分岐に使用するテクニックがあります。
例えば、「ファイル名の先頭(または末尾)が〇〇〇であれば真(True)とする」などです。
ファイル選択ダイアログで選択したファイルの名前に合わせて、その後の処理を実行したり、スキップしたりといった使い分けができるようになります。

構文

先頭からn文字抜き出す関数は、Left関数です。
文字列の左側から抜き出すのでこのような名前になっています。

Left(文字列, 抜き出す文字数)

末尾からn文字抜き出す関数は、Right関数です。
右(Right)=文字列の末尾と考えましょう。

Right(文字列, 抜き出す文字数)

n文字目からn文字抜き出す関数は、Mid関数です。

Mid(文字列, 抜き出し開始位置[ ,抜き出す文字数])

Mid関数は引数を3つ指定できますが、3つ目だけは省略可能です。
その場合、抜き出し開始位置以降の文字をすべて抜き出します。

使用例

使用例① Left,Right,Midの出力結果
上述した3つの関数を使って、実際に文字列を抜き出しました。
出力結果はDebug.Printでイミディエイトウインドウに出力しています。

Sub ExcelVBA_016_Example1()
    Dim StrLine As String
    StrLine = "サンプル.xlsx" '文字列を指定
    'Left
    Debug.Print "Leftの結果⇒", Left(StrLine, 4) '先頭から4文字抜き出す
    'Right
    Debug.Print "Rightの結果⇒", Right(StrLine, 4) '末尾から4文字抜き出す
    'Mid
    Debug.Print "Midの結果①⇒", Mid(StrLine, 3, 2) '3文字目から2文字抜き出す
    Debug.Print "Midの結果②⇒", Mid(StrLine, 3) '3文字目以降をすべて抜き出す
End Sub

↓出力結果↓

使用例② 関数の組み合わせ
関数を組み合わせれば、より柔軟に文字列を抽出できるようになります。

Sub ExcelVBA_016_Example2()
    Dim StrLine As String
    StrLine = "福岡県_福岡市_中央区_薬院_3-11-3" '文字列を指定
    'RightとLeftの組み合わせ(末尾の6文字を抜き出し、さらに先頭4文字抜き出す)
    Debug.Print "↓末尾の6文字を抜き出し、さらに先頭4文字抜き出す↓"
    Debug.Print Left(Right(StrLine, 6), 4)
    'LeftとMidの組み合わせ(先頭の7文字を抜き出し、さらに先頭から5文字目以降を抜き出す)
    Debug.Print "↓先頭の7文字を抜き出し、さらに先頭から5文字目以降を抜き出す↓"
    Debug.Print Mid(Left(StrLine, 7), 5)
    'RightとMidの組み合わせ(先頭から見て5文字目から10文字分抜き出し、さらに末尾3文字抜き出す)
    Debug.Print "↓先頭から見て5文字目から10文字分抜き出し、さらに末尾3文字抜き出す↓"
    Debug.Print Right(Mid(StrLine, 5, 10), 3)
End Sub

↓出力結果↓
(抽出対象の文字列は「福岡県福岡市中央区_薬院_3-11-3」です)

使用例③ 抽出した文字で処理分岐
抜き出した文字列に合わせて処理を分岐させられます。
以下の例では、ファイル選択ダイアログで選択したファイルの末尾がExcelのものか、そうでないかを判定しています。

Sub ExcelVBA_016_Example3()
    Dim StrLine As String
    'ファイル選択ダイアログで選択
    With Application.FileDialog(msoFileDialogFilePicker)
        If .Show = True Then
            StrLine = .SelectedItems(1) '選択したファイルを変数に記憶
        Else
            Exit Sub '選択キャンセルされたら処理終了
        End If
    End With
    'ファイルパスの拡張子で条件分岐
    If Left(Right(StrLine, 4), 3) = "xls" Then
        'Excelの拡張子の場合にメッセージ表示
        MsgBox "Excelファイルが選択されました", vbInformation
    Else
        'Excel以外の拡張子の場合にメッセージ表示
        MsgBox "Excelファイル以外のファイルが選択されました", vbExclamation
    End If
End Sub

↓出力結果↓

終わりに

以上、文字列から一部を抜き出す関数の紹介でした。
地味な内容になってしまいましたが、ちょっとした関数を覚えているかそうでないかで開発効率は変わってきます。
「こういう場合にどの関数を使えばいいんだっけ?」とならないためには、その関数の使用回数を増やしてみましょう。
地道な積み重ねが土台となって技術力は向上していくもの、と私個人は考えています。

それでは、また次回お会いしましょう!