いきなり答える備忘録

Google Workspace(旧G Suite)・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)セル内の改行だけの行を削除する

 Googleスプレッドシートで、セル内にある「改行だけの行」をなくす方法についてです。関数でやる場合、SPLIT関数を用いる方法もありますが、ここではREGEXREPLACE関数を使った方法を試してみます。

  • 関数による方法、あるいは「検索と置換」メニューによる方法によりセル内の余分な改行を削除することができます。

手順

JOIN/SPLIT関数による方法

※セル内の文字列は上寄せしていますが、B3セルの文字列は最初と最後にも改行だけの行を含んでいるため、文字がセルの上端に接していません。

 B3:B5セルに文字列が記録されており、そのうちB3セルの文字列には空の行(改行だけの行)が複数存在しています。
 そこでC3セルに式を入力して空の行を削除し、式をC4,C5にもコピーしています。ただしC4,C5セルはもともと余分な改行を含んでいないのでB4,B5と変わりません。
 式の内容は次のようなものです。

 C3セル

=JOIN(CHAR(10),SPLIT(B3,CHAR(10)))

 SPLIT関数を使い「CHAR(10)」つまり改行を区切り文字として文字列を分割し、今度はJOIN関数で改行を区切り文字として分割した文字列を連結しています。
 単純に考えると元の文字列に戻るだけですが、SPLIT関数による分割の際に(先頭の改行、末尾の改行、連続する改行が原因で)空白セルが発生する一方でJOIN関数は空白セルを連結の対象から外す(既定値)ので、これらの余分な改行がなくなります。

REGEXREPLACE関数による方法

 こちらはややマニアックですがREGEXREPLACE関数のみによる方法です。
 結果はもちろん上記例と全く同じとなっています。
 式の内容は次のとおりです。

 C3セル

=REGEXREPLACE(B3,"\n+$|(?m)^\n","")

 第2引数がちょっとややこしいですが、文字列の末端にある1つ以上の改行及び各行の先頭にある改行(後者はマルチラインモード、つまり「(?m)」によって「^」が各行の先頭にマッチし「$」が各行の末尾にマッチするようになることを利用)をいずれも削除しています。単純に「^\n$」とかで済みそうですが実際それではうまくいかないのが難しいところです。

「検索と置換」メニューによる方法

 REGEXREPLACE関数の例と同じ式を使いたいところですが、メニューではマルチラインモードが機能しないようですので置換を2段階で実行します。


 まず上部メニューから「編集」→「検索と置換」と進んでダイアログを出します。
 そこで上部の「検索」欄に「^\n+|\n+$」と記し、下部の「正規表現を使用した検索」にチェックを入れます(すると「大文字と小文字の区別」にもチェックが入りますが、ここでの結果には影響しません)。
 あとは置換のボタン(ここでは「すべて置換」)をクリックします。

 なお中央のプルダウン(対象範囲)はデフォルトで「すべてのシート」となっていますので、必要ない箇所まで変換しないようご注意ください。


 するとB3セルの文字列の先頭と末尾にある(それぞれ複数の)改行が削除されました。
 引き続き「検索」欄に「(\n)+」と入力し、「置換後の文字列」に「$1」と記します。これらは、連続する改行を1つの改行に変換するという意味です。
 あとは「すべて置換」をクリックすると……


 余分な改行がすべて消えました。

 なお「…&CHAR(10)&…」といった式により改行されている場合は、この方法で改行を削除することができません。
 その場合は文字列(式)を一旦コピーして「値のみ貼り付け」をしておけば大丈夫です。
 どうしても変換メニューだけで変換したい場合は下記の記事を参考にチャレンジしてみてください。

www.officeisyours.com