※この記事は 2023/7/22 に作成しました。
※オプションで、「地域の設定」の「クエリステップ」は、「常に英語」に設定されています。日本語で使用している場合は、各自環境で作成されるコードに読み替えてください。
以下のように、複数の項目が1列になっているデータをテーブルにする方法の2番目です。
Index
- (1) Table.AddIndexColumn → Table.Pivot
- (2) Table.Split → Table.Transpose → Table.Combine
- (3) List.Split → Table.FromRows
- (4) Table.AlternateRows → Table.FromColumns
- (5) List.Alternate → Table.FromColumns
- (6) まとめ
解法2: 3行ごとにテーブルを作成して縦横変換
データを3行ごとにテーブルに変換し、Table.Transposeで縦横入替してつなげます。
GUIが使用できないので少々面倒に思えますが、内容は比較的簡単です。
Table.Split
この関数はGUIから操作できないため、以下のように数式バーの左の「fx」を押してステップを追加し、Table.Split関数を入力します。(詳細エディタを使用してもよい)
Table.Splitの第二引数は、項目数の3を入れます。
3項目ずつがテーブルになったリストが出来上がります。
Table.Transpose
テーブルの縦横入替するには、「変換」タブの「テーブル」グループから「入れ替え」を使用します。その時使われる関数が Table.Transpose です。しかし、今回はリストの項目それぞれに処理を適用しなければならないので、 List.Transoform 関数を利用し、その中で Table.Transpose を使用することになります。
先と同様に「fx」でステップを追加し、関数を入力します。List.Transformの第2引数は、関数になります。1つ1つに関数を適用する「each」を最初に書き、「_」はそれぞれのリストにあるテーブルを示します。(see. Mから始めよう #6)
Table.Combine
最後に、全てのテーブルを結合するのですが、これもGUIからできないので、「fx」でステップを追加し、以下の関数を入力します。
Table.TransformとTable.Combineは、以下のような処理イメージです。
最後に、列の型と列名を設定して完成です。

Table.Split関数
Table.Split(
table as table,
pageSize as number
) as list
Table.Splitは、テーブルの行を、指定された行数で区切って複数のテーブルを作成し、リスト形式で返す関数です。戻り値がリスト型であることに注意してください。

ソースコード
let
// ファイルの読み込み
Source = Table.FromColumns(
{
Lines.FromBinary(
File.Contents( "** File Name **" ),
null,
null,
932 // シフトJIS
)
}
),
// ** Table.Split **
Custom1 = Table.Split(Source, 3),
ListTransform = List.Transform(
Custom1,
each Table.Transpose(_)
),
// テーブルの結合
Custom2 = Table.Combine(ListTransform),
// 列の型を設定
ChangedType =
Table.TransformColumnTypes(
Custom2,
{
{"Column1", type text},
{"Column2", type text},
{"Column3", type date}
}
),
// 列名の変更
RenamedColumns =
Table.RenameColumns(
ChangedType,
{
{"Column1", "書名"},
{"Column2", "著者名"},
{"Column3", "出版日"}
}
)
in
RenamedColumns