今回は、 Google Apps ヘルプフォーラムで質問のあった、
- スプレッドシートで連続改行を一つにしたい(Google Apps ヘルプフォーラム)
をチャレンジしてみたいと思います。
※正規表現について、指摘を受けたので修正(2016/5/18)
※正規表現について、指摘を受けたので修正(2016/5/18)
自分で関数を作る
いろいろ探すより、これぐらいなら自分で作った方が早いですよ〜
でも既存で関数ありましたけど...(後述)
ツール→スクリプトエディタを開く
と出てくるので全消しして、使われていない名前の関数名にして(ここでは trim_breakにした)、これに対して
function trim_break(target){
// 連続する改行を1つにする
if (target == null || target == undefined){
return "";
}
// 改行(CRとLF両方チェック)
return target.replace(/(\n|\r|\r\n){2}/g, "\n");
}
を入れて保存します。
関数をつかう
な感じで使います。
するとほら、下記のように連続する改行は1つにまとまりました!
既存の関数でなんとかならないの?
それをいっちゃーオシマイですよ。。でもまぁ調べたらありました。
REGEXREPLACE 関数をつかう
=REGEXREPLACE(B3,"(\n|\r|\r\n){2}","
")
ですね。関数の末尾の " と ") の間は改行してください。
付録1:改行コードについて
改行コードには、LFとCRとCR+LFの3種類あります。
UNIX系はLF、MacOS9以前は CR、Windowsは CR+LFですね。
そのためすべてに対応するためには、上記のような正規表現になります。
付録1:正規表現「(\n|\r|\r\n){2}」について
- 利用可能な正規表現(サクラエディタヘルプ)
を参考させていただきました。
- {2}:直前文字が2回繰り返された場合
- |:OR
- () {2}:() 内が連続2度出てきた場合
- \r : CR改行
- \n : LF改行
- \r\n): CR+LF改行
となり、つまりは、LFかCRかLF+CRが二回連続続いたらという正規表現になります。
2016年5月17日 @kimipooh
0 件のコメント:
コメントを投稿