いきなり答える備忘録

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

(Gスプレッドシート)苗字と名前を入れ替える

 Googleスプレッドシートで、1つのセル内に記録された苗字と名前(半角スペースで区切られているものとします)を、関数を使って入れ替える方法についてです。

  • REGEXREPLACE関数による方法や、RIGHT関数等による方法により、苗字と名前を入れ替えられます。

手順

REGEXREPLACE関数による方法

 Googleスプレッドシート特有のREGEXREPLACE関数による方法です。1つの関数だけで入れ替えを済ませることができます。

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

 B3:B5にそれぞれ半角スペースで区切られた苗字と名前が記録されています。
 そこでC3セルに次のように入力し、下方にコピーします。

=REGEXREPLACE(B3,"([^ ]*) ([^ ]*)","$2 $1")

 第1引数の中には、2つの「[^ ]*」があり、それらの間には半角スペースがあります。
 この「[^ ]*」は、半角スペース以外の文字からなる一連の文字列を表しています。つまり最初の「[^ ]*」は名前(Kouichi)を、2番目の「[^ ]*」は苗字(Yamada)を表しています。さらに2つの「[^ ]*」をカッコで囲むことで、最初の「[^ ]*」には「$1」という別名を、2番目「[^ ]*」には「$2」という別名が自動的に与えらえます。
 あとは簡単で、第3引数を「"$2 $1"」とすることにより苗字と名前を入れ替えた文字列が生成されます。
 

f:id:accs2014:20190527011845p:plain:right:w450

 実行結果です(式コピー後)。
 式の考え方を理解するまでがちょっと難しいですが、半角スペースで区切られている部分が3つになろうが4つになろうが同じように名前をつけて入れ替えることができます。

SPLIT関数とINDEX関数による方法

f:id:accs2014:20190527234013p:plain:right:w650

 上記例と同じく、B3:B5にそれぞれ半角スペースで区切られた苗字と名前が記録されています。
 C3セルに次のように入力して下方にコピーします。

=INDEX(SPLIT(B3," "),2)&" "&INDEX(SPLIT(B3," "),1)

 SPLIT関数を使うことで半角スペースの前後の文字列にインデックス(番号1,2)を与えることができるので、あとはINDEX関数で順番を入れ替えて取り出すというものです。
 

f:id:accs2014:20190527234010p:plain:right:w450

 実行結果です(式コピー後)。本記事で示した例の中で最もわかりやすい式になっているものと思います。
 ワークシート関数でSPLIT関数が使えるGoogleスプレッドシートのメリットが実感できる例の一つかと思います。

RIGHT関数とLEFT関数による方法

 半角スペースの位置を特定することで苗字と名前を抽出する方法です。Excelでも多用される方法です。
 類例はいくつかありますが、比較的単純なものを紹介します。

f:id:accs2014:20190527011842p:plain:right:w650

 これまた上記例と同じく、B3:B5にそれぞれ半角スペースで区切られた苗字と名前が記録されています。
 C3セルに次のように入力して下方にコピーします。

=RIGHT(B3,LEN(B3)-FIND(" ",B3))&" "&LEFT(B3,FIND(" ",B3)-1)

 「FIND(" ",B3)」により半角スペースが何文字目にあるのかを特定し、さらにRIGHT関数で苗字を、LEFT関数で名前を抽出して&でつないでいます。
 

f:id:accs2014:20190527011839p:plain:right:w450

 実行結果です(式コピー後)。
 オーソドックスなやり方ですが、これはこれで複雑ですし他の方法と比べて拡張性や柔軟性で劣ります。