いきなり答える備忘録

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

(LibreOffice Calc)連続する同じ文字の間に任意の文字列をはさむ

 LibreOffice Calcで、文字列中の同じ文字が連続する箇所(すべて)に指定した文字列をはさむ方法についてです。典型的な使い方としてカンマが連続する箇所に文字をはさむといった例が挙げられます。
 バージョン6.2で追加された新関数REGEXの利用例です。

  • REGEX関数の置換機能により、連続する同じ文字の間に任意の文字列をはさむことができます。

手順

f:id:accs2014:20200108024656p:plain:right:w600

 B2セルにカンマ区切りされた文字列がありますが、カンマが連続する箇所がいくつかあります。
 これに対しB4セルに次のように入力します。

=REGEX(B2,",(?=,)",",☆","g")

 第2引数が正規表現のパターン、第3引数が置換先文字列、そして第4引数の「"g"」はマッチしたすべての箇所を置換対象にすることを表します(数字nにするとn番目のマッチ箇所だけを置き換えられます)。
 

f:id:accs2014:20200108024701p:plain:right:w600

 結果はこうなります。
 SUBSTITUITE関数で「,,」を「,☆,」に置き換える方法もありますがカンマが3つ以上連続する場合には2重にネストしなければなりません(高々2回で足りるのでこれも有力なテクニックですが)。
 しかしREGEX関数では先読みができるのでネストを省けるというのがポイントです。

 

f:id:accs2014:20200108024705p:plain:right:w600

 ちなみにですが、次のような式により、どのような文字が連続していても間に文字列をはさむことができます(画像は結果)。
 これだけでも従前の関数では到底実現しないような機能を持っていることがわかるかと思います。

=REGEX(B2,"(.)(?=\1)","$1☆","g")

(バックスラッシュは¥です)