VBAのRight関数とは?基本的な構文や使い方を解説
ある文字列の中から、一部の文字を取り出して使いたいことはありませんか。そんな時には、Mid関数、Left関数、Right関数等を利用すると、特定の文字列を取り出すことができます。ここでは、「文字列の末尾から指定した数の文字を取り出したい」場合に利用する、Right関数について説明します。
目次
1.Right関数について
1-1.Right関数とは
Right関数とは、VBAの文字列操作の1つです。Right関数は、文字列の末尾から、指定した数の文字列を取り出して返します。
取り出したい文字列が、末尾から数えて何文字なのか、文字数が決まっているときには便利ですが、取り出したい文字数が一定でない場合は、2-4.ほかの関数と組み合わせた使用例 をご参照ください。
1-2.Right関数の構文
Right(文字列, 文字数)
文字列・文字数ともに、省略不可能です。
2.Right関数の使用例
2-1.基本的な使用例
Right("あいうえabc",3)
実行結果: abc
解説:「あいうえabc」の末尾から3文字の文字を返します。
Right("あいうえabc",4)
実行結果:えabc
解説:「あいうえabc」の末尾から4文字の文字を返します。
※Right関数では、全角・半角の区別をつけずに、1文字としてカウントします。
2-2.特殊な書き方をした場合の実行結果
Right("あいうえabc",0)
実行結果: (空文字)
解説:文字数に0を指定した場合、空文字を返します。
Right("あいうえabc",10)
実行結果:あいうえabc
解説:文字数に、文字列全体の長さより大きな数字を指定した場合、全文字列を返します。
2-3.ほかの関数と組み合わせた使用例
取り出したい文字列数が一定でない場合は、InStr関数を利用して、キーとなる文字の開始位置を取得します。
「Test.xlsx」や、「Test.pdf」という文字列の拡張子を抜き出したい場合を例に説明します。まず、これらの文字列は、それぞれ何文字なのか、文字数を数えます。
Len("Test.xlsx") Len("Test.pdf")
実行結果:9
8
次に、「.」の文字が先頭から何文字目にあるかをカウントします。
InStr(1, "Test.xlsx",".") InStr(1, "Test.pdf",".")
実行結果:5
5
ここで、拡張子、つまり「.」より後ろの文字列(6文字目以降)を取り出すには、「Test.xlsx」は6~9文字目の4文字、「Test.pdf」は6~8文字目の3文字を末尾から取り出せば良いということがわかります。
Right("Test.xlsx", 4) Right("Test.pdf", 3)
実行結果:xlsx
pdf
文字数は、それぞれ文字列全体の長さから「.」の位置を引いたもので指定できるので、これらの関数を組み合わせると
Right("Test.xlsx", Len("Test.xlsx")- InStr(1, "Test.xlsx",".")) = xlsx Right("Test.pdf", Len("Test.pdf")- InStr(1, "Test.pdf",".")) = pdf
実行結果:xlsx
pdf
となります。
※補足1:上記を、Right関数ではなく、Mid関数を用いて行うと
Mid("Test.xlsx", InStr(1, "Test.xlsx",".")+1) = xlsx Mid("Test.pdf", InStr(1, "Test.pdf",".")+1) = pdf
実行結果:xlsx
pdf
となります。
※補足2:「T.e.s.t.xlsx」のように、目的の位置以外にも「.」が含まれる場合、InStr関数を使用して「.」の位置を検索すると2文字目が取り出されてしまいます。そんな場合は、末尾から「.」の位置を検索するInStrRev関数を使用しますが、ここでは省略します。
3.RightB関数について
文字列をバイトデータとして扱いたい場合は、RightB関数を使用します。RightB関数は文字列内の指定位置から指定したバイト数分の文字列を返します。構文はRight関数と同じです。
ただし、VBAでは全角も半角も1文字を2バイトとしてカウントするため、文字数の指定には注意が必要です。
RightB("あいうえabc",2)
実行結果: c
解説:「あいうえabc」の末尾から2バイト(1文字)を返します。
RightB("あいうえabc",3)
実行結果: ?
解説:「あいうえabc」の末尾から3バイトはカウントできず、実行結果が?となります。
4.さいごに
以上、Right関数について、基本的な構文と使用例をまとめました。
Right関数とRightB関数に関しては、用途を明確にした上で、使い分けてください。
コメント