スプレッドシートで取引先コードや商品名を扱っていると、「全角半角まじりの文字列から先頭の◯バイトだけ取り出したい」という場面、ありませんか。基幹システムに流し込むCSVで、項目ごとのバイト数制限に引っかかって弾かれた経験がある人も多いと思います。
LEFT関数だと「文字数」で切るので、全角が混ざると想定バイト数を超えてしまうんですよね。そんなときにピッタリ使えるのが、スプレッドシートのLEFTB関数です。全角2バイト・半角1バイトでカウントしながら、左から必要なバイト数ぶんだけサクッと取り出せますよ。
この記事では、スプレッドシートのLEFTB関数の構文から、LEFT関数との違い、実務でよく使うシステム連携や文字数制限対応のパターンまで紹介します。LENBと組み合わせた「超過チェック」のテンプレートも置いておきますね。
スプレッドシートのLEFTB関数とは?
スプレッドシートのLEFTB関数は、文字列の先頭から指定したバイト数ぶんの文字を取り出す文字列関数です。読み方は「レフト・ビー」で、LEFT(左)と Byte(バイト)を組み合わせた名前ですよ。
全角文字は2バイト、半角文字は1バイトとしてカウントします。日本語と英数字が入り混じる商品名や住所などを、バイト単位で制限のあるシステムに合わせて整えたいときに便利ですよ。
関数の基本構文と引数
基本構文はシンプルで、引数は2つだけです。
=LEFTB(文字列, [バイト数])
引数の意味を整理しておきましょう。
| 引数 | 意味 | 省略時の挙動 |
|---|---|---|
| 文字列 | 対象となるテキスト | 省略不可 |
| バイト数 | 取り出すバイト数(0以上の整数) | 省略時は1(先頭1バイト) |
バイト数に小数を指定した場合は、整数部分に切り捨てられます。負の数を入れると #VALUE! エラーになるので、気をつけてくださいね。
LEFT関数との違い(文字数 vs バイト数)
LEFT関数とLEFTB関数は、切り出す単位が違います。ここを押さえておくと、使い分けで迷いません。
- LEFT: 先頭から「文字数」ぶんを取り出す。全角・半角を区別しない
- LEFTB: 先頭から「バイト数」ぶんを取り出す。全角=2バイト、半角=1バイトで計算
たとえば「商品A-100」という文字列で、左から4つ取り出したい場合はこうなります。
| 数式 | 結果 | 解説 |
|---|---|---|
=LEFT("商品A-100", 4) | 商品A- | 先頭から4文字(全角半角を問わず) |
=LEFTB("商品A-100", 4) | 商品A | 先頭から4バイト(全角2+全角2=4バイト) |
「システムの項目が10バイトまで」のような制約があるときは、LEFTBの出番ですよ。
LEFTB関数の基本的な使い方
それでは実際に使ってみましょう。バイト数のカウント方法を意識すると、結果がイメージしやすくなります。
全角・半角が混在する文字列での挙動
代表的なパターンをいくつか並べてみますね。
| 数式 | 結果 | バイトの内訳 |
|---|---|---|
=LEFTB("あいうえお", 4) | あい | 全角2文字=4バイト |
=LEFTB("ABCDE", 3) | ABC | 半角3文字=3バイト |
=LEFTB("Excel関数", 6) | Excel関 | 半角5+全角1=6バイト(※後述の注意点あり) |
=LEFTB("商品コード", 5) | 商品 | 全角2文字=4バイト(5バイト目は全角の途中になるため切り捨て) |
注目してほしいのは最後の行です。バイト数が全角文字の途中で切れる場合、スプレッドシートではそのバイトは切り捨てられます。文字が半分になって文字化けする、といった心配は不要ですよ。
引数「バイト数」の省略時の挙動
バイト数を省略すると、1バイトだけ取り出されます。
=LEFTB("あいうえお") → (空文字または先頭1バイト分の扱い)
=LEFTB("ABCDE") → A
全角始まりの文字列でバイト数を省略すると、1バイトだけだと全角文字の半分にあたるため、結果は空になります。省略は半角始まりのときしか実用的ではないので、基本は明示的に指定するのがおすすめですよ。
実務で使えるLEFTB関数の活用パターン
LEFTB関数が本領を発揮するのは、システム連携や文字数制限対応の場面です。よく出てくる3パターンを紹介しますね。
バイト数制限のあるシステム連携(基幹システム向けCSV)
会計システムや販売管理システムでは、「摘要欄は半角20バイトまで」「商品名は40バイトまで」といった制限があるのが定番です。こういうときにLEFTB関数で切り揃えておくと、取り込みエラーを防げます。
=LEFTB(A2, 40)
A列に商品名、40バイトが上限、という想定です。これだけで「全角20文字 or 半角40文字 or その混在」にすべて対応できるので、列挿入1本でCSV出力前の整形ができますよ。
固定長ファイルのフィールド切り出し
古い基幹システムからダウンロードしたテキストで、「先頭8バイトが顧客コード、次の20バイトが氏名…」のような固定長レイアウトを扱うこともありますよね。LEFTBとMIDB(任意位置からバイト単位で切り出す関数)を組み合わせると、きれいに分解できますよ。
顧客コード: =LEFTB(A2, 8)
氏名: =MIDB(A2, 9, 20)
LEFT/MIDだと全角が混ざったときにズレますが、LEFTB/MIDBならレイアウト定義書どおりにサクッと取り出せます。
全角混在文字列の頭出しプレビュー
Webサイトの記事タイトルや商品説明の先頭を、一覧画面用に短く表示したい場面でも使えます。画面の横幅に合わせてバイト数指定したいケースで便利ですよ。
=LEFTB(A2, 30) & IF(LENB(A2)>30, "…", "")
LENB(文字列全体のバイト数を返す関数)を組み合わせて、30バイトを超える場合だけ「…」を付ける工夫を入れています。30バイトは全角15文字相当なので、一覧表示にちょうどいい長さですよ。
LEFTBとLENBを組み合わせたバイト数チェック
バイト数制限のある項目を複数扱うときは、「その行がルールに違反していないか」を先にチェックしておくと安心です。LEFTBとLENBを組み合わせると、超過検出とトリミングを同時にこなせますよ。
文字列の超過検出テンプレート
A列に文字列、B列に上限バイト数を入れている想定です。C列に「OK/超過」を出しましょう。
=IF(LENB(A2) > B2, "超過", "OK")
さらに、超過していたらLEFTBでトリミング結果を出す、という流れまでやりたい場合はこちら。
=IF(LENB(A2) > B2, LEFTB(A2, B2), A2)
超過行だけ自動で切り揃えて、セーフな行はそのまま残します。件数が多いシートでも、目視チェックせずに一括整形できるので作業がぐっと楽になりますよ。
コピペで使えるセット数式
よく使う組み合わせを一式テンプレートにしておきますね。A2にデータ、B2に上限バイト数という前提です。
現在のバイト数: =LENB(A2)
上限超過チェック: =IF(LENB(A2)>B2, "超過 ("&LENB(A2)&"B)", "OK")
トリミング結果: =IF(LENB(A2)>B2, LEFTB(A2,B2), A2)
残バイト数: =B2 - LENB(A2)
データ整形用のワークシートに丸ごと貼り付けて、A列と上限値を差し替えるだけで使えます。列挿入で4列ぶんの情報が一度に揃うので、品質確認の時短につながりますよ。
LEFT系・RIGHT系関数との使い分け
スプレッドシートには似た名前の文字列関数がいくつもあります。ここで全体像を整理しておきましょう。
LEFT・LEFTB・RIGHT・RIGHTB・MID・MIDBの比較
| 関数 | 切り出し位置 | 単位 | 典型用途 |
|---|---|---|---|
| LEFT | 左から | 文字数 | 商品コードの頭3桁抽出 |
| LEFTB | 左から | バイト数 | 基幹システム用の項目整形 |
| RIGHT | 右から | 文字数 | ファイル拡張子の抽出 |
| RIGHTB | 右から | バイト数 | 末尾の固定長フィールド切り出し |
| MID | 任意位置から | 文字数 | 郵便番号の後半3桁抽出 |
| MIDB | 任意位置から | バイト数 | 固定長ファイルの中間フィールド |
ExcelのLEFTB関数との挙動比較をしたいときは、ExcelのLEFTB関数の使い方も参考になりますよ。
バイト系関数を使うべき判断ポイント
バイト系関数(LEFTB/RIGHTB/MIDB/LENB)を選ぶ基準は、次の3点で判断できます。
- 出力先のシステムがバイト単位で桁数を指定している
- 全角半角が混在するデータを扱っている
- 固定長フォーマットのファイルを読み書きする必要がある
逆に、社内の集計シートやダッシュボードのように「文字数で区切れれば十分」という場面は、LEFT系のほうがシンプルで読みやすいですよ。
よくあるエラーと対処法
LEFTB関数でハマりやすいポイントを3つまとめました。エラーの原因と対策をセットで覚えておくと、現場で詰まりにくくなりますよ。
“#VALUE!” エラー
バイト数に負の数を指定したときに出ます。たとえば =LEFTB("ABCDE", -1) のようなケースですね。COUNT の結果をそのまま使っていたらマイナスになっていた、というミスがよくあります。MAX関数で下限を 0 に固定するのがおすすめです。
=LEFTB(A2, MAX(B2, 0))
これで、B2がマイナスになっても安全に 0 として扱えますよ。
想定より短い結果が返る
「10バイトのつもりで指定したのに9文字しか返ってこない」というときは、全角の途中で切れているケースが多いです。先ほど解説したとおり、全角の途中にバイト境界が来ると、そのバイトぶんは切り捨てられます。
制限いっぱいまで詰めたい場合は、LENB(対象文字列の総バイト数を返す関数)と組み合わせて、切り捨てが発生していないかを確認しておきましょう。
=LENB(LEFTB(A2, 10)) → 9 なら、10バイト目が全角の途中だった
結果が空になる
=LEFTB("あいうえお", 1) のように、先頭が全角で1バイトだけ指定すると、結果が空(空文字)になります。「数式は合っているのに何も返ってこない」ときは、バイト数が全角1文字分(2バイト)に満たないかを確認してみてくださいね。
最低でも 2 以上を指定するか、=IF(LENB(A2)>=2, LEFTB(A2, 2), A2) のようにIFで判定すると安心です。
まとめ
スプレッドシートのLEFTB関数は、バイト数を基準に文字列の先頭を取り出せる、システム連携や文字数制限対応にピッタリの関数です。最後に要点を整理しておきましょう。
- 構文は
=LEFTB(文字列, [バイト数])の2引数。バイト数省略時は1バイト - 全角=2バイト、半角=1バイトとしてカウントする
- 全角文字の途中でバイトが切れる場合、そのバイトは切り捨てられる
- LEFTは文字数、LEFTBはバイト数。基幹システム連携や固定長ファイルはLEFTB一択
- LENBと組み合わせると、超過チェックと自動トリミングが同時にこなせる
- #VALUE! は負のバイト数指定、結果が空になるのは全角始まりでバイト数が足りないパターン
まずは手元の商品名リストや顧客データを、=LEFTB(A2, 40) のような形で整形してみてください。基幹システム取込のエラーが減るだけで、月末作業の負担がぐっと軽くなりますよ。
