公開日 2025/10/01
更新日 2025/10/01

スペースを含む名前を姓と名の列に分ける (Power Query) 

目次

ここでは、下図のようなスペースを含む名前を [姓] と [名] の列に分けて表示するために、Power Query を使ってみます。ワークシート関数 (TRIM、SUBSTITUTE、FIND、SEARCH、LEFT、MID など) を使って処理することもできますが、結構数式が複雑に長くなるので、GUI で操作できる Power Query でのやり方も覚えておくとよろしいかと。

今回使うテーブルのデータにはこんな特徴があります。そう、結構ぐちゃぐちゃです。

★ No.1 のデータは先頭に半角スペースがある 
★ No.3 のデータは姓と名の間に半角スペースが 2 つある 
★ No.5 のデータは姓と名の間に全角スペースがある

列を分割する

1. テーブルを選択して、リボンの [データ] タブの [データの取得と変換] グループの [テーブルまたは範囲から] をクリックします。

2. [氏名] 列のデータの前後にあるスペースを削除した結果を表示する (氏名列をコピーしたいけどついでにトリミングをする) ために、Power Query エディターの リボンの [列の追加] タブの [全般] グループの [カスタム列] をクリックします。 

3. [新しい列名] に (どうせ最終的に修正するからなんでもよいけど) 「分割用氏名」と指定し、[カスタム列の式] に 「=Text.Trim([氏名])」と数式を作って [OK] をクリックします。

4. 列が作成され、トリミングされた [氏名] の値が表示されます。(西郷さんのデータは先頭にスペースがあったけれど、それが削除されている)

ちなみにワークシート関数の TRIM 関数とは違って文字列間の連続するスペースの 1 つ残し、という処理はされません。よって、No.3 の織田さんの姓と名の間には 2 つの半角スペースが残っています。

5. 全角スペースを半角スペースに統一するため、作成した列を選択して、リボンの [変換] タブの [値の置換] をクリックします。

6. [検索する値] に全角スペース、[置換後] に半角スペースを入力して [OK] をクリックします。

7.  スペースのサイズが統一されます。

8. スペースを区切りとした分割をするため、作成してスペースのサイズを整えた列を選択して、リボンの [変換] タブの [テキストの列] グループの [列の分割] - [区切り記号による分割] をクリックします。

9. [区切り記号を選択するか入力してください] で「スペース」を選択し、[一番左の区切り記号] を選択して、[分割の方向] で [列] が選ばれていることを確認して [OK] をクリックします。

10. 作成した列が 2 つの列に分割され、姓と名に分かれます。(もちろんスペースのなかった No.10 は分割処理できません)

11. 姓と名の間に複数のスペースがあった場合、文字列の先頭や末尾に不要なスペースが残っている可能性があります。 分割した 2 つの列を選択して、リボンの [変換] タブの [テキストの列] グループの [書式] - [トリミング] をクリックします。

12. 文字列の前後の不要なスペースが削除されます。必要であれば列名を修正して、読み込みます。 リボンの [ホーム] タブの [閉じる] グループの [閉じて読み込む] をクリックします。

13. 分割した結果を含むテーブルが読み込まれます。

おまけ

データソースとなっているテーブルに新しいレコードが追加されたり、既存のデータが編集されたりした場合は更新を実行すると、加工後のテーブルに追加されて最新の状態が反映されます。

 


もちろん M 数式言語で 1 つの数式ですべての処理をすることもできるんですが、ワークシート関数で長い数式を作成するよりも、GUI でできて、なおかつ更新にも対応できるようにする、ということで Power Query エディターで 1 つずつコマンドを使ったステップによる処理をしてみました。

同じ TRIM 関数でもワークシート関数と M 数式言語では微妙に処理がことなるなど、新たな発見もあるのではないでしょうか。

石田 かのこ

ご相談だけでも大歓迎!
クリエアナブキが組織の課題を解決します。

087-802-1023

営業時間:平日9:00~18:00