【ExcelVBA】Right関数の使い方とは?実務で使うテクニックも解説

仕事効率化
スポンサーリンク

こんにちは、VBAエンジニアのやすこれです。

みなさんは、VBAでRight関数を使ったことがありますか?

  • VBAで任意の文字列の内、右から指定した文字数分だけ取り出したい
  • Right関数の使いどころがわからない
  • Right関数の利用の仕方を実例付きで知りたい!
という方もいるのではないでしょうか。

そこで今回は、任意の文字列の内、右から指定した文字数分だけを取り出せるRight関数の使い方と実務での応用方法をサンプルコード付きで紹介します。

スポンサーリンク

VBAでのRight関数の使い方

Right関数の基本的な使い方

Right関数は、任意の文字列の右側から文字数を指定して一部を取り出す関数です。
  1. 基本構文
Right(文字列, 長さ)
  • 「長さ」が0の場合は、「””」(空白)を返す
  • 「長さ」が指定した文字列の文字数以上の場合は、文字列全てを返す
  1. コード例
Right("ABCDE", 3)
文字列「ABCDE」の右から長さ「3」の文字列「CDE」を返します。
01_VBARight関数返り値

RightB関数について

RightB関数は任意の文字列の右側からバイト数を指定して一部を取り出す関数です。引数の指定方法はRight関数と同じです。
  1. 基本構文
RightB(文字列, 長さ)
  • 「長さ」が0の場合は、「””」(空白)を返す
  • 「長さ」が指定した文字列のバイト数以上の場合は、文字列全てを返す



  1. コード例
RightB("ABCDE", 6)
文字列「ABCDE」の左から長さ「6」バイトの文字列「CDE」を返します。
02_VBARightB関数返り値
  • 2バイトで1文字
  • 1文字に満たないバイト数「1」を「長さ」に指定した場合は、「””」(空白)を返す

Right関数の引数について

第二引数「長さ」を「0」にした場合

Right関数は、「長さ」が「0」の場合、「””」(空白)を返します。
  1. コード例
Right("ABCDE", 0)
文字列「ABCDE」の右から、長さ「0」の文字列を取得するので、「””」(空白)を返します。
03_VBARight関数長さ0の返り値

第二引数「長さ」が文字数以上の場合

Right関数は、「文字列」の文字数より第二引数「長さ」が大きい場合、「文字列」全てを返します。
  1. コード例
Right("ABCDE", 6)
「長さ」が文字列「ABCDE」の文字数「5」より大きいので、文字列全体の「”ABCDE”」を返します。
04_VBARight関数長さが文字数より大きい返り値

Right関数の実務での利用方法

住所から市区町村以下を取得

'市区町村以下を取り出す元となる住所を定義
Dim trgtAddress As String
trgtAddress = "東京都〇〇区××"

'都道府県は「神奈川県」「和歌山県」「鹿児島県」のみ4文字でそれ以外は3文字
Dim endNum As Long
If InStr(trgtAddress, "県") = 4 Then
    endNum = 4
Else
    endNum = 3
End If

'市区町村以下を取得
Dim trgtCity As String
trgtCity = Right(trgtAddress, Len(trgtAddress) - endNum)
まず都道府県は「神奈川県」「和歌山県」「鹿児島県」以外はすべて3文字です。

つまり、3つの県に該当している、4文字目が「県」(「InStr(〇〇, “県”) = 4」)の場合は左端から4文字を取得して、3つの県に該当しなければ、左端から3文字を取得すれば都道府県を取り出すことができます。

これを利用して、下記の部分で判定を行い、都道府県が対象の住所から何文字目までかを「endNum」に定義しています。
'都道府県は「神奈川県」「和歌山県」「鹿児島県」のみ4文字でそれ以外は3文字
Dim endNum As Long
If InStr(trgtAddress, "県") = 4 Then
    endNum = 4
Else
    endNum = 3
End If
あとは「Right関数」を使って、対象の住所「trgtAddress」の内、右から都道府県の次の文字位置までを取得すれば、住所から市区町村以下を取り出すことができます。

この時、右からの文字数を取得するために文字列全体の文字数を取得する「Len関数」を使用しています。文字列全体の文字数から都道府県の終端「endNum」を引いたものが求めたい文字数となるので、次の処理で目的の文字列を取得できます。
'市区町村以下を取得
Dim trgtCity As String
trgtCity = Right(trgtAddress, Len(trgtAddress) - endNum)
05_VBARight関数市区町村以下取得イメージ
  • Len(文字列)
  • 対象「文字列」の文字数を数値で返す
  • ex)Len(“ABCDE”) → 5
  • InStr(文字列1, 文字列2)
  • 対象「文字列1」の内、「文字列2」が始まる位置を返す
  • ex)InStr(“ABC”, “B”) → 2
InStr関数については、下記でも詳しく解説しているので、読んでみてください。

キーワードより右側の文字列を取得

'キーワード右側を取り出す元となる文字列を定義
Dim trgtDepartment As String
trgtDepartment = "営業部営業第一課"

'キーワードを定義
Dim keyword As String
keyword = "部"

'キーワード位置を取得
Dim endNum As Long
endNum = InStr(trgtDepartment, keyword)

'キーワードから右側を取得
Dim trgtSection As String
trgtSection = Right(trgtDepartment, Len(trgtDepartment) - endNum)
まず、元となる文字列やキーワードを次の部分で定義します。
'キーワード右側を取り出す元となる文字列を定義
Dim trgtDepartment As String
trgtDepartment = "営業部営業第一課"

'キーワードを定義
Dim keyword As String
keyword = "部"
つづいて、次の部分で、キーワード位置を取得します。
'キーワード位置を取得
Dim endNum As Long
endNum = InStr(trgtDepartment, keyword)
  • InStr(文字列1, 文字列2)
  • 対象「文字列1」の内、「文字列2」が始まる位置を返す
  • ex)InStr(“ABC”, “B”) → 2
最後に「Right関数」を使って、対象の文字列「trgtDepartment」の内、右からキーワードの次の文字位置までを取得すれば、キーワードより右側の文字列を取り出すことができます。

この時、右からの文字数を取得するために文字列全体の文字数を取得する「Len関数」を使用しています。文字列全体の文字数からキーワードの終端「endNum」を引いたものが求めたい文字数となるので、次の処理で目的の文字列を取得できます。
'キーワードから右側を取得
Dim trgtSection As String
trgtSection = Right(trgtDepartment, Len(trgtDepartment) - endNum)
06_VBARight関数キーワード右側取得イメージ
  • Len(文字列)
  • 対象「文字列」の文字数を数値で返す
  • ex)Len(“ABCDE”) → 5
Len関数については、下記でも詳しく解説しているので、読んでみてください。

名字と名前を分ける

'フルネームを定義
Dim fullName As String
fullName = "田中 太郎"

'名字と名前を分ける位置を取得
Dim borderNum As Long
borderNum = InStr(fullName, " ")

'名字を取得
Dim lastName As String
lastName = Left(fullName, borderNum - 1)

'名前を取得
Dim fastName As String
fastName = Right(fullName, Len(fullName) - borderNum)
まず「InStr関数」を使って、名字と名前の間にある「スペース」の位置を取得して、「borderNum」に定義しています。
'名字と名前を分ける位置を取得
Dim borderNum As Long
borderNum = InStr(fullName, " ")
07_VBAInstr関数任意の文字列位置取得イメージ
  • InStr(文字列1, 文字列2)
  • 対象「文字列1」の内、「文字列2」が始まる位置を返す
  • ex)InStr(“ABC”, “B”) → 2
次に「Left関数」と先ほど定義した「borderNum」を使って「スペース」の手前までの文字列(名字)を取得しています。
'名字を取得
Dim lastName As String
lastName = Left(fullName, borderNum - 1)
08_VBALeft関数文字列取得イメージ
  • Left(文字列, 数値)
  • 対象「文字列」を「数値」で指定した文字数だけ左から取り出す
  • ex)Left(“ABCDE”, 3) → “ABC”
最後に「Right関数」を使って、「fullName」の内、右からスペースの次の文字位置までを取得すれば、フルネームから名前を取り出すことができます。

この時、右からの文字数を取得するために文字列全体の文字数を取得する「Len関数」を使用しています。文字列全体の文字数からスペースの位置「borderNum」を引いたものが求めたい文字数となるので、次の処理で目的の文字列を取得できます。
'名前を取得
Dim fastName As String
fastName = Right(fullName, Len(fullName) - borderNum)
09_VBARight関数名前取得イメージ
  • Len(文字列)
  • 対象「文字列」の文字数を数値で返す
  • ex)Len(“ABCDE”) → 5
InStr関数Left関数については、下記でも詳しく解説しているので、読んでみてください。

フルパスをディレクトリとファイル名に分ける

'フルパスを定義
Dim trgtPath As String
trgtPath = "C:\サンプル\SampleFile.xlsx"

'ファイル名を取得
Dim fileName As String
fileName = Right(trgtPath, Len(trgtPath) - InStrRev(trgtPath, ""))

'ディレクトリを取得
Dim dirStr As String
dirStr = Replace(trgtPath, fileName, "")
まず次の部分で、ディレクトリとファイル名に分けたいフルパス「trgtPath」から、ファイル名「fileName」を取り出します。
'フルパスを定義
Dim trgtPath As String
trgtPath = "C:\サンプル\SampleFile.xlsx"

'ファイル名を取得
Dim fileName As String
fileName = Right(trgtPath, Len(trgtPath) - InStrRev(trgtPath, ""))
画像のように「InStrRev(trgtPath, “\”)」の部分で末尾の「\」の位置、つまりディレクトリが終わる位置を取得しています。
10_VBARightディレクトリとファイル名分けるファイル名取得 さらに「Len関数」を使用して文字列全体の文字数を取得し、取得した文字数からディレクトリが終わる位置を引いたものを「Right関数」の長さに指定して、ファイル名を取得しています。
  • InStrRev(文字列1, 文字列2)
  • 対象「文字列1」の内、末尾から「文字列2」を検索し、その開始位置を返す
  • ex)InStrRev(“ABCABC”, “B”) → 5
次にフルパス「trgtPath」から取得したファイル名「fileName」を取り除いて、ディレクトリ「dirStr」を取得します。
'ディレクトリを取得
Dim dirStr As String
dirStr = Replace(trgtPath, fileName, "")
画像のように「Replace関数」を使って、フルパス「trgtPath」からファイル名「fileName」を「空の文字列」に置き換えることでディレクトリ「dirStr」を取得しています。
11_VBARightディレクトリとファイル名分けるディレクトリ取得
  • Replace(文字列1, 文字列2, 文字列3)
  • 対象「文字列1」から「文字列2」を検索し、「文字列3」に置き換える
  • ex)Replace(“ABCDE”, “DE”, “”) → “ABC”
以上で、フルパスをディレクトリとファイル名に分けることができました。

Replace関数については、下記でも詳しく解説しているので、読んでみてください。
また、ファイル名の取得は、Dir関数でも行うことができますので、あわせてご覧ください。

VBAでのRight関数まとめ

今回はVBAでのRight関数の使い方と実務での使用方法を紹介いたしました。
VBARight関数の実務での利用方法
  • 住所から市区町村以下を取得
  • キーワードより右側の文字列を取得
  • 名字と名前を分ける
  • フルパスをディレクトリとファイル名に分ける
第二引数「長さ」に「0」を指定すると「””」(空白)を返すこと、文字数より大きいと文字列全体を返すことについても覚えておきましょう。まずは実例通り使ってみると、理解が深まり応用が効くのでおすすめです。

ぜひ使ってみてください。