サイトについて      連絡先   検索

VBA Mid 関数

はじめに

Excel VBA マクロの Mid 関数を紹介します。

Mid 関数は、文字列の指定した位置から文字数分の文字列を返します。

文字列の途中から数文字だけ取得したいときに使用します。

  • 目次
    • 構文
    • 解説
    • 使用例

構文

Mid(文字列, 開始位置)
文字列開始位置から最後の文字まで抽出します。

Mid(文字列, 開始位置, 文字数)
抽出する文字数を指定できます。

引数「文字列」抽出元の文字列を指定します。
引数「開始位置」何文字目から抽出するかを指定します。
引数「文字数」省略できます。引数「開始位置」から抽出する文字数を指定します。
戻り値の型文字列型 (String)

解説

引数「開始位置」が1なら先頭の文字から抽出します。

引数「開始位置」が引数「文字列」を超える値のときは、空文字""を返します。

引数「開始位置」が0や 負の値のときはエラーが発生します。

引数「文字数」を省略したときは、引数「開始位置」から最後の文字までを返します。

引数「文字数」が0なら、空文字""を返します。

引数「文字数」が引数「文字列」を超える値のときは、引数「開始位置」から最後の文字までを返します。

Unicode のサロゲートペア文字は 2 文字として扱います。これを 1 文字として取得したいときは、関数を作成します。

文字列の文字数を取得するには「Len 関数」を使用します。

使用例


Dim s As String

s = Mid("123456", 1)
Debug.Print(s) ' 123456

s = Mid("123456", 7)
Debug.Print(s) ' ""

s = Mid("123456", 3, 2) ' 3 文字目から 2 文字取得
Debug.Print(s) ' 34
  
s = Mid("123456", 3, 0) 
Debug.Print(s) ' ""

s = Mid("123456", 3, 9)
Debug.Print(s) ' 3456

文字数を取得する


Dim i As Integer

i = Len("123456") ' 文字数の取得
Debug.Print(i) ' 6

サロゲートペア文字を 1 文字として取得する。MidSurrogate 関数を作成して取得しています。

サロゲートペア文字を判定する IsSurrogate 関数を使用しています。詳しくは「Unicode 文字の入力や読み込み」をご覧ください。

Sub 実行()
    Dim s As String
    s = "12" & WorksheetFunction.Unichar(171581) & "56" ' 12𩸽56
    
    Range("A1").Value = Mid(s, 1, 4)          ' 12𩸽
    Range("B1").Value = MidSurrogate(s, 1, 4) ' 12𩸽5

    Range("A2").Value = Mid(s, 4)             ' ?56
    Range("B2").Value = MidSurrogate(s, 4)    ' 56
End Sub

' サロゲートペア文字を 1 文字として文字を抽出します。
Function MidSurrogate(ByVal text As String, ByVal start As Long, Optional ByVal length As Long = 2147483647) As String
    
    Dim s As String ' 抽出した文字
    Dim char As String
    Dim index As Long ' 開始位置
    Dim midCount As Long ' 抽出した文字数
    
    ' 文字数を数える
    Dim i As Long
    For i = 1 To Len(text)
        index = index + 1
        
        ' 開始位置
        If index >= start Then
            char = Mid(text, i, 1)
            
            If IsSurrogate(Mid(text, i)) Then
                ' サロゲートペア文字
                char = Mid(text, i, 2)
                i = i + 1
            End If
            
            s = s & char
            
            ' 抽出文字数に達した
            midCount = midCount + 1
            If midCount >= length Then
                MidSurrogate = s
                Exit Function
            End If
            
        End If
        
    Next
    
    MidSurrogate = s
End Function
  • 目次
    • 構文
    • 解説
    • 使用例