スプレッドシートで顧客コードやファイル名を扱っていると、「全角半角まじりの文字列から末尾の◯バイトだけ取り出したい」という場面、ありませんか。基幹システムの出力ファイルで、末尾に決まったバイト数のステータスコードがくっついている、なんてケースもよくありますよね。
RIGHT関数だと「文字数」で切るので、全角が混ざると末尾の狙った位置からズレてしまうんですよね。そんなときに頼れるのが、スプレッドシートのRIGHTB関数です。全角2バイト・半角1バイトでカウントしながら、右から必要なバイト数ぶんだけ取り出せますよ。
この記事では、スプレッドシートのRIGHTB関数の構文から、RIGHT関数との違い、固定長ファイルの末尾フィールド抽出や拡張子判定など実務パターンまで紹介します。LENBと組み合わせた「末尾整形」のテンプレートも置いておきますね。
スプレッドシートのRIGHTB関数とは?
スプレッドシートのRIGHTB関数は、文字列の末尾から指定したバイト数ぶんの文字を取り出す文字列関数です。読み方は「ライト・ビー」で、RIGHT(右)と Byte(バイト)を組み合わせた名前ですよ。
全角文字は2バイト、半角文字は1バイトとしてカウントします。日本語と英数字が入り混じるファイル名や伝票データの末尾部分を、バイト単位で正確に抽出したいときに便利ですよ。
関数の基本構文と引数
基本構文はシンプルで、引数は2つだけです。
=RIGHTB(文字列, [バイト数])
引数の意味を整理しておきましょう。
| 引数 | 意味 | 省略時の挙動 |
|---|---|---|
| 文字列 | 対象となるテキスト | 省略不可 |
| バイト数 | 取り出すバイト数(0以上の整数) | 省略時は1(末尾1バイト) |
バイト数に小数を指定した場合は、整数部分に切り捨てられます。負の数を入れると #VALUE! エラーになるので、気をつけてくださいね。
RIGHT関数との違い(文字数 vs バイト数)
RIGHT関数とRIGHTB関数は、切り出す単位が違います。ここを押さえておくと、使い分けで迷いません。
- RIGHT: 末尾から「文字数」ぶんを取り出す。全角・半角を区別しない
- RIGHTB: 末尾から「バイト数」ぶんを取り出す。全角=2バイト、半角=1バイトで計算
たとえば「伝票A-100」という文字列で、右から4つ取り出したい場合はこうなります。
| 数式 | 結果 | 解説 |
|---|---|---|
=RIGHT("伝票A-100", 4) | A-100 の右4文字(-100) | 末尾から4文字(全角半角を問わず) |
=RIGHTB("伝票A-100", 4) | -100 | 末尾から4バイト(半角4文字=4バイト) |
「末尾4バイトがステータスコード」のような固定長仕様のときは、RIGHTBの出番ですよ。
RIGHTB関数の基本的な使い方
それでは実際に使ってみましょう。末尾からバイト数でカウントする感覚を掴むと、結果がイメージしやすくなります。
全角・半角が混在する文字列での挙動
代表的なパターンをいくつか並べてみますね。
| 数式 | 結果 | バイトの内訳 |
|---|---|---|
=RIGHTB("あいうえお", 4) | えお | 末尾の全角2文字=4バイト |
=RIGHTB("ABCDE", 3) | CDE | 末尾の半角3文字=3バイト |
=RIGHTB("関数Excel", 6) | Excel(+1バイト) | 末尾の半角5+1バイト=6バイト |
=RIGHTB("商品コード", 5) | コード | 末尾の全角2文字=4バイト(5バイト目は全角の途中になるため切り捨て) |
注目してほしいのは最後の行です。バイト数が全角文字の途中で切れる場合、スプレッドシートではそのバイトは切り捨てられます。文字の後ろ半分だけが残って文字化けする、といった心配は不要ですよ。
引数「バイト数」の省略時の挙動
バイト数を省略すると、末尾の1バイトだけ取り出されます。
=RIGHTB("あいうえお") → (空文字または末尾1バイト分の扱い)
=RIGHTB("ABCDE") → E
全角終わりの文字列でバイト数を省略すると、1バイトだけだと全角文字の半分にあたるため、結果は空になります。省略は半角終わりのときしか実用的ではないので、基本は明示的に指定するのがおすすめですよ。
実務で使えるRIGHTB関数の活用パターン
RIGHTB関数が本領を発揮するのは、末尾に固定バイト数の情報がくっついているデータを扱う場面です。よく出てくる3パターンを紹介しますね。
固定長ファイルの末尾フィールド切り出し
基幹システムからダウンロードしたテキストで、「末尾8バイトが受付番号」「末尾4バイトがステータスコード」のような末尾固定長レイアウトはよくあります。RIGHTB関数なら、全角が混ざっていても末尾側からきっちりバイト単位で抜き出せますよ。
ステータスコード: =RIGHTB(A2, 4)
受付番号: =RIGHTB(A2, 8)
RIGHTだと全角が混ざったときに末尾の切り出し位置がズレますが、RIGHTBならレイアウト定義書どおりの位置から取れます。
ファイル名からの拡張子抽出(バイト単位)
ファイルパスリストを整理していて、「末尾4バイト(.xlsx など)を取り出したい」というケースにも使えます。半角ピリオド+半角3〜4文字の拡張子はバイト数でも文字数でも同じ結果ですが、日本語ファイル名が混ざるリストでは、RIGHTBのほうが安全ですよ。
=RIGHTB(A2, 5)
A列に「月次報告書.xlsx」のようなファイル名があれば、.xlsx がきれいに取り出せます。.docx や .pdf など長さが違う拡張子が混在するなら、後述の FIND を併用するパターンがおすすめですよ。
末尾チェックサムや区分コードの抽出
伝票番号や会員コードの末尾1〜2バイトにチェックデジットや区分コードが埋め込まれているフォーマットは、業務系システムでよくあります。末尾だけ分離して別列で管理したいときにRIGHTBが効きますよ。
末尾1バイト: =RIGHTB(A2, 1)
末尾2バイト: =RIGHTB(A2, 2)
本体部分: =LEFTB(A2, LENB(A2)-1)
LENB(文字列全体のバイト数を返す関数)と組み合わせると、末尾のコードと本体部分を一度に分離できます。マスター突合の前処理として使うと、照合作業の時短になりますよ。
RIGHTBとLENBを組み合わせた末尾整形
末尾のコード部分だけ抜き出したいだけでなく、「本体部分も同時に取りたい」「末尾固定桁ぶんを除外したい」というシーンも多いです。RIGHTBとLENBを組み合わせると、分離と整形を同時にこなせますよ。
本体と末尾コードを分離するテンプレート
A列に文字列、B列に末尾コードのバイト数(たとえば2)を入れている想定です。C列に本体、D列に末尾コードを出しましょう。
本体: =LEFTB(A2, LENB(A2)-B2)
末尾: =RIGHTB(A2, B2)
LENB から B2 を引いた数字が、本体側のバイト数になります。これでコード体系が変わっても、B列の数字を変えるだけで対応できますよ。
末尾固定桁の除外テンプレート
末尾に年度コード(4バイト)や区分(2バイト)が常にくっついているデータから、本体だけ取り出したいケースはこうなります。
=LEFTB(A2, LENB(A2)-4)
末尾4バイトぶんを取り除いた本体部分が返ります。RIGHTBの逆算として使うパターンですが、データクレンジングの現場では頻出ですよ。
コピペで使えるセット数式
よく使う組み合わせを一式テンプレートにしておきますね。A2にデータ、B2に末尾バイト数という前提です。
全体バイト数: =LENB(A2)
本体バイト数: =LENB(A2)-B2
本体部分: =LEFTB(A2, LENB(A2)-B2)
末尾コード: =RIGHTB(A2, B2)
末尾除外済み: =LEFTB(A2, LENB(A2)-B2)
データ整形用のワークシートに丸ごと貼り付けて、A列と末尾バイト数を差し替えるだけで使えます。列挿入で必要な情報が一度に揃うので、前処理の時短につながりますよ。
LEFT系・RIGHT系関数との使い分け
スプレッドシートには似た名前の文字列関数がいくつもあります。ここで全体像を整理しておきましょう。
LEFT・LEFTB・RIGHT・RIGHTB・MID・MIDBの比較
| 関数 | 切り出し位置 | 単位 | 典型用途 |
|---|---|---|---|
| LEFT | 左から | 文字数 | 商品コードの頭3桁抽出 |
| LEFTB | 左から | バイト数 | 基幹システム用の項目整形 |
| RIGHT | 右から | 文字数 | ファイル拡張子の抽出 |
| RIGHTB | 右から | バイト数 | 末尾の固定長フィールド切り出し |
| MID | 任意位置から | 文字数 | 郵便番号の後半3桁抽出 |
| MIDB | 任意位置から | バイト数 | 固定長ファイルの中間フィールド |
左からの切り出しを扱いたいときは、スプレッドシートのLEFTB関数の使い方もあわせて参考にしてみてくださいね。
バイト系関数を使うべき判断ポイント
バイト系関数(LEFTB/RIGHTB/MIDB/LENB)を選ぶ基準は、次の3点で判断できます。
- 出力元のシステムがバイト単位で桁数を指定している
- 全角半角が混在するデータを扱っている
- 固定長フォーマットのファイルを読み書きする必要がある
逆に、社内の集計シートやダッシュボードのように「文字数で区切れれば十分」という場面は、RIGHT系のほうがシンプルで読みやすいですよ。
よくあるエラーと対処法
RIGHTB関数でハマりやすいポイントを3つまとめました。エラーの原因と対策をセットで覚えておくと、現場で詰まりにくくなりますよ。
“#VALUE!” エラー
バイト数に負の数を指定したときに出ます。たとえば =RIGHTB("ABCDE", -1) のようなケースですね。LENB(A2)-B2 のような計算式の結果がマイナスになっていた、というミスがよくあります。MAX関数で下限を 0 に固定するのがおすすめです。
=RIGHTB(A2, MAX(B2, 0))
これで、B2がマイナスになっても安全に 0 として扱えますよ。
想定より短い結果が返る
「10バイトのつもりで指定したのに9文字しか返ってこない」というときは、全角の途中で切れているケースが多いです。先ほど解説したとおり、全角の途中にバイト境界が来ると、そのバイトぶんは切り捨てられます。
末尾側でも全角の前半バイトで境界が来ると1バイトぶん失われるので、LENB(対象文字列の総バイト数を返す関数)と組み合わせて、切り捨てが発生していないかを確認しておきましょう。
=LENB(RIGHTB(A2, 10)) → 9 なら、10バイト目が全角の途中だった
結果が空になる
=RIGHTB("あいうえお", 1) のように、末尾が全角で1バイトだけ指定すると、結果が空(空文字)になります。「数式は合っているのに何も返ってこない」ときは、バイト数が全角1文字分(2バイト)に満たないかを確認してみてくださいね。
最低でも 2 以上を指定するか、=IF(LENB(A2)>=2, RIGHTB(A2, 2), A2) のようにIFで判定すると安心です。
まとめ
スプレッドシートのRIGHTB関数は、バイト数を基準に文字列の末尾を取り出せる、固定長データや末尾コード抽出にピッタリの関数です。最後に要点を整理しておきましょう。
- 構文は
=RIGHTB(文字列, [バイト数])の2引数。バイト数省略時は1バイト - 全角=2バイト、半角=1バイトとしてカウントする
- 全角文字の途中でバイトが切れる場合、そのバイトは切り捨てられる
- RIGHTは文字数、RIGHTBはバイト数。末尾固定長フィールドの切り出しはRIGHTB一択
- LENBと組み合わせると、本体と末尾コードの分離が一発で決まる
- #VALUE! は負のバイト数指定、結果が空になるのは全角終わりでバイト数が足りないパターン
まずは手元の伝票データやファイル名リストを、=RIGHTB(A2, 4) のような形で末尾から抽出してみてください。マスター突合やデータクレンジングの前処理が一段ラクになりますよ。
