文字列の左(先頭)・中・右(末尾)を切り出す方法を解説します。
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