サイトについて      連絡先   検索

VBA Right 関数

はじめに

Excel VBA マクロの Right 関数を紹介します。

Right 関数は、文字列の最後から指定した文字数分の文字列を返します。

最後の数文字だけ取得したいときに使用します。

  • 目次
    • 構文
    • 解説
    • 使用例

構文

Right(文字列, 文字数)
文字列の右から指定した文字数を抽出します。

引数「文字列」抽出元の文字列を指定します。
引数「文字数」抽出する文字数を指定します。
戻り値の型文字列型 (String)

解説

引数「文字数」が0なら、空文字""を返します。

引数「文字数」が1なら、最後から 1 文字を返します。

引数「文字数」が引数「文字列」を超える値のときは、引数「文字列」をそのまま返します。

Unicode のサロゲートペア文字は 2 文字として扱います。これを 1 文字として取得したいときは、関数を作成します。

文字列の文字数を取得するには「Len 関数」を使用します。

使用例


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

文字数を取得する。


Dim i As Integer

i = Len("123456") ' 文字数を取得
Debug.Print(i) ' 6

サロゲートペア文字を 1 文字として取得する。RightSurrogate 関数を作成して取得しています。

サロゲートペア文字を判定する IsSurrogate 関数を使用しています。詳しくは「Unicode 文字の入力や読み込み」をご覧ください。

Sub 実行()
    Dim s As String
    s = "12" & WorksheetFunction.Unichar(171581) & "56" ' 12𩸽56
    
    Range("A1").Value = Right(s, 4)          ' 𩸽56
    Range("B1").Value = RightSurrogate(s, 4) ' 2𩸽56

    Range("A2").Value = Right(s, 3)          ' ?56
    Range("B2").Value = RightSurrogate(s, 3) ' 𩸽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
  • 目次
    • 構文
    • 解説
    • 使用例