Excel VBAの「Left関数」について解説します。
Left関数とは
Excel VBA の Left関数とは、対象文字列の左端(先頭)から数えて指定した数分の文字を返します。
※ 返される文字列は、バリアント型(内部処理形式 StringのVariant)の値です。
Left 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
Left(string, length)
引数
引数 | 説明 |
---|---|
string | 【必須】元となる文字列(式)を指定します |
length | 【必須】返す文字数を示す数値(式)を指定します |
戻り値
戻り値 | 説明 |
---|---|
文字列 | string の左端から、length 指定数の文字列が返ります |
※ length に string の文字数以上が指定された場合は、string が返されます。
戻り値は、全角半角問わずに length で指定した文字数が返ります。(1文字2バイト)
解説(使用例)
では、ここからは簡単なサンプルコードを作成して使用例を解説していきます。
Left 関数 サンプル
全角半角が混在している文字列に対し length 指定数による結果を確認してみます。
Sub Left_Sample01()
Dim str As String
'文字数「1」を指定した場合
str = Left("あaいiうu", 1)
Debug.Print (str) 'あ
'文字数「4」を指定した場合
str = Left("あaいiうu", 4)
Debug.Print (str) 'あaいi
'文字数指定が「0」の場合
str = Left("あaいiうu", 0)
Debug.Print (str) '""
'元の文字数より多い「10」を指定した場合
str = Left("あaいiうu", 10)
Debug.Print (str) 'あaいiうu
End Sub
実行結果のイミディエイトがこちらです。
文字数は、全角も半角も関係なくカウントされていることが確認できます。
3件目が「0」指定なので、空白になっています。
4件目は、元の文字数が「6」なのに対して length を「10」としているので、元の6文字がそのまま返っています。
Left関数は、全角半角ともに1文字2バイトで取得しています。
Left関数とLeftB関数の比較サンプル
次は、Left関数 と LeftB関数 を比較してみましょう。
Sub Left_Sample02()
Dim str As String
'文字数「4」を指定した場合
str = Left("あaいiうu", 4)
Debug.Print (str) 'あaいi
'LeftB関数で「4」(バイト)を指定した場合
str = LeftB("あaいiうu", 4)
Debug.Print (str) 'あa
End Sub
実行結果のイミディエイトがこちらです。
どちらも length を「4」として実行しています。
Left 関数は、4文字が返ってきていますが、LeftB 関数では、2文字が返されました。
LeftB 関数の length はバイト指定です。
「4」バイトを指定した場合、1文字2バイトなので返ってくる文字数は「2」となります。
length に「3」を指定した場合どうなるのでしょうか。
半角を1バイトとして取得するサンプル
半角文字を1バイトにするには StrConv 関数を使用します。
Sub Left_Sample03()
Dim str As String
'Left関数で「3」を指定した場合
str = Left("あaいiうu", 3)
Debug.Print (str) 'あaい
'LeftB関数で「3」(バイト)を指定した場合
str = LeftB("あaいiうu", 3)
Debug.Print (str) 'あ
'StrConv関数で半角を1バイトに変換してから取得して戻す
str = LeftB(StrConv("あaいiうu", vbFromUnicode), 3)
Debug.Print StrConv(str, vbUnicode) 'あa
End Sub
実行結果のイミディエイトがこちらです。
Left 関数で length に「3」を指定すると3文字が返ります。
LeftB 関数で length に「3」を指定すると1文字が返ります。これは、半角文字も2バイトなので2文字目が取得できていないということです。
3つ目のコードでは、StrConv 関数を使って
StrConv(“あaいiうu”, vbFromUnicode)
Unicode から Shift_JIS へ変換し「全角は2バイト」「半角は1バイト」として取得できるようにします。
指定バイト数を取得したあとに、再度 StrConv 関数で元に戻して文字を表示できるようにます。
結果、「あ」2バイト +「a」1バイト = 3バイト「あa」を表示できました。
セルから指定文字以前のデータを取得する
セルのデータを加工して、必要なデータを抜き出す作業は比較的よく行われていると思います。
次のサンプルコードは、A列の氏名データから苗字だけをB列に書き出します。姓名間には全角または半角のスペースがある設定です。
Sub Left_Sample_Cell()
Dim str As String, length As Long, i As Long
For i = 2 To 10
str = Cells(i, 1).Value
length = InStr(1, str, " ", vbTextCompare)
Cells(i, 2).Value = Left(str, length - 1)
Next
End Sub
実行結果のワークシート画像です。
A列の「氏名」データの特徴は次のとおりです。
・「氏」と「名」の間にスペースがあるが「全角」「半角」が混在
・「氏」の字数が1~3のように不特定
以上のことから、length は最初の「スペース」の位置のひとつ前とします。
「スペース」の位置は、InStr 関数の全角/半角を区別しないモード vbTextCompare を使って取得します。
実行結果は上の画像のとおりです。うまくいきました(^^)
おわりに
VBAの関数一覧はこちらです。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA「Left 関数」で対象文字列の左端(先頭)から指定文字数を取得方法について解説しました。
今回使用したサンプルでは「StrConv関数」と「InStr関数」を組み合わせて使い、引数の取得やデータの変換を行いました。関数は、単独で機能するだけでなく、他の関数やメソッドを組み合わせて使う場合が多いです。
例えば、最後のサンプルで「InStr関数」を使っていますが、「Findメソッド」を使うこともできます。
Excel VBAの関数を使いこなすには、関数の構文や特徴を正しく理解してうまく利用していくことが大事です。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;