関数・メソッド

文字列の右端から一部を取得する【Right関数】【RightB関数】【ExcelVBA】

構文

Right(String, LengthAs Long) As Variant

RightB(String, LengthAs Long) As Variant

String・・・任意の「文字列」・「値」を指定します。
Length・・・右側から取得する文字数を指定します。(Right関数の場合)
      右側から取得するバイト数を指定します。(RightB関数の場合)
戻り値 ・・・Variant
変数や文字列の右側から指定数文字を抜き出しします。

RightB関数はバイト数単位の抜出だが、注意が必要

ワークシート関数のRightB関数(Shift-JIS形式)
→半角文字を1Byte、全角文字を2Byteとして取得。
VBA関数のRightB関数(DBCS形式)
→半角文字を2Byte、全角文字を2Byteとして取得。

Right関数、RightB関数のサンプルコード

Public Sub test_Right_RightB()
    
    Dim lng As Long
    
    '■数値は正常に表示可能
    lng = 12345
    MsgBox Right(lng, 3)     '345  正常表示だがバイト数を加味していない
    MsgBox StrConv(RightB(StrConv(lng, vbFromUnicode), 3), vbUnicode)    '345  正常表示(バイト数も加味)
    
    Dim str As String
        
    '■文字列は偶数なら問題なし
    str = "あいうえお"
    MsgBox Right(str, 4)     'いうえお 正常表示だがバイト数を加味していない
    MsgBox StrConv(RightB(StrConv(str, vbFromUnicode), 4), vbUnicode)    'えお 正常表示(バイト数も加味)
    
    '■文字列は奇数なら文字化けしてしまうケースがある(仕様通り)
    str = "あいうえお"
    MsgBox StrConv(RightB(StrConv(str, vbFromUnicode), 3), vbUnicode)    '・お 3バイト目が全角文字なので文字化けしてしまう
    str = "あうえ12お"
    MsgBox StrConv(RightB(StrConv(str, vbFromUnicode), 3), vbUnicode)    '2お 正常表示(バイト数も加味)

    '■rightB関数のみだと正常表示できない
    lng = 12345
    MsgBox RightB(lng, 3)    '?(文字化け)  →3バイト目だと「345」と表示されないといけない
    str = "あうえ12お"
    MsgBox RightB(str, 6)    '12お →6バイト目だと「え12お」と表示されないといけない

End Sub

注意点

  • バイト数で取得する(RightB関数)場合、且つ全角文字がある場合は注意が必要です。
    ■RightB関数の注意点
    DBSC→Shift-JISに変換しないと使用できない
    Shift-JISに変換しても全角文字が含まれる、且つ文字数が奇数の場合は注意必要
    ※例
    「あいう」は全角文字3→6Byte、右から3Byte目まで取得しようとすると
    2文字目の「い」の半分までしか対象にできず、実行結果が文字化けしています。

関連記事

文字列の前後を空白埋めで 桁数を揃える(Space関数/Right関数)
0埋めして桁数を揃える(Format関数/Right関数)
「フルパスから、パス、ファイル名、拡張子を分ける処理」をパーツ化する【ExcelVBA】

コメント

タイトルとURLをコピーしました