Excel関数 逆引き集 | 数字だけ抽出 → TEXTJOIN+MID

Excel
スポンサーリンク

概要

「文字と数字が混ざったセルから“数字だけ”取り出したい」
A-123B-45 から 12345 だけ欲しい」
「品番やIDの中の数字部分だけ抜き出して計算に使いたい」

こういうときに使える代表的なテクニックが
TEXTJOIN + MID(+ISNUMBER など)で“数字だけ抽出”する方法です。

やっていることはシンプルで、

1文字ずつバラす → それが数字か判定 → 数字だけをつなぎ直す

という3ステップを、関数の中で一気にやっています。


基本の考え方(文字列を1文字ずつ調べる)

まず、大事な考え方を言葉で整理します。

1つのセルに入っている文字列を、
「1文字目」「2文字目」「3文字目」…と、1文字ずつ取り出してあげれば、
それぞれが「数字かどうか」を判定できます。

1文字取り出すには MID 関数を使います。

=MID(文字列, 開始位置, 文字数)

たとえば A2 に A1B2C3 が入っているとき、

=MID(A2, 2, 1)   ' 2文字目 → "1"
=MID(A2, 4, 1)   ' 4文字目 → "2"

のように、「開始位置」を 1,2,3,… と変えていけば、
1文字ずつ取り出せます。

この「開始位置の連番」をまとめて作るのに
SEQUENCE や ROW+INDIRECT を使い、
取り出した 1文字ずつを ISNUMBER で判定し、
最後に TEXTJOIN で「数字だけ」をつなぎ直します。


TEXTJOIN+MID+SEQUENCE で数字だけ抽出(新しいExcel)

新しい Excel(動的配列が使えるバージョン)なら、
次の1本の式で「数字だけ抽出」ができます。

例として、A2 に次の文字列が入っているとします。

A2:
A-123B-45

これから「12345」だけ取り出す式はこうです。

=TEXTJOIN(
    "",
    TRUE,
    IF(
        ISNUMBER(--MID(A2, SEQUENCE(LEN(A2)), 1)),
        MID(A2, SEQUENCE(LEN(A2)), 1),
        ""
    )
)

1行に書きたい場合はこうです。

=TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(A2,SEQUENCE(LEN(A2)),1)),MID(A2,SEQUENCE(LEN(A2)),1),""))

この式の流れを、かみ砕いて説明します。

まず、

SEQUENCE(LEN(A2))

が、A2 の文字数ぶんの連番(1,2,3,…)を作ります。
A2 の長さが 8 なら {1;2;3;4;5;6;7;8} のような配列です。

次に、

MID(A2, SEQUENCE(LEN(A2)), 1)

で、「1文字目」「2文字目」…と、A2 の中身を1文字ずつバラした配列を作ります。

その1文字ずつが数字かどうかを

ISNUMBER(--MID(...))

で判定します。
-- は「文字列を数値に変換しようとする」トリックで、
数字なら数値になり TRUE、数字でなければエラーで FALSE 的に判定できます。

最後に、IF で

  • 数字ならその文字を採用
  • 数字でなければ “”(空文字)にする

というふるいにかけ、

TEXTJOIN("", TRUE, {数字と空文字の配列})

で、空文字は無視して(第2引数 TRUE)、
数字だけをくっつけて 1本の文字列にします。

結果:12345 という「数字だけの文字列」が得られます。


SEQUENCE が使えない場合(旧バージョンのExcel)

古いバージョンの Excel で SEQUENCE が使えない場合は、
ROW(INDIRECT("1:"&LEN(A2))) で連番を作ります。

同じ例(A2:A-123B-45)で数字だけを抜き出す式はこうです。

=TEXTJOIN(
    "",
    TRUE,
    IF(
        ISNUMBER(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1)),
        MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1),
        ""
    )
)

1行にするとこうです。

=TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1),""))

この式は「配列数式」なので、
古い Excel では Enter ではなく
Ctrl + Shift + Enter で確定する必要があります。

ROW(INDIRECT(“1:”&LEN(A2))) は、
「1 から 文字数 までの連番の縦配列」を作るためのお約束パターンだと思ってください。


抽出した数字を“数値”として使う

ここまでで作った結果は「数字だけの文字列」です。
例えば A-123B-45 から 12345 は取れましたが、
そのままでは“文字列”なので、計算に使うなら数値に変換する必要があります。

数値にしたい場合は、VALUE をかませます。

新しい Excel の例(SEQUENCE 版)なら:

=VALUE(
  TEXTJOIN(
    "",
    TRUE,
    IF(
      ISNUMBER(--MID(A2,SEQUENCE(LEN(A2)),1)),
      MID(A2,SEQUENCE(LEN(A2)),1),
      ""
    )
  )
)

この式の結果は、文字列 "12345" ではなく、数値 12345 です。
合計・平均・大小比較などの計算に、そのまま使えます。


例題

問題1

A2 に「A1B2C3」という文字列が入っています。
この中から「123」だけを取り出して文字列として返す式を書いてください。
(Excel の新しいバージョンで SEQUENCE が使える前提です)

=TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(A2,SEQUENCE(LEN(A2)),1)),MID(A2,SEQUENCE(LEN(A2)),1),""))

問題2

A2 に「品番-AB12-3X」という文字列が入っています。
この中から「123」だけを抜き出して文字列として返す式を書いてください。
(SEQUENCE を使ってください)

=TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(A2,SEQUENCE(LEN(A2)),1)),MID(A2,SEQUENCE(LEN(A2)),1),""))

問題3

A2 に「A-123B-45」という文字列が入っています。
古いExcel(SEQUENCEなし)で、「12345」を取り出す配列数式を書いてください。
(ROW+INDIRECT を使ってください)

=TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1),""))

(※Ctrl + Shift + Enter で確定)


問題4

A2 に「部屋番号:101A」という文字列が入っています。
この中から「101」を取り出し、さらに数値 101 として扱えるようにしたいです。
数字抽出の式に VALUE を組み合わせて書いてください。
(新しい Excel で SEQUENCE が使える前提)

=VALUE(TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(A2,SEQUENCE(LEN(A2)),1)),MID(A2,SEQUENCE(LEN(A2)),1),"")))

問題5

A2 に「No.2026-01」という文字列が入っています。
この中から「202601」という数字だけを抜き出して文字列として返す式を書いてください。
(SEQUENCE を使った TEXTJOIN+MID で答えてください)

=TEXTJOIN("",TRUE,IF(ISNUMBER(--MID(A2,SEQUENCE(LEN(A2)),1)),MID(A2,SEQUENCE(LEN(A2)),1),""))

TEXTJOIN+MID の“数字だけ抽出”パターンは、

1文字ずつ分解 → 数字だけ残す → つなぎ直す

という考え方さえつかめば、
記号・文字・数字が混ざったどんな文字列からでも「数字だけ」を取り出せます。

一度この型を自分で手入力して動かしてみると、
配列の動き方や「ISNUMBER(–MID(…))」の意味が体感で理解できてきます。
そこまで行くと、文字列処理が一気に楽しくなります。

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました