Google Spreadsheet で部分文字列を抽出する

プログラミング言語には部分文字列を取り出す関数 substring が用意されていることが多いが、Google Spreadsheet にはそのような名前の関数は用意されていない。Google Spreadsheet に用意されている関数を組み合わせて同じようなことができないかを調べてみた。

やりたいこと

A列にカンマ区切りで入力されている文字列から、カンマの後ろの数字のみを取り出してB列で参照できるようにしたい*1

やったこと

文字列からカンマの位置を見つけるための FIND 関数と、文字列の長さを返す LEN 関数、および部分文字列を取り出す MID 関数を組み合わせることで解決した。

=MID(A1,FIND(",",A1)+1,LEN(A1))

順に関数の中身を見ていく。

FIND 関数

指定した文字列が、指定したテキスト内で最初に現れる位置を返す。

FIND(検索文字列, 検索対象のテキスト, [開始位置])

今回の場合は 検索文字列,検索対象のテキスト がA列の りんご,100 に該当する。第一引数と第二引数が少々分かりにくいのでその点だけ注意が必要*2開始位置 は省略可能で、指定しない場合は文字列の先頭から検索される。

公式ドキュメント: FIND - Google ドキュメント エディタ ヘルプ

LEN 関数

指定した文字列の長さを返す。

LEN(テキスト)

文字の全角半角を問わず、1文字であれば1としてカウントされる。指定したテキストが空文字列、もしくは参照しているセルが空白の場合はエラーではなく0としてカウントしてくれる。

公式ドキュメント: LEN - Google ドキュメント エディタ ヘルプ

MID 関数

こちらが部分文字列を取り出すための関数。

MID(文字列, 開始位置, セグメントの長さ)

文字列 の中から、開始位置 から始まる セグメントの長さ の文字列を取り出す。今回の場合は開始位置は , の次の文字からとなるため FIND(",",A1)+1 で指定することができる。また、取り出したい文字列の長さはそれぞれの行によって異なっているため、どの長さであっても全量取り出せるように LEN(A1) を指定して途中で切れることのないようにしている*3

公式ドキュメント: MID - Google ドキュメント エディタ ヘルプ

そのほか使えそうな関数

文字列操作のための関数としては以下のようなものが用意されている。

LEFT関数

指定した文字列の先頭から、指定した文字数分の部分文字列を返す。

LEFT(文字列, [文字数])

文字列を左から見て部分文字列を取り出すため LEFT という名前である。文字数を指定しない場合は1文字のみ返される。

今回のデータで「カンマの左側の文字列のみ取り出したい」という場合は、以下のように書ける。

=LEFT(A1,FIND(",",A1)-1)

公式ドキュメント: LEFT - Google ドキュメント エディタ ヘルプ

RIGHT関数

指定した文字列の末尾から、指定した文字数分の部分文字列を返す。

RIGHT(文字列, [文字数])

文字列を右から見て部分文字列を取り出すため RIGHT という名前である。文字数を指定しない場合は1文字のみ返される。

今回のケースであれば、RIGHT関数を使うと以下のようにも書くことができる。引数が少ない分、こちらの方が多少見やすいかもしれない。

=RIGHT(A1,LEN(A1)-FIND(",",A1))

公式ドキュメント: RIGHT - Google ドキュメント エディタ ヘルプ

*1:Excelであれば「形式を選択して貼り付け」でカンマで区切って各セルへの貼り付けが可能であったように思うが、Google Spreadsheet ではそのような機能が見つけられなかったためこのような手法を取っている

*2:Javaなどのプログラミング言語では <検索対象のテキスト>.indexOf(検索文字列) のような書き方をすることが多く、そちらに慣れていると引数の順番を間違えがちである

*3:セグメントの長さよりも文字列の末尾が確実に先に来るため、結果的に全量取り出せる