Excelで管理している商品コード、住所、型番、社員番号などには、文字と数字が混在していることが少なくありません。
たとえば「AB-12345」から「12345」だけを取り出したい、「東京都新宿区西新宿2-8-1」から番地の数字を確認したい、といった場面です。
数字が一部にしか含まれない文字列では、単純な置換だけでは対応しにくく、関数の組み合わせやExcelの新しい配列関数が役立ちます。
この記事では、文字列から数字だけを抽出する代表的な数式、Excelのバージョンごとの考え方、抽出後の数値化までを詳しく解説します。
数字だけを取り出すときの基本ポイントです。
・Microsoft 365やExcel 2021以降ではTEXTSPLIT、MID、SEQUENCE、TEXTJOINを組み合わせる方法が便利です。
・抽出結果は文字列として返ることがあるため、計算に使う場合はVALUE関数で数値へ変換します。
・先頭のゼロを残したいコードでは、数値化せず文字列のまま扱うことが重要です。
数字を抽出する目的が計算なのか、コードの表示なのかによって、最後にVALUE関数を付けるかどうかが変わります。
サンプルデータは、1行目に見出しがあり、A列に元の文字列、B列に抽出結果を表示する構成で説明します。
数字だけを取り出す基本関数
それではまず、文字列の中から数字だけを連結して取り出す基本的な数式について解説していきます。
| A列 元データ | B列 抽出した数字 |
|---|---|
| AB-12345 | 12345 |
| 商品X08-250 | 08250 |
| 第3倉庫12番 | 312 |
MID関数とSEQUENCE関数による一文字ずつの分解
まずは、文字列を一文字ずつ取り出して、その中に数字があるかどうかを判定する考え方です。
ExcelではMID関数を使うと、文字列の指定位置から任意の文字数を抜き出せます。
SEQUENCE関数で1、2、3という連番を作れば、先頭から末尾までの一文字を順番に調べられます。
=MID(A2,SEQUENCE(LEN(A2)),1)
この数式では、LEN関数でA2セル内の文字数を数え、SEQUENCE関数で文字位置の一覧を作成します。
そしてMID関数が、それぞれの位置にある一文字を配列として返します。
「AB-12345」であれば、A、B、-、1、2、3、4、5という一文字ずつの配列になります。
文字列から数字を抜き出す処理では、最初に一文字ずつ分解するという考え方が土台になります。
この段階では文字と記号も残っているため、次の工程で数字だけを絞り込みます。
【操作のポイント】数式はB2セルに入力し、元データはA2セル以降へ入力します。途中結果を確認したい場合は、数式バーで各関数部分を選択してF9キーを押すと配列の内容を確認できます。
数字だけをFILTER関数で絞り込む方法
続いては、分解した文字から数字だけを判定して抽出する方法を確認していきます。
数字の判定には、各文字へVALUE関数を適用し、変換できたものだけを残す方法が使えます。
ただし、文字や記号にVALUE関数をそのまま適用するとエラーになるため、IFERROR関数で処理を包みます。

=FILTER(MID(A2,SEQUENCE(LEN(A2)),1),ISNUMBER(IFERROR(VALUE(MID(A2,SEQUENCE(LEN(A2)),1)),””)))
FILTER関数の第1引数には、一文字ずつに分解した結果を指定します。
第2引数では、VALUE関数で数値にできる文字だけをISNUMBER関数で判定します。
IFERROR関数によって、Aやハイフンのように数値化できない文字は空文字に置き換わり、判定から除外されます。
この数式の結果は、数字が一つずつ別々のセルへ展開される配列です。
最終的に「12345」のような一つの文字列にするには、TEXTJOIN関数でまとめます。
FILTER関数の結果が横や縦に展開されても、異常ではありません。TEXTJOIN関数を重ねる前の正常な途中結果です。
【操作のポイント】FILTER関数を単独で入力して動きを確認すると、どの文字が数字として判定されたかを把握しやすくなります。空白のセルが周囲にある状態で試しましょう。
TEXTJOIN関数で数字を一つの文字列にまとめる方法
続いては、抽出した複数の数字を区切りなしで連結する方法を確認していきます。
実務では、数字を一文字ずつ表示するのではなく、注文番号や番地のように一つの値へまとめるケースが一般的です。

=TEXTJOIN(“”,TRUE,FILTER(MID(A2,SEQUENCE(LEN(A2)),1),ISNUMBER(IFERROR(VALUE(MID(A2,SEQUENCE(LEN(A2)),1)),””))))
TEXTJOIN関数の最初の引数は区切り文字です。
ここでは何も挟まずに連結したいため、空文字である「””」を指定します。
2番目のTRUEは空白セルを無視する指定であり、3番目にFILTER関数の抽出結果を指定します。
これにより、A2セルが「商品X08-250」なら、B2セルには「08250」と表示されます。
先頭のゼロを残したい場合、この段階ではVALUE関数を付けず、文字列として抽出結果を保持することが大切です。
数式を入力したら、B2セル右下のフィルハンドルをダブルクリックするか、下方向へドラッグしてコピーします。
【操作のポイント】商品コードや郵便番号のようにゼロの意味が重要なデータは、セルの表示形式を標準のままにし、文字列の結果として利用します。
数値に変換して計算へ使う方法
続いては、抽出した数字を合計、比較、並べ替えなどへ使える数値に変換する方法を確認していきます。
| A列 元データ | B列 数値化した結果 |
|---|---|
| 売上-1200円 | 1200 |
| 第45号 | 45 |
| 管理No.300 | 300 |
VALUE関数を最後に追加する数値化
それではまず、TEXTJOIN関数で作った数字の文字列を、Excelで計算できる数値へ変える方法について解説していきます。
数字だけに見えるセルでも、文字列として保存されているとSUM関数で集計できない場合があります。
このようなときは、完成した抽出式の外側をVALUE関数で囲みます。
=VALUE(TEXTJOIN(“”,TRUE,FILTER(MID(A2,SEQUENCE(LEN(A2)),1),ISNUMBER(IFERROR(VALUE(MID(A2,SEQUENCE(LEN(A2)),1)),””)))))
外側のVALUE関数は、「1200」という文字列を数値の1200として認識させます。
数値化できたかどうかは、セルの表示が右寄せになるか、SUM関数で集計できるかを確認すると判断しやすいでしょう。
抽出対象に数字が一つもない場合は、VALUE関数がエラーになる可能性があります。
データに数字がない行も混在するなら、IFERROR関数で全体を包み、空白を返す式に整えると扱いやすくなります。
【操作のポイント】VALUE関数を付けるのは、抽出処理がすべて終わった最後です。途中で数値化すると、配列の判定や連結の意図が分かりにくくなります。
数字を含まないセルでのエラー回避

続いては、文字だけのセルが含まれる表で、エラー表示を防ぐ方法を確認していきます。
元データが「未登録」や「該当なし」のように数字を一切含まない場合、FILTER関数には一致する値がありません。
そのままでは計算式がエラーとなるため、IFERROR関数を外側に加えます。
=IFERROR(VALUE(TEXTJOIN(“”,TRUE,FILTER(MID(A2,SEQUENCE(LEN(A2)),1),ISNUMBER(IFERROR(VALUE(MID(A2,SEQUENCE(LEN(A2)),1)),””))))),””)
この式では、数字が存在するセルでは数値を返し、数字がないセルでは空白を返します。
空白の代わりに0を表示したいときは、最後の「””」を0に変更します。
ただし、数字がないことと値が0であることは意味が異なるため、集計前に区別したい表では空白を返す設計が安全です。
エラーを消すだけではなく、数字がないデータを空白にするのか0にするのかを業務ルールに合わせて決めることが重要です。
【操作のポイント】IFERROR関数は便利ですが、元データの入力ミスまで隠すことがあります。最初はエラーを確認し、運用時に必要なら空白処理を追加しましょう。
先頭のゼロを失わない抽出結果
続いては、先頭にゼロがある番号を安全に扱う方法を確認していきます。
「A-00125」のような管理番号をVALUE関数で数値化すると、結果は125になり、先頭のゼロが消えます。
これはExcelが数値として正しく認識した結果ですが、コードとして利用する場合には問題になることがあります。
先頭のゼロを残す必要があるときは、TEXTJOIN関数までの式を使い、VALUE関数を追加しません。
さらに、抽出先のB列を選択して、ホームタブの表示形式から文字列を指定しておくと安心です。
社員番号、支店コード、製品番号、郵便番号は、計算用の数値ではなく識別用の文字列として扱う場面が多いデータです。
一方で、数量や金額のように加算や大小比較をする値であれば、VALUE関数を使って数値化します。
【操作のポイント】同じ数字でも、識別子か計算対象かで扱い方が変わります。式をコピーする前に、列の目的を確認しておきましょう。
Microsoft 365で使う動的配列数式
続いては、Microsoft 365で利用できる動的配列関数を使い、数式を入力する画面とオートフィルの流れを確認していきます。
| A列 元データ | B列 抽出式の結果 |
|---|---|
| 部品A-120 | 120 |
| Lot-0048 | 0048 |
| 棚7列15段 | 715 |
LET関数で数式を読みやすくする方法
それではまず、長くなりやすい数字抽出の数式をLET関数で整理する方法について解説していきます。
MID関数とSEQUENCE関数を同じ式の中で何度も書くと、修正時に間違えやすくなります。
LET関数を使うと、途中の配列へ名前を付けて、一度定義した値を式の後半で再利用できます。
=LET(x,MID(A2,SEQUENCE(LEN(A2)),1),TEXTJOIN(“”,TRUE,FILTER(x,ISNUMBER(IFERROR(VALUE(x),””)))))
この式では、xという名前に、A2セルを一文字ずつ分解した結果を入れています。
後半ではMID関数を繰り返さず、xだけを書けばよいため、式全体の構造を確認しやすくなります。
LET関数は計算の仕組みを変えるためではなく、長い数式を読みやすく、保守しやすくするための関数です。
文字列の長いデータを大量に処理する表では、同じ計算を繰り返さない設計が処理速度の面でも役立つことがあります。
【操作のポイント】LET関数の変数名には、セル参照と混同しにくい短い英字を使います。x、chars、txtなど、役割が分かる名前にすると見直しが楽になります。
TEXTSPLIT関数を使う場合の注意点
続いては、TEXTSPLIT関数で文字列を分割する場合の考え方を確認していきます。
TEXTSPLIT関数は区切り文字に基づいてテキストを分割する関数です。
ハイフンやスラッシュで区切られた型番から、特定の数字のかたまりを取り出す目的では便利です。
たとえば「AB-12345-CD」のように構造が毎回同じであれば、ハイフンを区切りとして2番目の要素を取得できます。
=INDEX(TEXTSPLIT(A2,”-“),2)
ただし、文字列のどこに数字があるか毎回異なる場合や、数字が複数箇所に散らばる場合には、TEXTSPLIT関数だけでは対応しきれません。
そのようなデータでは、一文字ずつ判定するMID関数とSEQUENCE関数の組み合わせが安定します。
区切り位置が決まっている形式にはTEXTSPLIT関数、数字の位置が不規則な形式には一文字判定の数式が向いています。
【操作のポイント】データの書式が統一されているかを先に確認します。規則が明確なら短い式を選び、不規則なら汎用的な抽出式を選ぶと管理しやすくなります。
オートフィルによる複数行への数式コピー
続いては、作成した数式を複数行へ反映するオートフィルの操作を確認していきます。
B2セルで抽出結果が正しいことを確認したら、セル右下に表示される小さな四角形のフィルハンドルへマウスポインターを合わせます。
ポインターが黒い十字になった状態でダブルクリックすると、隣接するA列の入力済み範囲に合わせて数式が下までコピーされます。
途中に空白行がある表では、ドラッグ操作で必要な最終行まで指定する方法が確実です。
コピー後の数式では、A2がA3、A4のように自動で変化します。
数式をコピーした後は、数字だけの行、文字だけの行、先頭ゼロを含む行の三種類を確認すると、式の問題を早く見つけられます。
【操作のポイント】オートフィル前にB2セルの式を一度数式バーで確認し、A2を絶対参照の$A$2にしていないかを確認します。通常は相対参照のA2を使います。
旧バージョンで使える配列数式
続いては、FILTER関数やSEQUENCE関数がないExcelの旧バージョンで数字を抽出する方法を確認していきます。
| A列 元データ | B列 抽出結果 |
|---|---|
| 型番Z-502 | 502 |
| 区画4-19 | 419 |
ROW関数を使った文字位置の作成
それではまず、旧バージョンのExcelで連番を作るためにROW関数を使う方法について解説していきます。
SEQUENCE関数がないExcelでは、ROW関数とINDIRECT関数を組み合わせることで、1から必要な文字数までの連番を作れます。
=ROW(INDIRECT(“1:”&LEN(A2)))
この部分は、A2セルの文字数に応じて1、2、3という配列を生成します。
あとはMID関数の開始位置へこの配列を渡し、一文字ずつを取り出す流れです。
旧バージョンでは配列数式として確定する操作が必要になるケースがあります。
Excel 2019以前では、数式入力後にCtrlキー、Shiftキー、Enterキーを同時に押す必要がある場合があります。
【操作のポイント】数式の先頭と末尾に波かっこが表示される場合、それはExcelが配列数式として管理している印です。手入力で波かっこを付ける必要はありません。
ユーザー定義関数による文字判定
続いては、関数だけで処理しにくい旧バージョンでの選択肢を確認していきます。
VBAを利用できる環境では、文字列を一文字ずつ確認し、数字だけを連結するユーザー定義関数を作る方法もあります。
ただし、マクロ有効ブックとして保存する必要があり、他の利用者のセキュリティ設定によっては関数が動かないことがあります。
共有ファイルでは、可能な限り標準関数だけで完結する数式を優先すると、受け渡し時のトラブルを減らせます。
VBAは、桁数が非常に多い文字列を大量に処理する場合や、数字以外にも複雑なルールがある場合に検討するとよいでしょう。
【操作のポイント】社内でファイルを共有する場合は、利用者のExcelバージョンを確認します。Microsoft 365の関数を使うと、旧バージョンでは数式が表示できないことがあります。
Power Queryによる大量データの整形
続いては、大量の文字列を繰り返し整形する場合のPower Query活用を確認していきます。
毎月取り込むCSVや基幹システムの出力データなど、数千行単位の文字列から数字を抽出するなら、Power Queryも有力な選択肢です。
Power Queryでは、元データを変換手順として保存し、次回以降は更新ボタンだけで同じ処理を再実行できます。
一度きりの小さな表なら関数が手軽ですが、定型作業なら変換手順を残せるPower Queryが向いています。
数式を何千行にもコピーして重くなる場合は、Power Queryへ処理を移すことでブックの操作性を改善できることがあります。
【操作のポイント】Power Queryを使う前に、元データの列を残しておきます。抽出後の列を追加する形にすれば、変換結果を検証しやすくなります。
抽出結果を正しく扱うための注意点
続いては、数字だけを抽出した後に起こりやすい誤りと、データを正しく扱うための注意点を確認していきます。
| 元データ | 抽出時の注意 |
|---|---|
| 2026年10月6日 | 結果は2026106になり、日付の区切りは失われます。 |
| -250円 | 数字だけでは符号が残らず250になります。 |
| 12.5kg | 小数点を残す別の条件が必要です。 |
負の数と小数点を含むデータ
それではまず、マイナス記号や小数点を含む数値を抽出する際の注意点について解説していきます。
基本の数字抽出式は0から9までの数字だけを残すため、「-250」からは「250」が取り出されます。
また、「12.5」からは「125」となり、小数点も失われます。
符号や小数点にも意味がある金額、重量、割合などでは、数字だけを抜き出す式をそのまま使えません。
データ形式が統一されているなら、SUBSTITUTE関数で単位だけを削除してVALUE関数で変換する方が適しています。
=VALUE(SUBSTITUTE(A2,”kg”,””))
数値らしく見える文字列でも、マイナス記号、小数点、カンマ、単位のどれを残すべきかを最初に決める必要があります。
【操作のポイント】元データの例を数件ではなく数十件確認し、例外的な表記がないか調べます。例外があると、抽出後の計算結果に大きな差が出ることがあります。
複数の数字を連結する際の意味
続いては、一つのセルに複数ある数字を連結する場合の意味を確認していきます。
「第3倉庫12番」から基本式で数字を抽出すると「312」になります。
これはすべての数字を順番に連結した結果であり、3と12という別々の情報を区別しているわけではありません。
住所、日付、階数、枝番など、複数の数字のまとまりに意味があるデータでは、数字だけの連結が正しい結果とは限りません。
区切り文字や特定の語句を基準にして、必要な部分だけをMID関数、TEXTAFTER関数、TEXTBEFORE関数で切り出す方法を検討しましょう。
数字を抽出する前に、欲しい値が数字の全部なのか、最初の数字なのか、特定の位置にある数字なのかを明確にすると式の選択を誤りません。
【操作のポイント】抽出結果の列名は「数字のみ」ではなく、「商品番号」「番地」「数量」など意味が分かる名前にすると、後から見た人にも処理内容が伝わります。
全角数字と半角数字の統一
続いては、全角数字が混在するデータを扱うときの準備を確認していきます。
入力元によっては、「123」のような全角数字と「123」のような半角数字が同じ列に混在することがあります。
基本の判定式では、環境や関数の組み合わせにより全角文字を期待通り処理できないことがあります。
まずASC関数を使い、全角の英数字を半角へそろえてから抽出式へ渡すと、データを統一しやすくなります。
=ASC(A2)
ASC関数の結果を別列に表示して確認してから、数字抽出の対象をその列にする方法も安全です。
元データを直接上書きすると確認できなくなるため、変換用の補助列を残す運用が向いています。
【操作のポイント】文字コードの違いは見た目だけでは判断しにくい要素です。検索や照合がうまくいかないデータでは、全角半角の統一も確認しましょう。
まとめ エクセルで文字列から数字だけを抽出する方法
エクセルで文字列から数字だけを取り出すには、MID関数で一文字ずつ分解し、SEQUENCE関数で文字位置を作り、FILTER関数で数字を絞り込んでからTEXTJOIN関数で連結する方法が便利です。
Microsoft 365では、=TEXTJOIN(“”,TRUE,FILTER(MID(A2,SEQUENCE(LEN(A2)),1),ISNUMBER(IFERROR(VALUE(MID(A2,SEQUENCE(LEN(A2)),1)),””))))という式を基本形として利用できます。
抽出した数字を計算に使うならVALUE関数で数値化し、先頭のゼロを残したいコードなら文字列のままにすることが重要です。
文字だけのデータが混ざる表では、IFERROR関数を加えて空白または0を返す形にすると、エラーのない一覧を作れます。
また、負の数、小数点、複数の数字のまとまり、全角数字が含まれるケースでは、単純な数字抽出が目的に合うかを確認しましょう。
元データの規則性を見極め、計算用の値か識別用のコードかを区別すれば、関数を使った数字抽出を実務で安定して活用できます。