この記事では、VBA の Left 関数と LeftB 関数の使い方について説明します。
【VBA】Left関数
VBA の Left は文字列の左から、指定した数だけ文字を取り出す関数です。
Left(文字列,取り出す文字の長さ)
Left関数を使って、文字列 “ABCDEFGH” の左から 3 文字を抜き出してみます。
'[VBA] Left関数のサンプルコード Sub LeftSample() Dim myword As String myword = "ABCDEFGH" 'Left関数で左から3文字を抜き出す Debug.Print Left(myword, 3) End Sub 'LeftSampleの実行結果: 'ABC
実用上は、抜き出す位置は「何番目から」よりも「特定の文字から」を指定できるほうが使い勝手がよさそうです。そこで「引数で指定した文字列を含めて左側を抜き出す関数」を作ってみました。よければ、自由にコピーしてお持ち帰りください。
'[VBA] 指定した文字列を含めて左側を抜き出す関数 Function LEFT_ST(mystr As String, mykey As String) As Variant Dim a As Integer, b As Integer, c As Integer If InStr(mystr, mykey) <> 0 Then a = InStr(mystr, mykey) b = Len(mykey) LEFT_ST = Left(mystr, a + b - 1) Else LEFT_ST = CVErr(xlErrNA) End If End Function
LEFT_ST 関数を使うときは
=LEFT_ST(対象文字列, 区切り位置)
と記述します。たとえばセル A1 に「京都府福知山市東九条東桃ノ本町 24」というデータが入っている場合、別のセルに
=LEFT_ST(A1, "市")
と入力すると「市」という文字を含めて「京都府福知山市」という文字列を返してきます。指定した文字列を含めたくない場合も、上のコードをちょっといじるだけでできると思うので、色々試してみてください。
対話形式で学ぶLeft関数
[シーン:あとりえこばと出版社のオフィス。こばとと涼音がデスクに向かって座っています。]
こばと:おはようございます、涼音さん!
涼音:おはようございます、こばとさん。実は VBA の Left 関数について少しわからなくて … どんな使い方があるのか教えてもらえますか?
こばと:VBA の Left 関数は、文字列の左側から指定した文字数だけ取り出すんですよ。
涼音:それってどんな場面で使うんですか?
こばと:例えば、ある人の名前が「ジェシカ・サンダーソン」っていう長い名前だったとしますよね。でも、その名前を使って何か処理をする時には、人によっては省略して扱いたいこともあるんですよ。
涼音:なるほど、例えば「ジェシカ」とだけ使いたい場合とかですね。
こばと: まったくその通りです!Left関数を使えば、簡単に実現できますよ。例えば、次のようなコードですよ。
Sub LeftFunctionExample() Dim fullName As String Dim firstName As String fullName = "ジェシカ・サンダーソン" firstName = Left(fullName, 3) MsgBox "取り出した結果: " & firstName End Sub
涼音:これで、「ジェシカ・サンダーソン」の左から 3 文字を取り出して、「ジェシカ」という結果が得られるんですね!
こばと: そうです。あとは取り出した結果を別の変数に代入して、使いやすくすることができます。
涼音: じゃあ、こんどは「こばと」さんで試してみましょう。Left で左から 3 文字取り出すと …
こばと: そのまんま、「こばと」でしょ!
【VBA】LeftB関数
VBA の LeftB は文字列の左から、指定バイト数だけ文字を取り出します。
LeftB(文字列,取り出す文字の長さ)
VBA では文字コードに UTF-8 を使っているので、1 文字は 2 バイトです。LeftB関数を使って、”ABCDEFGH” の左から 8 バイト (4 文字) を抜き出してみます。
'[VBA] LeftB関数のサンプルコード Sub LeftBSample() Dim myword As String myword = "ABCDEFGH" 'LeftB関数で左から4バイト(8文字)を抜き出す Debug.Print LeftB(myword, 8) End Sub 'LeftBSampleの実行結果: 'ABCD
【VBA】Left2関数
抽出数を文字数とバイト数にするかは引数で指定するようにしたほうが便利かもしれません。というわけで、Left 関数とLeftB 関数を1つにまとめた Left2 関数を作っておきました。
'[VBA] Left2関数 Function Left2(str As String, n As Integer, _ Optional b As Boolean = False) If b = False Then Left2 = Left(str, n) Else Left2 = LeftB(str, n) End If End Function
デフォルトでは指定文字数を抽出するようになっています。オプション引数 b に True (もしくは False 以外の何か) を指定するとバイト数だけ取り出します。
'[VBA] Left2関数のサンプルコード Sub Left2Sample() Dim myword As String myword = "ABCDEFGH" Debug.Print Left2(myword, 4) Debug.Print Left2(myword, 4, True) End Sub 'Left2Sampleの実行結果: 'AB
コメント