いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Excel)文字列から数字だけを抽出する

 Excelで、文字列に含まれる数字だけを取り出す方法についてです。
 対象とするのは半角数字とします。数字は文字列として抽出し、0で始まる数字もそのまま抽出するものとします。

  • SEQUENCE関数やMID関数等を使って文字列から数字を抽出することができます。

手順

サンプルデータと実行結果

 B3:B6セルには全く同じ文字列が記録されています。
 これに対し、C3:C6セルには目的に応じた式が記録されています。

f:id:accs2014:20200107033204p:plain:w780

 これらの式を実行した結果は次のとおりです。

f:id:accs2014:20200107033208p:plain:w600

 それぞれのセルに記録されている式の意味と内容については下記の通りとなっています。

すべての数字を取り出してつなげる

 C3セルには次のように入力しています。

=CONCAT(IFERROR(VALUE(MID(B3,SEQUENCE(LEN(B3)),1)),""))

 SEQUENCE関数とMID関数で1文字ずつ分割してそれぞれ数字でなければ空文字列に変換し、最後にCONCAT関数で結合しています。
 なおVALUE関数の代わりに「*1」とすれば若干短くできます。

一連の数字ごとに抽出して記号で区切る

 C4セルの式は次の通りです。

=SUBSTITUTE(TRIM(CONCAT(IFERROR(VALUE(MID(B4,SEQUENCE(LEN(B4)),1))," ")))," ","_")

 基本的に上記の式と同様ですが、数字以外を空文字列ではなくスペースに置き換えたうえで結合し、TRIM関数でスペースをそれぞれ1つに縮め、最後にスペースを記号(_)に置き換えています。
 実用的にはさらにn番目のものを取り出したいところですが相当長くなりますので省略します。

数字のうち最初の1文字だけ抽出する

 C5セルの式は次の通りです。

=LEFT(CONCAT(IFERROR(VALUE(MID(B5,SEQUENCE(LEN(B5)),1)),"")),1)

 一旦すべての数字を抽出してからLEFT関数で最初の1文字だけにしています。

数字のうち最後の1文字だけ抽出する

 C6セルの式は次の通りです。

=RIGHT(CONCAT(IFERROR(VALUE(MID(B6,SEQUENCE(LEN(B6)),1)),"")),1)

 一旦すべての数字を抽出してからRIGHT関数で最後の1文字だけにしています。

備考

 正規表現系の関数を持つGoogleスプレッドシートやCalcと比べて式が複雑かつ長大になることとカンマ、小数点などの扱いが困難なのが難点です。