LEFTは、文字列の先頭から、指定した文字数だけ取り出す関数です。
「商品コードの先頭3文字が分類コード」といった、位置が決まっているデータの切り出しに使います。ExcelとGoogleスプレッドシートで共通です。
書式
=LEFT(文字列, [文字数])
文字数を省略すると1文字だけ返します。
基本の使い方
A1に ABC-1234 が入っているとします。
=LEFT(A1, 3) → ABC
文字数が決まっていないとき
実務ではこちらのほうが多くなります。区切り文字の位置を FIND で求めて、その手前までを取り出します。
=LEFT(A1, FIND("-", A1) - 1)
FIND("-", A1) は「-」が4文字目にあることを返すので、-1 して3文字を取り出しています。
区切り文字が無いと #VALUE! になります。 対処は IFERROR で包むか、FIND の結果を確認してから使います。
=IFERROR(LEFT(A1, FIND("-", A1) - 1), A1)
区切りが無ければ元の文字列をそのまま返す、という書き方です。
大文字小文字を区別しない検索
FIND は大文字小文字を区別します。区別したくないなら SEARCH を使ってください。
=LEFT(A1, SEARCH("x", A1) - 1)
SEARCH はワイルドカード(* ?)も使えます。
全角・半角の数え方
LEFTは全角も半角も1文字として数えます。
=LEFT("東京都", 2) → 東京
バイト単位で数えたい場合は LEFTB を使います。ただし実務でバイト数が必要な場面は限られます(固定長のシステム連携など)。
日付に使うと数字になる
日付セルにLEFTを使うと、内部のシリアル値の先頭が返ります。
=LEFT(A1, 4) → 4611 (2026/4/1 のシリアル値の先頭4桁)
日付から年を取り出したいなら TEXT か YEAR を使ってください。
=TEXT(A1, "yyyy") → 2026
=YEAR(A1) → 2026
LEFTは文字列専用の関数だと考えてください。
数値に使うと文字列になる
LEFTの結果は常に文字列です。計算に使うなら VALUE で戻します。
=VALUE(LEFT(A1, 3))
全行に適用する
ARRAYFORMULA で包みます。
=ARRAYFORMULA(IF(A2:A="", "", LEFT(A2:A, 3)))
SPLITやREGEXEXTRACTとの使い分け
| やりたいこと | 使う関数 |
|---|---|
| 位置が固定 | LEFT |
| 区切り文字で分ける | SPLIT |
| パターンで取り出す | REGEXEXTRACT |
区切り文字が複数あったり、パターンが複雑なら REGEXEXTRACT のほうが素直に書けます。
=REGEXEXTRACT(A1, "^([^-]+)")
「最初の - までを取り出す」という意味です。FIND を使った書き方より短く、区切りが無くてもエラーになりません。
エラーの対処
#VALUE! が出る
FINDが対象を見つけられていない- 文字数にマイナスを指定している(
FIND(...) - 1が0未満になった)
IFERROR で包むか、FIND 単体の結果を確認してください。
想定と違う位置で切れる
対象に見えない文字(改行・全角スペース・タブ)が含まれている可能性があります。LEN() で文字数を確認すると分かります。
=LEN(A1)
見た目の文字数と合わなければ、不可視文字が入っています。TRIM や CLEAN で整えてください。
位置で切り出すことの限界
先頭から指定した文字数を取り出す処理は単純ですが、そのまま使えるのは桁数が固定されている場合だけです。実務のデータは、たいてい桁数が揃っていません。
商品コードが「A-101」「AB-2001」のように、記号の前の桁数が違う場合を考えます。先頭から一文字を取れば前者は正しく取れますが、後者は途中で切れます。二文字にすれば逆になります。固定の文字数では対応できません。
こういう場合は、区切りの位置を先に求めてから、その手前までを取り出します。区切り文字を検索する関数で位置を求め、そこから一を引いた文字数を指定する形です。これで桁数が違っても正しく取れます。
この「位置を求めてから切り出す」という組み立ては、文字列処理の基本形です。先頭からでも末尾からでも中間からでも、考え方は同じです。固定の数字を書いている数式を見つけたら、桁数が本当に固定なのかを疑ってください。取り込むデータの形式が変わった瞬間に、静かに壊れます。
全角と半角、そして文字数の数え方
文字数を数える方法には二通りあります。文字の個数で数える方法と、バイト数に近い考え方で数える方法です。
通常の数え方では、全角も半角も一文字として数えます。「東京」は二文字、「Tokyo」は五文字です。日本語を扱う場面では、たいていこちらが直感に合います。
もう一方の数え方では、全角を二として数えます。固定長のテキストファイルを扱う場合や、印字位置を揃える必要がある場合に使います。取り出す関数にも対応する版があり、同じ考え方で切り出せます。
問題は、両者を混在させたときです。文字数を通常の方法で数えて、切り出しをもう一方の方法で行うと、位置がずれます。データに全角と半角が混ざっていると、ずれ方も行によって変わるため、原因の特定に時間がかかります。
方針としては、どちらか一方に統一してください。日本語を含むデータなら、通常の数え方で揃えるのが分かりやすくなります。固定長の形式を扱う必要がある場合にだけ、もう一方を使います。
取り出した結果は文字列になる
先頭から数字を取り出した場合、結果は数値ではなく文字列になります。見た目は数字ですが、計算には使えません。
これが問題になるのは、取り出した値をキーとして検索に使う場合です。検索先が数値として入っていると一致しません。逆に、検索先も文字列なら一致します。型を揃える必要があります。
数値として使いたい場合は、数値に変換する関数で包みます。この一手間を忘れると、検索が該当なしになったり、集計から漏れたりします。
もうひとつ、先頭のゼロが意味を持つコードには注意が必要です。「0012」から先頭二文字を取り出すと「00」という文字列になります。これを数値に変換すると、ゼロになります。コードとして扱うなら、文字列のままにしておくべきです。
このように、切り出しの結果をどう扱うかは、その後の用途で決まります。切り出した直後に型を決めておくと、後の工程で迷いません。
実務での組み立て例
取り込んだデータから必要な部分を取り出す作業は、いくつかの型に分類できます。
固定長のコードから分類部分を取り出す場合は、単純に先頭から指定した文字数を取ります。桁数が仕様として決まっているなら、これで安定します。
区切り文字の手前を取り出す場合は、区切りの位置を検索してから切り出します。桁数が可変でも対応できます。
区切り文字が存在しない行がある場合は、エラーになります。検索の関数が位置を返せないためです。先に区切り文字が含まれているかを判定して分岐するか、エラー時の処理を書いてください。
複数の要素に分けたい場合は、区切り文字で分割する関数を使うほうが簡単です。一度に複数のセルへ展開できます。→ SPLIT関数の使い方
いずれの場合も、取り出した結果を作業列に置いておくのが基本です。数式の中で毎回切り出していると、どこで何をしているのか追えなくなります。
コードの設計が処理の難易度を決める
文字列から一部を取り出す処理が難しくなるかどうかは、そのコードがどう設計されているかで決まります。自分でコードを設計する立場なら、次の点を意識してください。
桁数を固定する。 分類が一桁で足りると思っても、将来増える可能性があるなら二桁にしておきます。桁数が固定されていれば、位置で切り出せます。可変になると、区切り文字の位置を求める処理が必要になります。
区切り文字を入れる。 桁数を固定できない場合は、要素の間に区切り文字を入れます。ハイフンやアンダースコアが一般的です。区切りがあれば、分割の関数で一度に分けられます。
区切り文字を要素の中に使わない。 商品名にハイフンが含まれる可能性があるなら、区切りには別の記号を使ってください。要素の中に区切りと同じ文字があると、分割が意図どおりに動きません。
先頭にゼロを使うなら文字列として扱う。 数値として保存すると先頭のゼロが消えます。桁数が意味を持つコードは、必ず文字列として管理してください。
要素の意味を混ぜない。 一つのコードに分類と連番と年度を詰め込むと、どれか一つが変わったときに全体を作り直すことになります。可能なら列を分けて持ってください。
既存のコード体系は変えられないことが多いのですが、新しく作る場合はこの五点を押さえておくと、後の処理が格段に楽になります。
取り出した結果の検算
切り出しの処理は、間違っていてもエラーが出ません。想定と違う文字列が返るだけです。したがって、検算の仕組みが重要になります。
もっとも簡単なのは、元の文字数を確認する列を置くことです。想定した桁数と違う行があれば、そこで切り出しが失敗している可能性があります。
次に、切り出した結果の文字数も確認します。指定した文字数より短い結果が返っていれば、元のデータが短すぎるということです。
三つ目に、切り出した結果の種類を数えます。分類コードを取り出したなら、種類は限られているはずです。想定より多ければ、余計な文字が混ざっています。重複を除く関数で一覧を出せば、すぐに分かります。
四つ目に、マスタとの突き合わせです。取り出したコードがマスタに存在するかを判定すれば、該当なしの行が異常です。
これらの確認は、作業列を数本足すだけで済みます。一度作れば、取り込みのたびに機能します。切り出しの処理を含むシートでは、必ず入れておいてください。
よくある質問
Q. 文字数を省略するとどうなりますか
一文字だけが返ります。省略できることを知らずに書いている場合が多いのですが、意図せず省略すると想定外の結果になります。
Q. 指定した文字数より短い場合は
エラーにはならず、全体が返ります。四文字を指定して中身が二文字なら、二文字が返ります。
Q. 空白も一文字として数えますか
数えます。前後に空白が入っていると、位置がずれます。先に空白を落としてください。
Q. 取り出した数字で計算できません
文字列になっています。数値に変換する関数で包んでください。
Q. 全角文字が正しく取れません
数え方の種類を確認してください。全角を二として数える版と混在していると、ずれます。
Q. 区切り文字までを取りたいのですが
区切りの位置を検索する関数で求め、そこから一を引いた文字数を指定してください。
Q. 区切り文字がない行でエラーになります
検索の関数が位置を返せないためです。含まれているかを先に判定するか、エラー時の処理を書いてください。
Q. 末尾から取りたいのですが
末尾から取り出す関数があります。考え方は同じです。→ RIGHT関数の使い方
まとめ
- 書式は
=LEFT(文字列, 文字数) - 文字数が可変なら
FINDと組み合わせる - 区切りが無い場合に備えて IFERROR で包む
- 全角も半角も1文字として数える
- 日付に使うとシリアル値が返る。TEXT を使うこと
- パターンが複雑なら REGEXEXTRACT のほうが短い
関連する関数
- RIGHT — 末尾から取り出す
- MID — 途中から取り出す
- SPLIT — 区切り文字で分割する
- REGEXEXTRACT — 正規表現で取り出す
- 関数一覧に戻る
