パワークエリでデータ表を加工する際に、「複数の列」を「1つの列」に結合したり、逆に「1つの列」を「複数の列」に分割したりするケースがよくある。ということで、今回は「列の結合」や「列の分割」の操作手順を紹介していこう。あわせて、列を分割するときに活用できる「サフィックスの追加」についても紹介しておこう。
列の結合(列のマージ)
今回は「列の結合」と「列の分割」について紹介する。パワークエリでは、意外とよく使用する機能なので、その使い方をよく学んでおく必要がある。あわせて「サフィックスの追加」についても紹介しておこう。
まずは、「複数の列」に分割して記録されているデータを「1つの列」に結合する方法を紹介する。
以下の図は、会員名簿のデータを「Power Query エディター」に取得した例だ。今回の例では、会員の氏名が「姓」と「名」の2列に分けて記録されている。とはいえ、「氏名」を1列のデータとして作業を進めていきたい場合もあるだろう。このような場合に列の結合(列のマージ)が活用できる。
列を結合するときは、「Ctrl」キーを押しながら列名をクリックしていき、結合する列を同時に選択する。
続いて、「変換」タブにある「列のマージ」をクリックする。
結合方法を指定する画面が表示される。「区切り記号」には“結合するデータの間に挿入する文字”を指定すればよい。今回の例では「スペース」(半角スペース)を指定した。「新しい列名」には“結合後の列名”を指定すればよい。
「OK」ボタンをクリックすると、選択していた列のデータが結合され、1列のデータとして扱えるようになる。なお、この工程は「結合された列」という名前でステップに記録される仕組みになっている。
今回の例では、データの間に「スペース」を挿入したが、代わりに「コロン」(:)や「コンマ」(,)などの記号を指定することも可能となっている。何も挿入しないでデータを結合したい場合は、「区切り記号」に「なし」を指定すればよい。
なお、「列のマージ」コマンドは「列の追加」タブにも用意されている。このコマンドも先ほどと同じ操作手順で使用することが可能だ。
ただし、それぞれ動作が異なることに注意しておく必要がある。「列の追加」タブにある「列のマージ」をクリックした場合は、結合前の列がそのまま維持され、結合したデータは「新しい列」としてデータ表の右端に追加される仕組みになっている。
このように同じコマンドが「変換」タブと「列の追加」タブの両方に用意されているケースもある。それぞれの違いは、以下のように認識しておけばよい。
◆「変換」タブ
・選択した列のデータを加工後のデータに置き換える
◆「列の追加」タブ
・選択した列のデータはそのまま維持される
・加工したデータで「新しい列」を追加する
区切り記号による列の分割
続いては、「1つの列」を「複数の列」に分割するときの操作手順を解説していこう。こちらは、状況に応じて分割方法を検討する必要がある。
まずは、「区切り記号」をもとにデータを分割する方法だ。この方法は、「スペース」や「ハイフン」などの特定の記号を基準にデータを分割する、と考えればよい。
今度は「氏名」の列を「姓」と「名」に分割してみよう。以下の図に示した例の場合、姓と名の間に「半角スペース」が挿入されているので、これを基準に列(データ)を分割すればよい。「氏名」の列を選択し、「ホーム」タブにある「列の分割」→「区切り記号による分割」を選択する。
区切り記号に「スペース」を指定し、分割方法を選択する。今回の例の場合、各データに「スペース」の文字は1個しか含まれていないので、どの分割方法を選択しても同じ結果になる。
「OK」ボタンをクリックすると、「スペース」の部分でデータが分割され、氏名のデータを「姓」と「名」に分けた2列のデータとして扱えるようになる。
この工程は「区切り記号による列の分割」という名前のステップで記録され、その直後に各列のデータ型を自動判別する「変更された型」のステップが追加される仕様になっている。
なお、分割後の列名は、元の列名をもとに「氏名.1」や「氏名.2」のように自動命名される。これらの列名を変更したいときは、列名の部分をダブルクリックして、好きな列名を入力すればよい。
文字数による列の分割
次は、「文字数」を指定して列(データ)を分割する方法を紹介する。以下の図は、ある部活の名簿データを「Power Query エディター」に取得した例だ。このデータ表にある「クラス」を「年」と「組」に分割してみよう。
この場合、「★年」の部分が必ず2文字になるので「文字数」でデータを分割することが可能だ。「クラス」の列を選択し、「列の分割」→「文字数による分割」を選択する。
文字数に「2」を指定し、分割方法を選択する。今回の例では「最初の2文字」を基準にデータを分割するので「できるだけ左側で1回」を選択すればよい。なお、「繰り返し」を選択すると、N文字ずつ繰り返してデータが分割されるため、分割後の列数が3列以上になってしまうケースもある。
「OK」ボタンをクリックすると、データが「最初の2文字」と「それ以降」に分割される。ただし、分割後の左側の列は「★年」というデータになっていない。
これは、分割後に自動追加される「変更された型」のステップにより、左側の列が「日付」と判別されてしまったことが原因だ。たとえば、「1年」は「2001年」、「2年」は「2002年」の日付データと判断されてしまった訳だ。これを「★年」のデータにするには、データ型を「テキスト」に変更してあげる必要がある。
このように、分割後の列の「データ型」が適切に判別されないケースもある。たいていの場合、データ型は正しく自動判別されるが、絶対とは言い切れないので、念のため注意しておく必要があるだろう。
サフィックスの追加が必要な列の分割
最後に、「サフィックスの追加」が必要な列の分割について紹介しておこう。以下の図は、ある企業の社員名簿を「Power Query エディター」に取得した例だ。それぞれの所属は「▲▲支社△△部」のように続けて記述されている。これを「▲▲支社」(または東京本社)と「△△部」に分割してみよう。
この場合は、「社」の文字を基準にデータを分割できると考えられる。実際に試してみよう。「所属」の列を選択し、「列の分割」→「区切り記号による列の分割」を選択する。
続いて、分割方法を指定する。「社」のように“特定の文字”で分割したい場合は「カスタム」を選択し、その下に「区切り用の文字」を入力すればよい。
「社」の前後でデータが2列に分割される。ただし、区切り文字に指定した「社」の文字は削除されてしまうため、左側の列が「東京本」や「名古屋支」といったデータになってしまう……、という不具合が発生する。
このような場合は、「社」の文字を後から補完してあげればよい。この処理に利用できるのが「サフィックスの追加」だ。左側の列を選択し、「変換」タブにある「書式」→「サフィックスの追加」を選択する。
「サフィックスの追加」は、データの末尾に“好きな文字”を追加できる機能となる。今回の例の場合、「社」の文字を指定して「OK」ボタンをクリックすればよい。
各データの末尾に「社」の文字が追加され、「東京本社」や「名古屋支社」のようにデータを修正することが可能となる。
このように「区切り記号による列の分割」は、区切り文字を削除した形でデータを分割する仕様になっている。このため、後から「区切り文字」を補完してあげる工程が必要になるケースもある。任意の文字でデータを分割するテクニックとして、覚えておくと役に立つだろう。
なお、「書式」コマンドにある「プレフィックスの追加」は、データの先頭に“好きな文字”を追加できる機能となる。こちらも色々な場面で活用できるので、あわせて覚えておくとよい。