行方向へ分割する


ここまでは、外部のCSVファイルを読み込むなど「取得と変換」の"取得"に関する使い方を解説してきました。ですが、Excelユーザーは、もっと違う、もっと細かい"変換"を望んでいます。今回は、下図のような変換方法を解説します。

こういうことを望んでいた人って、きっと少なくないと思いますよ。「取得と変換」を使えば、楽勝です。

下図のような表があったとします。なお、B列には文字列の表示形式を設定しています。

表の中にアクティブセルを置いて[テーブルまたは範囲から]をクリックします。

実行すると、表をテーブルに変換します。もちろん、最初からテーブルになっていれば、この手順はスキップされます。

テーブルに変換するとき[先頭行をテーブルの見出しとして使用する]のチェックをオンにしてください。ちなみにExcelは、先頭行がタイトル(見出し)かどうかを、データの種類で判断しています。先頭行と2行目以降のデータ種が異なっていたとき、先頭行をタイトル(見出し)と判断します。今回はデータが少ないですから、先頭行も2行目以降もすべて同じ"文字列"です。このときExcelは、先頭をタイトル(見出し)とは認識しません。これは、テーブルに変換するときだけでなく、並べ替えなどでも同じです。

テーブルに変換されると、このテーブルがPower Queryエディタに読み込まれます。

セルに「1-2-3」などを普通に入力すると、Excelはこれを日付と認識して、自動的に日付の表示形式を設定してきます。今回は、それでは困るので、事前に2列目(B列)へ文字列の表示形式を設定しておきました。ただ、それでもPower Queryエディタで読み込むと、日付と認識されてしまうようです。まぁ、こんなこともありますよ。2列目を選択して「データ型」で[テキスト]を選択してください。

実行すると「列タイプの変更」の確認が表示されます。

これは「取得と変換」がデータ型を"日付"と判断したんだけど、その判断は間違っていたと。その判断そのものを変更しますか?という確認です。[現在のものを置換]ボタンをクリックすると「取得と変換」の判断をさかのぼって変更します。[新規手順の追加]ボタンをクリックすると、「取得と変換」が行った最初の判断(間違えて"日付"だと認識した)は、そのまま有効にして、新しくもうひとつ"日付"→"文字列"の型変換手順を追加します。今回は[現在のものを置換]にしましょう。

次に、2列目全体を選択して、[列の分割]-[区切り記号による分割]を実行します。

この機能は、Excelの「区切り位置」のような機能ですが、さらに高機能です。「区切り位置」ではできないような分割も可能です。「区切り記号」は自動的に"-"が選択されているはずです。必要であれば、適切な区切り記号を指定してください。

下の方にある[詳細設定オプション]をクリックします。

[分割数]で「行」を選択します。これがポイントです。あとは、[OK]ボタンをクリックするだけで、次のように分割できます。

[閉じて次へ読み込む]で、任意の場所に読み込みます。

もちろん、別のシートに読み込むこともできますが、ここでは分かりやすいように近くへ読み込みます。

完成です。元の表に新しいデータを追加してみましょう。更新すると反映されます。

セル内改行も分割できる

初めて「取得と変換」を触った頃、この「列の分割」を見て「はいはい、あれでしょ、"区切り位置"と同じことができるんでしょ、まぁExcelでやってもいいけどね~」みたいに思いました。詳細設定の「行」を見たときも「ん?行方向に分割?お前は何を言っているんだww」と思ったんですが、やってみたらウーロン茶吹きました。なんじゃ、これは。こんなことができるのかーー!と。これ、VBAやワークシート関数でやろうとしても、けっこう大変ですよ。さらに、この「列の分割」には[特殊文字を使用して分割]という機能もあります。特殊文字のリストを開いてみると

「おいおい!なんだよ!お前もしかしてセル内改行も分割できちゃうの?」…はい、簡単にできました。

ちなみにExcelのセル内改行は「0x0A」(LF:Line Feed, 改行)です。Power Queryエディタで読み込んだとき、セル内改行が含まれていると「列の分割」を開いただけで自動的に区切り記号として「#(lf)」が設定されます。すごいですね~便利ですね~