いきなり答える備忘録

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

(Gスプレッドシート)文字列から数字を抽出する

 Googleスプレッドシートで、文字列に含まれる数字だけを取り出す方法についてです。
 対象とするのは半角数字とします。数字は文字列として抽出し、0で始まる数字もそのまま抽出するものとします。取り出したい範囲に応じていくつかの方法を紹介します。

  • REGEXEXTRACT関数やREGEXREPLACE関数を使って、文字列から数字だけを取り出すことができます。

手順

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

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

 これらの式を実行すると次のような結果になります。

 なお対象セルが空白の場合、数字を含まない場合、数字のみの場合などエラーになることがあります。
 それぞれのセルに記録されている式の意味と内容については下記の通りとなっています。

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

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

=REGEXREPLACE(B3,"[^0-9]","")

数字以外(「^」に注意)を空文字に置き換えることにより、結果的に数字がすべて残ります。

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

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

=REGEXREPLACE(REGEXEXTRACT(B4,"[0-9].*[0-9]"),"[^0-9]+","_")

まずREGEXEXTRACT関数で最初の数字から最後の数字までを抽出してから、数字以外の一連の文字をそれぞれ1文字の区切り記号(この例では「_」)に置き換えています。

一連の数字ごとに抽出して各セルに分割する

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

=SPLIT(REGEXREPLACE(REGEXEXTRACT(B5,"[0-9].*[0-9]"),"^|[^0-9]+","_'"),"_")

基本的に1つ上の例と同様ですが、数字以外を区切り記号(この例では「_」)に置き換えてSPLIT関数で各セルに分割しています。
各数字が数値にならないように(0で始まる数字の0が消えないように)するため、かなり長くなっています。
 (0で始まる数字の)0が消えてよければ「=SPLIT(REGEXREPLACE(B5,"[^0-9]","_"),"_")」で済みますし、そちらの方が実用的かもしれません。

数字のうち最初に現れる一連のものだけ抽出する

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

=REGEXEXTRACT(B6,"[0-9]+")

1文字以上の連続する文字列は「+」と表現できます。

数字のうち最後に現れる一連のものだけ抽出する

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

=REGEXEXTRACT(B7,"([0-9]+)[^0-9]*$")

「$」は末尾の位置を指します。

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

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

=REGEXEXTRACT(B8,"[0-9]")

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

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

=REGEXEXTRACT(B9,"([0-9])[^0-9]*$")

全角数字やカンマ等の扱いについて

 全角数字やカンマ等を含めて取り出す場合は式内にそれらを併せて記す必要があります。
 例えば、数字のほかカンマ・ドット・プラス・マイナス(全角含む)まで対象を広げる場合は次のようになります。ただし抽出した結果が「数値とみなせる」ものである保証はありません。「-,0+275.61-5」などという結果もそのまま出力されます。
 
 例:B3セル中のすべての数字等を取り出す(C3セル)

=REGEXREPLACE(B3,"[^0-9,.+\-0-9,.+-]","")

 2つ目の「-」の前にバックスラッシュが必要なこと(半角マイナスを指定する際のエスケープ)と、全角の0と9の間の「-」が半角であることに注意してください。