HOME > 即効テクニック > Excel VBA > 文字列操作関連のテクニック > 任意の位置から任意の文字数分の文字列を取り出す(Mid関数、MidB関数)

即効テクニック

文字列操作関連のテクニック

任意の位置から任意の文字数分の文字列を取り出す(Mid関数、MidB関数)

(Excel 2000)
引数Startで指定した位置から、引数Lengthで指定した長さの分だけ、引数Stringで指定した文字列から文字列を取り出します。開始位置以降の全ての文字列を取得したい場合には、引数Lengthの指定を省略してください。


構文 Mid(String, Start, Length)
   MidB(String, Start, Length)

 設定項目        内容
  String     取り出し元となる文字列式を指定 [省略不可]
  Start      どの位置から文字列を取り出すかを指定 [省略不可]
  Length     取り出す文字列の長さを指定 [省略可能]


次のサンプルは、セル範囲A1〜A6に入力された文字列を、Mid関数を用いて1文字ずつに分解して右横のセルに記入しています。

●サンプル●
Sub MidSamp1()
    Dim c As Range
    Dim i As Integer

    For Each c In Range("A1:A6")
        '---文字数分だけ繰り返し
        For i = 1 To Len(c.Value)
            Cells(c.Row, i + 1).Value = Mid(c.Value, i, 1) '---(1)
        Next i
    Next c

End Sub

●解説●
(1)のステートメントで、文字列を分解しています。1回目のループ処理では、カウンタ変数iの値には1が代入されます。つまり、次の式は、最初の1文字を取り出す処理になります。

Mid(c.Value, 1, 1)

もちろん、これはLeft関数で引数Lengthに1を指定した場合と同じ結果になります。以降、iの値が1ずつ増加していくことで、文字列の取り出し位置が1文字ずつ右にずれていきます。なお、対象文字列の文字数だけループ処理が必要なため、文字数を返すLen関数で文字数を取得しています。


●ポイント●
Left関数、Right関数、Mid関数などは、Variant型(内部処理形式String)の値で処理結果を返します。これを、String型で値を返す関数にしたい場合には、関数名の末尾にドル記号($)をつけて、「Leht$」といった形で使用するようにしてください。String型で結果を返すようにすると、

・若干パフォーマンスが向上する
・異なるデータ型での比較を行なう可能性が低くなる

といったメリットがあります。しかし、ドル記号つけないからといってエラーが発生することはありません。

●補足●
Midステートメントと混同しないように気をつけてください。Midステートメントは、指定された位置の文字列を、別の文字列に置き換える処理を行ないます。