いきなり答える備忘録

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

(Gスプレッドシート)1文字おきに特定の文字に置き換える

 Googleスプレッドシートで、文字列を1文字おきに別の字に置き換える、言い換えれば偶数番目(奇数番目)の文字だけを置き換える方法についてです。使用例として1文字おきに伏字にすることができます。

  • REGEXREPLACE関数を使って、文字列中の偶数番目または奇数番目の文字だけを別の字に置き換えることができます。

手順

偶数番目の文字だけを置き換える場合

 B3:B9に対象となる文字列が入力されています。
 これに対し、C3セルに次のような式を入力し、さらに式を下方にコピーすることで各文字列の偶数番目の文字を「★」に置き換えています。

 C3セル

=REGEXREPLACE(B3,"(.).","$1★")

 ちょっと難しい式になっていますが補足しておくと、文字列中の文字を2文字ずつ別の字に置き換えるような内容になっています。2文字のうちの前者(つまり奇数番目の文字)はカッコで囲むことでグループ化し(これらには$1という番号が与えられます)、置換先を「$1」とすることでそれ自身に置き換えています。また、後者(偶数番目の文字)は「★」に置き換えています。結果的に偶数番目の文字だけが置き換えられます。

奇数番目の文字だけを置き換える場合

 こちらではC3セルに次のような式を入力し、さらに式を下方にコピーすることで各文字列の奇数番目の文字を「★」に置き換えています。

 C3セル

=REGEXREPLACE(B3,".(.)?","★$1")

 最初の例(偶数番目だけ置き換える)とカッコの位置が変わっただけでなく「?」(0文字でもマッチさせる)が加わっているのがポイントです。
 最初の例の場合、実は文字数が奇数のときに最後の1文字が置換の対象になっていない(それで問題ない)のですが、こちらの例では文字列が奇数のときも最後の1文字を置き換えの対象にする必要があり、そのための措置です。