Right、RightB

Right関数とRightB関数は文字列の右端から指定した長さの文字列を取得します。

Right関数とRightB関数の違いは、Right関数は引数に取得する文字数を指定しますが、日本語圏の場合のRightB関数は文字数×2を指定する点です。

Shift-JISとしての全角を2バイト、半角を1バイトとして処理したい場合は「VBAでバイト単位でのLenとMidとLeftとRight」にShift-JISの感覚で使えるRight関数を紹介していますので参考にしてください。

日本語圏のRightB関数はそのままではほとんど使い物になりません。上で紹介しているような使い方に限定されます。


RightB関数はバイト単位という説明は間違い

よく、RightB関数はバイト数を指定する、という説明を目にするのですが、日本語圏での説明としては不十分です。

実際にはバイト数ではなく、引数には文字数×2を指定することになります。

これはRightB関数がShift-JIS換算のバイト数ではなく、2バイト言語ともいわれるDBCS言語のバイト数換算になっていることが原因です。

このことについては「VBAのByte単位用関数の問題点」に詳しく書いています。あなたがファイルや電文などをShift-JIS換算で判定しなければならないような場合は読んでみてください。


構文

String 取り出す元の文字列を指定します。
Length As Long Right関数の場合は文字数、RightB関数の場合は文字数×2を指定します。0未満を指定するとエラーになります。
戻り値 内部処理形式がStringのVariantの値を返します。

$ありと$なしの関数の両方を書いていますが通常は$なしで問題ありません。$ありなしの違いについては「VBA関数の$ドルマークの意味」を参照ください。


ワークシート関数のRightB関数との違い

ワークシート関数にもRightB関数がありますが、こちらは半角文字を1バイト、全角文字を2バイトとしてShift-JISコード体系の扱いになっています。

VBA関数のRightB関数のDBCSコード体系とは異なりますので注意が必要です。


サンプルコード

Right関数とRightB関数に偶数の4と奇数の3を指定した場合のサンプルです。RightB関数に奇数を指定すると正しく取得できないことが分かります。

実行結果

誤ったサイズ指定以降の行でRightB関数に対して3という数字を渡していますが、RightB関数では文字は2バイトとして扱うため3バイトと指定された場合は2文字目の半分までしか対象にならないため、実行結果が文字化けしています。