【VBA入門】Left関数で先頭から指定文字数だけ抜き出す

Left関数って使っていますか?ある文字列の中の先頭から指定文字数分だけ抜き出す場合に使用します。

InStr関数やRight関数などと一緒に使われることも多いです。この記事では、Left関数について

  • Left関数の使い方
  • LeftB関数の使い方


という基本的な内容から、

  • Right関数の使い方
  • Right関数、InStr関数との組み合わせ
  • Mid関数との組み合わせ
  • 全角文字列を扱う方法
  • 参照設定でエラーが出たときの対処法

など応用的な内容についても解説していきます。

今回はLeft関数について、使い方をわかりやすく解説します!

目次

Left関数の使い方

Left関数は文字列内の先頭から指定した文字数分の文字を含む文字列を返します。

以下のように記述します。

Left(string, length)

  • stringは対象となる元の文字列です。
  • lengthは抜き出す文字列の長さを指定します。
  • 0を指定すると、長さ0の空文字列が返されます。
  • stringの文字数以上の値を指定すると、文字列全体が返されます。

サンプルコードで確認しましょう。

Sub macro1()
    Dim str As String
    str = "Hello VBA"
    
    MsgBox Left(str, 5)
End Sub

実行結果:
Left03

このサンプルコードでは、Left関数を使って文字列の先頭から指定した5文字を抜き出しています。

LeftB関数の使い方

LeftB関数は文字列の先頭から指定したバイト数分の文字列を返します。LeftB関数は以下のように記述します。

LeftB(string, length)

LeftB関数はLeft関数と比べて、指定したバイト数分の文字列を返すという部分が違うだけで、引数の指定はLeft関数と変わりません。

引数の指定についてはLeft関数を参照してください。サンプルコードで確認しましょう。

Sub macro2()
    Dim str As String
    str = "Hello VBA"
    
    MsgBox LeftB(str, 10)
End Sub

実行結果:
Left03

このサンプルコードでは、LeftB関数を使って文字列strの先頭から指定した10バイト分だけ抜き出しています。

ここで注意があります。VBAでは文字コードはUTF-16が使われています。UTF-16では半角文字でも全角文字でも1文字のバイト数は2バイトです。

特に半角文字の場合でも、文字数とバイト数の値が違うので注意しましょう!

Right関数の使い方

Left関数はRight関数と合わせて使われることも多いので、Right関数についても解説します。Right関数は文字列の最後尾から指定文字数分だけ文字列を抜き出します。

以下のように記述します。

Right(string, length)

引数stringには、対象となる元の文字列を指定します。

引数lengthには、引数stringの最後尾から抜き出す文字数を指定します。

Right関数、InStr関数との組み合わせ

Left関数はRight関数、InStr関数と組み合わせて使われることがよくあります。

InStr関数を使って指定文字列の位置を取得し、その指定文字列より前の部分を抜き出すためにLeft関数を使い、後ろの部分を抜き出すためにRight関数を使うといった使い方になります。

サンプルコードで確認しましょう。

Sub macro3()
    Dim str As String, del As String
    str = "Hello VBA"
    del = " " ' 半角スペース
    
    MsgBox Left(str, InStr(str, del) - 1) & ", " & Right(str, Len(str) - InStr(str, del))
End Sub

実行結果:
mid02

このサンプルコードでは、InStr関数を使って文字列strの中の半角スペースの位置を取得しています。InStr関数で取得した位置より1文字前までLeft関数を使って抜き出しています。

またRight関数の最後尾から位置の指定を文字列strの文字長さとInStr関数で取得した位置から算出しています。InStr関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

Mid関数との組み合わせ

Left関数はRight関数やInStr関数以外にも、Mid関数と組み合わせて使われることもあります。

Mid関数は、ある文字列の中の指定位置から指定文字数分だけ抜き出すことができます。Mid関数は下記のように記述します。

Mid(string, start[, length])

Left関数とMid関数を組み合わせた使い方については、こちらで詳しく解説しています。

ぜひ参考にしてください。

全角文字列を扱う方法

これまでのサンプルコードでは対象とする文字列は半角の英数字でした。

では日本語の全角文字列を扱う場合は文字数はどのように数えられるのでしょうか?結論を言うと、英数字のような半角文字でも日本語のような全角文字でも数え方は変わりません。

前述のとおり、VBAでは半角文字でも全角文字でも1文字はどちらも2バイトで数えられます。角文字でも全角文字でも文字数もバイト数も変わりません。

ですので半角文字、全角文字の違いは気にする必要はなさそうです。それではサンプルコードで確認しましょう。

Sub macro4()
    Dim str As String, str1 As String, str2 As String
    str = "東京都千代田区"
    str1 = "千代田区"
    
    str2 = Left(str, Len(str) - Len(str1))
    
    MsgBox str1 & ":" & Len(str1) & "文字" & vbCrLf & str2
End Sub

実行結果:
Left01

このサンプルコードでは、Left関数を使って文字列strから文字列str1より前の文字列を抜き出しています。

Left関数の指定文字数は、Len関数を使ってstrの文字数とstr1の文字数を取得し、算出して使用しています。Len関数を使って取得したstr1の文字数を表示していますが、日本語の全角文字でも4文字と正しく取得できていることがわかります。

参照設定でエラーが出たときの対処法

VBAのLeft関数などでコンパイルエラーが発生することがあるようです。

Left02

関数の前に「Strings.」をつけると解決するようです。

Strings.Left(string, length)

参照設定の不具合のようですので、こちらも参考にしてみてください。
https://msdn.microsoft.com/ja-jp/library/office/gg251321.aspx

まとめ

ここでは、Left関数、LeftB関数の使い方について説明しました。

Left関数はRightt関数、InStr関数と組み合わせて使うと、文字列の分割操作などもできるようになります

使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次