更新日:、 作成日:
VBA Right 関数:文字列の最後から抽出する
はじめに
Excel VBA マクロの Right 関数から文字列の最後から抽出する方法を紹介します。
Right 関数は、文字列の最後から指定した文字数分の文字列を取得します。
123456 から 456 などを返します。
最後の数文字だけ切り出したいときに使用します。
文字列をバイトデータとして扱うには RightB 関数を使用します。
文字列の先頭から抽出するには「Left 関数」を使用します。
文字列の途中から抽出するには「Mid 関数」を使用します。
文字列を抽出するには「文字列を抽出する」をご覧ください。
Right 関数の引数と戻り値
Right(文字列, 文字数)
文字列の右から指定した文字数を抽出します。
引数「文字列」 | 抽出元の文字列を指定します。 |
引数「文字数」 | 抽出する文字数を指定します。 |
戻り値の型 | 文字列型 (String) |
解説
引数「文字数」が 0 なら、空文字 "" を返します。
引数「文字数」が 1 なら、最後から 1 文字を返します。
引数「文字数」が引数「文字列」を超えるときは、引数「文字列」をそのまま返します。
Unicode のサロゲートペア文字 𩸽 や 😃 は 2 文字として扱います。これを 1 文字として取得したいときは、関数を作成します。
文字列の文字数を取得するには「Len 関数」を使用します。
使用例
Right 関数の使用例を紹介します。
文字列の最後から抽出する
文字列の最後から抽出します。
Dim s As String
s = Right("123456", 0)
Debug.Print(s) ' ""
s = Right("123456", 3)
Debug.Print(s) ' 456
s = Right("123456", 10)
Debug.Print(s) ' 123456
文字列を抽出する
「Left 関数」や「Mid 関数」を使用して、先頭や途中から抽出できます。
Dim s As String
s = Left("123456", 3) ' 左から 3 文字
Debug.Print(s) ' 123
s = Mid("123456", 2, 3) ' 2 文字目から 3 文字
Debug.Print(s) ' 234
s = Right("123456", 3) ' 右から 3 文字
Debug.Print(s) ' 456
サロゲートペア文字を 1 文字として抽出する
サロゲートペア文字を 1 文字として取得するために、RightSurrogate 関数を作成して抽出しています。
サロゲートペア文字を判定する IsSurrogate 関数を使用しています。詳しくは「文字コードを変換や判定する」をご覧ください。
Sub 実行()
Dim s As String
s = "12" & WorksheetFunction.Unichar(171581) & "56" ' 12𩸽56
Range("A1").Value = Right(s, 3) ' ?56、サロゲートペア文字の 1 文字だけ抽出するので文字化け
Range("B1").Value = RightSurrogate(s, 3) ' 𩸽56
Range("A2").Value = Right(s, 4) ' 𩸽56
Range("B2").Value = RightSurrogate(s, 4) ' 2𩸽56
End Sub
' サロゲートペア文字を 1 文字として最後から文字を抽出します。
Function RightSurrogate(ByVal text As String, ByVal length As Long) As String
Dim count As Long ' サロゲートペアを 1 文字とした文字数
' 文字数を数える
Dim i As Long
For i = Len(text) To 1 Step -1
If IsSurrogate(Mid(text, WorksheetFunction.Max(i - 1, 1))) Then
' サロゲートペア文字
i = i - 1
End If
' 抽出文字数に達した
count = count + 1
If count >= length Then
RightSurrogate = Mid(text, i)
Exit Function
End If
Next
RightSurrogate = text
End Function
スポンサーリンク