和風スパゲティのレシピ

日本語でコーディングするExcelVBA

文字列の左中右を切り出す - Left/Mid/Right関数

文字列の左(先頭)・中・右(末尾)を切り出す方法を解説します。

Left・Mid・Right関数を使用します。

基本構文

' 左から指定文字数を切り出し
Left(対象文字列, 文字数)

' 指定位置から指定文字数を切り出し
Mid(対象文字列, 開始位置, 文字数)

' 指定位置から最後まで切り出し
Mid(対象文字列, 開始位置)

' 右から指定文字数を切り出し
Right(対象文字列, 文字数)

サンプルコード

Dim 対象文字列 As String
対象文字列 = "ABCDE"

Dim 取得文字列 As String

' 左から3文字を切り出し
取得文字列 = Left(対象文字列, 3) ' ABC

' 2文字目から3文字を切り出し
取得文字列 = Mid(対象文字列, 2, 3) ' BCD

' 2文字目から最後まで切り出し
取得文字列 = Mid(対象文字列, 2) ' BCDE

' 右から3文字を切り出し
取得文字列 = Right(対象文字列, 3) ' CDE

解説

文字列の左側を切り出す場合はLeft関数
途中から切り出す場合はMid関数
右端から切り出す場合はRight関数を使用します。

いずれもワークシート関数のLEFT/MID/RIGHTとほぼ同じ仕様です。


ただし「引数を省略した際の動き」だけはシート関数と異なっており、
VBAのMid関数は第3引数を省略できる仕様です。

二文字目以降 = Mid(Range("A1", 2)
' ※ シート関数では「MID(A1,2,1000)」のように書く必要があった

 
右側の文字列を切り出したい場合でも、
開始位置を左から数える場合はRight関数よりMid関数の方が簡単ですね。


使用時の注意点として、文字数にマイナスを渡すとエラーになります。

ただし、0を渡した場合は空の文字列""が返りますので、
この仕様は覚えておいて下さい。

Left(文字列, -1) ' ← エラー
Left(文字列, 0) ' ← エラーにならず""が返る

 

InStr関数との組み合わせ

切り出す位置や文字数を「文字列検索」によって求めたい場合は、
文字列を検索するInStr関数を組み合わせて使用します。


例えば商品コード「ABC-123=DEF」からABC,123,DEFを切り出す場合は、
以下のようなコードを使用します。

Dim 対象文字列 As String
対象文字列 = "ABC-123=DEF"

' 区切り位置を取得
Dim 区切り位置1 As Long
区切り位置1 = InStr(対象文字列, "-")

Dim 区切り位置2 As Long
区切り位置2 = InStr(対象文字列, "=")

' 3つの文字列を切り出し
Dim 左文字列 As String
左文字列 = Left(対象文字列, 区切り位置1 - 1)

Dim 中文字列 As String
中文字列 = Mid(対象文字列, 区切り位置1 + 1, 区切り位置2 - 区切り位置1 - 1)

Dim 右文字列 As String
右文字列 = Mid(対象文字列, 区切り位置2 + 1)

MsgBox 左文字列   ' ABC
MsgBox 中央文字列 ' 123
MsgBox 右文字列   ' DEF

InStr関数は指定した文字が左から何文字目にあるかを返す関数です。

これとLeft/Mid/Right関数を組み合わせることで、
ほとんどの文字列切り出しを実装することが可能です。


InStr関数の詳しい使い方はこちらをご覧ください。
www.limecode.jp