いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(LibreOffice Calc)文字列の中の数字だけを取り出す

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

  • REGEX関数(バージョン6.2で追加)を使って文字列の中の数字だけを取り出すことができます。

手順

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

 B3:B10の範囲に全く同じ文字列が記録されていますので、ここから数字を取り出すものとします。
 C3:C9セルに、目的に応じたそれぞれの式を入力します。

f:id:accs2014:20200114012812p:plain:w780

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

f:id:accs2014:20200114012816p:plain:w780

 それぞれのセルに記録されている式の意味と内容については以下でご確認ください。

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

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

 数字以外(「^」に注意)を空文字に置き換えることにより、結果的に数字がすべて残ります。
 REGEX関数は第3引数に何も指定しないと(カンマの間に何も入れない)置換ではなく抽出を行うため空文字は必須です。
 第4引数の「g」は該当するすべての文字列を置き換えるためのフラグで(置換時のみ有効)、これがないと数字以外の最初の一文字(肉)が消えるだけになります。

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

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

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

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

=REGEX(B5,"[0-9]+")

 第3引数に何も指定しない場合、REGEX関数は該当する文字列を(置換ではなく)抽出します。
 1文字以上の連続する文字列は「+」により表現します。

数字のうちn番目に現れる一連のものを抽出する

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

 第4引数に数字を指定することで、該当する文字列のうち何番目のものを抽出(置換)するのかを指定できます。

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

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

 先読みを使って、文字列中の「1文字以上の数字→0文字以上の数字以外の文字→文字列の最後」という連なりのうち「1文字以上の数字」の部分だけを抽出しています。

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

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

数字のうちn番目の1文字を抽出する

=REGEX(B9,"[0-9]",,2)

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

=REGEX(B10,"[0-9](?=[^0-9]*$)")

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

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

 例:B3セル中のすべての数字等を取り出す

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