VBA(Visual Basic for Applications)は、ExcelやAccessなどのMicrosoft Office製品をより便利に使うためのプログラミング言語です。なかでも文字列操作はVBAの中でも使用頻度の高い分野であり、よく使われる関数のひとつに「Left関数」があります。Left関数は、文字列の左端から指定した文字数を取り出すために使用される非常にシンプルで便利な関数です。本記事では、Left関数の基本的な使い方から、実務で役立つ応用例までを丁寧に解説します。これからVBAを学び始める方も、既に使っているけどもう一歩深く理解したいという方にも役立つ内容となっています。
Left関数は、指定した文字列の左側から、指定した文字数分だけ文字を取り出すVBAの文字列関数です。構文は次の通りです。
Left(文字列, 文字数)
この関数は、文字列の前方から部分的に取り出したいときに非常に便利です。
たとえば、「東京都新宿区」という文字列から「東京都」だけを取り出したい場合、次のように書きます。
Sub SampleLeft()
Dim address As String
Dim result As String
address = "東京都新宿区"
result = Left(address, 3) ' 「東京都」が取り出される
MsgBox result
End Sub
このコードを実行すると、メッセージボックスに「東京都」と表示されます。
Dim zipCode As String
zipCode = "123-4567"
MsgBox Left(zipCode, 3) ' 結果:123
Dim empCode As String
empCode = "A12345"
MsgBox Left(empCode, 1) ' 結果:A
指定した文字数が元の文字列の長さを超えていても、エラーにはなりません。Left関数はその場合、元の文字列すべてを返します。
MsgBox Left("東京", 10) ' 結果:東京
つまり、安全に使える関数であるとも言えます。
Left関数単体でも便利ですが、Len
や Instr
関数と組み合わせることで、さらに柔軟な処理が可能になります。
Dim phone As String
Dim pos As Integer
phone = "03-1234-5678"
pos = InStr(phone, "-") - 1
MsgBox Left(phone, pos) ' 結果:03
このように、文字列中の「-」がある場所を InStr
で調べて、その位置までを Left
で抜き出します。
VBAでは、全角文字と半角文字が混在することがありますが、Left関数では「1文字=1カウント」で扱われるため、全角も半角も同じく1文字として数えられます。
MsgBox Len("A") ' 結果:1(全角でも1文字)
MsgBox Left("ABC", 2) ' 結果:AB
このため、マルチバイト文字を扱う場合でも特に特殊な処理をしなくてもよいのが特徴です。
VBAには LeftB
という関数もあります。これはバイト単位で文字列を切り出すもので、日本語環境では基本的には使用しないことが推奨されます。理由は、日本語の全角文字が2バイトで構成されており、1バイト単位で切り出すと文字化けする可能性があるためです。
例えば、システムから取得したデータが「先頭4桁が商品コード、それ以降が商品名」というルールになっている場合:
Dim rawData As String
Dim productCode As String
Dim productName As String
rawData = "A123洗剤セット"
productCode = Left(rawData, 4)
productName = Mid(rawData, 5)
MsgBox "コード: " & productCode & vbCrLf & "商品名: " & productName
これにより、商品コードと商品名を分離できます。
Left関数はVBAの文字列操作において基礎中の基礎ですが、使い方を工夫することで多くの実務処理をシンプルにできます。特に、データの前処理や正規化、部分抽出などでは不可欠な関数です。
ポイントを振り返ると:
InStr
や Len
と組み合わせることでさらに便利。VBA初心者の方も、まずはLeft関数から文字列処理の第一歩を踏み出してみましょう。