いきなり答える備忘録

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

(Gスプレッドシート)全角英字と全角数字だけを半角にする

 Googleスプレッドシートで、文字列中の全角英数字だけを半角にして全角カナや記号はそのままにする方法です。
 関数を使いますが、かなり長くなります。

  • REGEXEXTRACT関数を使って1文字ずつ全角英数字かどうかを判定し、それらにだけASC関数を適用すれば全角英数字だけを半角に変換できます。

手順

 画像ではB列にいくつかの文字列が入力されています。
 そこでC3セルに式を入力して、B3セルの文字列のうち全角英数字だけを半角にしています。他の行についても同様です。

 C3セル

=CONCATENATE(
ARRAYFORMULA(
IFNA(REGEXEXTRACT(MID(B3,SEQUENCE(LEN(B3)),1),"[^A-Za-z0-9]"),ASC(MID(B3,SEQUENCE(LEN(B3)),1)))
)
)

 「=REGEXREPLACE(~,ASC("$1"))」などとできればいいのですが、キャプチャ文字列に対して関数が効かないためうまくいきません。
 そこでまずはSEQUENCE/MID関数を使い文字列を1文字ずつ分割します。そしてREGEXEXTRACT関数とIFNA関数を使って全角英数字以外にマッチするものをそのままとし、マッチしないもの(全角英数字)にASC関数を適用して最後にCONCATENATE関数で連結しています。
 普通に考えればREGEXMATCHとIFを使うところですが、TRUE/FALSEの両方について戻り値を設定する必要があります。一方でREGEXEXTRACTを使えばマッチしない場合にN/Aエラーになるため、IFNAと組み合わせることでマッチしない場合の戻り値だけ記述すればよく、若干式を短縮できます。しかしそれでも相当長い式になっています。

 なお、画像からわかるように数値や日付は文字列に変換されます。