いきなり答える備忘録

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

(Gスプレッドシート)改行を含む文字列中の特定の行を抽出する

 Googleスプレッドシートで、セル内で改行している場合に、その中の特定の行を抽出する方法についてです。
 改行中のn行目を抽出する方法と、特定の文字列を含む行を抽出する方法を紹介します。

  • SPLIT関数とINDEX関数を使って、セル内のn行目を抽出することができます。
  • REGEXEXTRACT関数を使って、セル内の特定の文字列を含む行を抽出することができます。中間一致のほか前方一致、後方一致も可能です。

手順

n行目を抽出する

f:id:accs2014:20201229113152p:plain:right:w550

 画像ではD3セルに次のような式を入力し、B3セル内の2行目の内容を取得しています。
 さらに式を下方にコピーしています。

 D3セル

=INDEX(SPLIT(B3,CHAR(10)),2)

 SPLIT関数を使い、改行(CHAR(10))を区切り文字として文字列を分割し、あとはINDEX関数で2番目のものを取得しています。
 なお、改行が連続する場合にそれらを無視する(つまり「1文字以上の文字がある行のうちのn行目」を取得する)には次のようにします。

=INDEX(SPLIT(B4,CHAR(10),,TRUE),2)

特定の文字列を含む行を抽出する

f:id:accs2014:20201229113157p:plain:right:w550

 画像ではD3セルに次のような式を入力し、B3セル内の行のうち「都道府県」のいずれかの文字を含む(中間一致)行の内容を取得しています(複数該当する場合は最初の行となります)。
 さらに式を下方にコピーしています。

 D3セル

=REGEXEXTRACT(B3,"(?m)^.*[都道府県].*$")

 「(?m)」の部分は正規表現のマルチラインモードと呼ばれるフラグ(オプション)です。
 具体的な効果は「^や$が文字列の先頭・末尾だけでなく改行中の各行の先頭・末尾にもマッチするようになる」というものです。これを利用することで改行を含む文字列中の行の抽出がしやすくなります。
 「^」は各行の先頭、「$」は各行の末尾、2箇所ある「.*」は0文字以上の任意の文字、「[都道府県]」は「都道府県」の4文字のいずれかを表し、これらをつなげることで中間一致検索を実現しています。余談ですがもうちょっと手を加えればより正確な都道府県名の判定も可能です。

 また、中間一致(~を含む)のほか、前方一致(~で始まる)、後方一致(~で終わる)も可能です。
 例として「東京都」の中間一致、前方一致、後方一致の検索例は次のようになります。

中間一致:=REGEXEXTRACT(B3,"(?m)^.*東京都.*$")
前方一致:=REGEXEXTRACT(B3,"(?m)^東京都.*$")
後方一致:=REGEXEXTRACT(B3,"(?m)^.*東京都$")